Don Lewis wrote:
On 24 Sep, sam wrote:
Expect major file system lossage ...
I think this patch could be better, but this should get you going ...

Index: sbin/fsck_ffs/pass1.c
===================================================================
RCS file: /home/ncvs/src/sbin/fsck_ffs/pass1.c,v
retrieving revision 1.43
diff -u -r1.43 pass1.c
--- sbin/fsck_ffs/pass1.c       8 Oct 2004 20:44:47 -0000       1.43
+++ sbin/fsck_ffs/pass1.c       24 Sep 2007 23:15:22 -0000
@@ -93,9 +93,29 @@
                inumber = c * sblock.fs_ipg;
                setinodebuf(inumber);
                getblk(&cgblk, cgtod(&sblock, c), sblock.fs_cgsize);
-               if (sblock.fs_magic == FS_UFS2_MAGIC)
+               if (sblock.fs_magic == FS_UFS2_MAGIC) {
                        inosused = cgrp.cg_initediblk;
-               else
+                        if (inosused < 0 || inosused > sblock.fs_ipg) {
+                               pfatal("CG %d: PREPOSTEROUS NUMBER OF INODES %d 
(cg_initediblk), ASSUMING %d (fs_ipg)\n",
+                                   c, inosused, sblock.fs_ipg);
+                               /*
+                                * The cylinder group block is most likely
+                                * totally corrupted and will probably
+                                * fail the magic number check below as well.
+                                * Ignoring cg_initediblk and setting
+                                * inosused to sblock.fs_ipg will allow
+                                * a manual fsck to proceed further instead
+                                * of dying when it attempts to allocate
+                                * an insane amount of memory to store
+                                * the inode info for this cylinder group.
+                                * This may provide enough information
+                                * to allow the system administrator to
+                                * do a better job of patching the
+                                * filesystem with fsdb.
+                                */
+                               inosused = sblock.fs_ipg;
+                       }
+               } else
                        inosused = sblock.fs_ipg;
                if (got_siginfo) {
                        printf("%s: phase 1: cyl group %d of %d (%d%%)\n",


after patching

======================================================
# fsck /dev/aacd0s1f
** /dev/aacd0s1f (NO WRITE)
** Last Mounted on /usr
** Phase 1 - Check Blocks and Sizes
CG 124: PREPOSTEROUS NUMBER OF INODES 1668246575 (cg_initediblk), ASSUMING 23552 (fs_ipg)

UNEXPECTED SOFT UPDATE INCONSISTENCY
** Phase 2 - Check Pathnames
UNALLOCATED  I=2732216  OWNER=svn MODE=40755
SIZE=512 MTIME=Sep  4 12:22 2007
DIR=/home/svn

UNEXPECTED SOFT UPDATE INCONSISTENCY

REMOVE? no

UNALLOCATED  I=2732189  OWNER=venom MODE=40755
SIZE=512 MTIME=Sep  3 17:16 2007
DIR=/home/venom/svn

UNEXPECTED SOFT UPDATE INCONSISTENCY

REMOVE? no

UNALLOCATED  I=2732248  OWNER=root MODE=40755
SIZE=512 MTIME=Sep 14 19:03 2007
DIR=/home/venom/temp/devel/trunk

*** DELETE OUTPUT ***

** Phase 3 - Check Connectivity
UNREF DIR  I=2755667  OWNER=games MODE=40750
SIZE=1536 MTIME=Jul 19 16:45 2007
RECONNECT? no

UNREF DIR  I=2755600  OWNER=games MODE=40750
SIZE=1024 MTIME=Jul 19 16:45 2007
RECONNECT? no

UNREF DIR  I=2755628  OWNER=games MODE=40750
SIZE=1536 MTIME=Jul 19 16:45 2007
RECONNECT? no

UNREF DIR  I=2755584  OWNER=games MODE=40750
SIZE=512 MTIME=Jul 19 16:45 2007
RECONNECT? no

** Phase 4 - Check Reference Counts
UNREF FILE I=541705  OWNER=root MODE=100555
SIZE=218296 MTIME=Sep 10 14:51 2007
CLEAR? no

UNREF FILE I=541950  OWNER=root MODE=100555
SIZE=37832 MTIME=Sep 10 14:52 2007
CLEAR? no

*** DELETE OUTPUT ***

UNREF FILE I=4875961  OWNER=root MODE=100444
SIZE=35552 MTIME=Sep 10 14:50 2007
CLEAR? no

UNREF FILE I=6312454  OWNER=root MODE=104555
SIZE=15880 MTIME=Sep 10 14:52 2007
CLEAR? no

** Phase 5 - Check Cyl groups
CG 116: BAD MAGIC NUMBER

UNEXPECTED SOFT UPDATE INCONSISTENCY
FREE BLK COUNT(S) WRONG IN SUPERBLK
SALVAGE? no

SUMMARY INFORMATION BAD
SALVAGE? no

BLK(S) MISSING IN BIT MAPS
SALVAGE? no

CG 124: BAD MAGIC NUMBER

UNEXPECTED SOFT UPDATE INCONSISTENCY
LOST 74 DIRECTORIES

UNEXPECTED SOFT UPDATE INCONSISTENCY
fsck: /dev/aacd0s1f: Segmentation fault: 11
#
======================================================

/Vladimir Ermakov

_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to