Date: Mon, 26 Sep 2005 02:24:00 -0700 (PDT) From: Don Lewis <truckman@FreeBSD.org> To: b_bonev@mail.orbitel.bg Cc: freebsd-current@FreeBSD.org Subject: Re: BETA4: Panic and can't cleanup filesystem Message-ID: <200509260924.j8Q9O0Za094947@gw.catspoiler.org> In-Reply-To: <000001c5c282$8576ce60$4700000a@server>
next in thread | previous in thread | raw e-mail | index | archive | help
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@FreeBSD.org>
Subject: Re: fsck_ufs: cannot alloc 647172276 bytes for inoinfo
Date: Wed, 18 May 2005 17:12:47 -0700 (PDT)
To: einstein@yawl.com.br
Cc: freebsd-stable@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;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200509260924.j8Q9O0Za094947>
