Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 31 Aug 2011 21:35:29 +0700
From:      Eugene Grosbein <egrosbein@rdtc.ru>
To:        FreeBSD Stable <freebsd-stable@FreeBSD.org>
Subject:   Unfixable UFS2 corruption
Message-ID:  <4E5E46B1.4070408@rdtc.ru>

next in thread | raw e-mail | index | archive | help
Hi!

Long story short: my /usr/local UFS2 filesystem somehow got corrupted
and "fsck -y" in single user mode does not fix it.

Explanation:

# ls -al /usr/local/obj/usr/local/src/secure/lib/libssh
ls: : No such file or directory
total 8
drwxr-xr-x  2 root  wheel  4608 Aug 30 01:28 .
drwxr-xr-x  3 root  wheel   512 Aug 30 01:28 ..

# rm -rf /usr/local/obj/usr/local/src/secure/lib/libssh
rm: /usr/local/obj/usr/local/src/secure/lib/libssh: Directory not empty

As I've said, I cold booted this FreeBSD 8.2-STABLE system to single user mode
where all file systems are not mounted (except root) and ran fsck -y /usr/local
It found no errors and said it is CLEAN. The problem still persists.

I've written small program and it said me this directory contains third file
(besides <.> and <..> entries) having zero file length.

I got contents of the directory to plain file with
"cat /usr/local/obj/usr/local/src/secure/lib/libssh > /tmp/libssh and put it online:
http://www.grosbein.net/crash/corruption/libssh

Please help. The program and its output follow:

#include <sys/types.h>
#include <dirent.h>
#include <err.h>
#include <stdio.h>

int main(int argc, char* argv[])
{

  DIR		*dirp;
  struct dirent *dp;
  unsigned	i;

  if (argc<2)
	return 1;

  if ( (dirp = opendir(argv[1])) == NULL )
	err (1, "opendir");

  i = 0;
  while ((dp = readdir(dirp)) != NULL) {
    i++;
    printf("Entry %u:\n"
	   "d_fileno=%u\n"
           "d_reclen=%u\n"
	   "d_type=%u\n"
	   "d_namlen=%u\n"
	   "d_name=<%s>\n\n",
	   i, (unsigned) dp->d_fileno, (unsigned) dp->d_reclen,
	   (unsigned) dp->d_type, (unsigned) dp->d_namlen,
	   (char *) dp->d_name);
  }
  return closedir(dirp);
}

# # ./readdir /usr/local/obj/usr/local/src/secure/lib/libssh
Entry 1:
d_fileno=1531227
d_reclen=12
d_type=4
d_namlen=1
d_name=<.>

Entry 2:
d_fileno=1389650
d_reclen=500
d_type=4
d_namlen=2
d_name=<..>

Entry 3:
d_fileno=24
d_reclen=512
d_type=8
d_namlen=0
d_name=<>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4E5E46B1.4070408>