BETA4: Panic and can't cleanup filesystem

Don Lewis truckman at FreeBSD.org
Mon Sep 26 02:24:10 PDT 2005


On 26 Sep, B. Bonev wrote:
> 
> 
> After last update of man page to fsck_ffs I see that altarnate superblock
> for UFS2 is 160. I do: #fsck_ufs -b 160 /var Alternate super block location:
> 160
> ** /dev/ad2s1d
> ** Last Mounted on
> ** Phase 1 - Check Blocks and Sizes
> fsck_ufs: cannot alloc 1128481600 bytes for inoinfo
> #
> 
> Don't know how to continue to cleanup /var. Wanted help, if any has idea
> what to do...

It is likely that one of the cylinder group blocks got spammed.  Try
rebuilding fsck_ufs with the following change, but be prepared for the
possibility of major file system damage.

------ Forwarded message ------
    From: Don Lewis <truckman at FreeBSD.org>
 Subject: Re: fsck_ufs: cannot alloc 647172276 bytes for inoinfo
    Date: Wed, 18 May 2005 17:12:47 -0700 (PDT)
      To: einstein at yawl.com.br
      Cc: freebsd-stable at freebsd.org

On 18 May, Einstein Oliveira wrote:
> Hi,
> 
> I'm using FreeBSD 5.4-RELEASE-p1 and I found some messages about a 
> problem like this in freebsd-current a few months ago.
> 
> The fact is that this problem has just ocurred (on 5.4-RELEASE-p1), 
> probably because of a power outage (I didn't find anything in logs that 
> would cause a forced reboot).
> 
> Here is some information:
> 
> [fsck]
> 
> # fsck /usr
> ** /dev/ad0s1f
> ** Last Mounted on /usr
> ** Phase 1 - Check Blocks and Sizes
> fsck_ufs: cannot alloc 647172276 bytes for inoinfo
> 
> [dumpfs]
> 
> # dumpfs /usr
> ....
> cg 11:
> magic   806e54b3        tell    7e584000        time    Fri Nov 26 
> 01:12:38 1943
> cgx     -1312777034     ndblk   -931553057      niblk   -2017999697 
> initiblk -1985690579
> nbfree  2120952272      ndir    831365510       nifree  93179446 
> nffree  -1130132161
> rotor   -541929111      irotor  1807500773      frotor  -1630357508
> frsum   237144368       -1927321463     -1872608999     -481058689 
> 811654083       830922798       -91646688
> sum of frsum: 1537687372
> Segmentation fault (core dumped)
> 
> 
> I found in the discussion mentioned above
> 
> http://www.freebsd.org/cgi/getmsg.cgi?fetch=195794+200562+/usr/local/www/db/text/2005/freebsd-current/20050417.freebsd-current
> 
> this possible solution:
> 
>> At line 92 in src/sbin/fsck_ffs/pass1.c, you should see the following
>> block of code:
>> 
>>         for (c = 0; c < sblock.fs_ncg; c++) {
>>                 inumber = c * sblock.fs_ipg;
>>                 setinodebuf(inumber);
>>                 getblk(&cgblk, cgtod(&sblock, c), sblock.fs_cgsize);
>>                 if (sblock.fs_magic == FS_UFS2_MAGIC)
>>                         inosused = cgrp.cg_initediblk;
>>                 else
>>                         inosused = sblock.fs_ipg;
>> 
>> Try changing
>> 	inosused = cgrp.cg_initediblk;
>> to
>> 	inosused = (cgrp.cg_initediblk <= sblock.fs_ipg) ?
>> 	    cgrp.cg_initediblk : sblock.fs_ipg;
> 
> but it doesn't solve the problem.

It turns out that cg_initediblk is signed, and in your case the sign bit
is set, so it is being interpreted as a large negative value.  Try this
change instead:

 	inosused = (cgrp.cg_initediblk <= sblock.fs_ipg && cgrp.cg_initediblk > 0) ?
 	    cgrp.cg_initediblk : sblock.fs_ipg;




More information about the freebsd-current mailing list