Date: Thu, 17 Feb 2022 18:08:21 -0800 From: John-Mark Gurney <jmg@funkthat.com> To: Andriy Gapon <avg@FreeBSD.org> Cc: freebsd-stable List <stable@FreeBSD.org>, freebsd-fs <fs@FreeBSD.org>, "freebsd-geom@FreeBSD.org" <geom@freebsd.org> Subject: Re: fsck -C -p: NO WRITE ACCESS Message-ID: <20220218020821.GK97875@funkthat.com> In-Reply-To: <5eac56d0-51fb-5e23-0d2a-3c6b6bf163d0@FreeBSD.org> References: <346d021f-b737-f41a-883f-e821389c4431@FreeBSD.org> <20220214231758.GD97875@funkthat.com> <5eac56d0-51fb-5e23-0d2a-3c6b6bf163d0@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Andriy Gapon wrote this message on Tue, Feb 15, 2022 at 08:44 +0200: > On 15/02/2022 01:17, John-Mark Gurney wrote: > > Andriy Gapon wrote this message on Mon, Feb 07, 2022 at 14:15 +0200: > >> I've got a problem where fsck behaves differently from my expectations. > >> The problem happens with a filesystem on a GELI encrypted ZVOL. > >> The volume has 4K block size and that's the GELI's sector size as well. > >> FreeBSD is stable/13 from mid January. > > > > Did you put a ffs filesystem that was formatted on a 512 byte sector disk > > onto this geli device? > > As far as I can recall, no. I created it with newsfs on the geli device. Looks like it's a bug in newfs, as I just reproduced this myself: fsbtodb int32_t 0x00000003 and manually specifying a sector size of 4096 to newfs does not fix the issue. This is the issue: https://cgit.freebsd.org/src/blame/sbin/newfs/newfs.c#n399 It changes the sectorsize back down to 512 from whatever it should be, which means that the calculation in mkfs.c becomes off. I'd file a bug report and get someone who knows FFS to look at it. I tried to change mkfs.c to use realsectorsize isntead, so fsbtodb is set to 0, but then it break ffsinfo, because it's calculations are likely wrong. > > fsck calculates the sector size via (/sbin/fsck_ffs/setup.c): > > dev_bsize = sblock.fs_fsize / fsbtodb(&sblock, 1); > > > > and fsbtodb: > > ../../sys/ufs/ffs/fs.h:#define fsbtodb(fs, b) ((daddr_t)(b) << (fs)->fs_fsbtodb) > > > >> fsize 4096 shift 12 mask 0xfffff000 > >> frag 8 shift 3 fsbtodb 3 > > > > fsize / (1 << 3) == 4096 / 8 == 512. > > > > so, likely updating fsbtodb to be 0 instead of 3 would fix this. I'm not > > sure how to do this though, as tunefs and fsdb don't seem to have options > > to do this, and likely you'll want to update all the superblocks w/ this > > new value. -- John-Mark Gurney Voice: +1 415 225 5579 "All that I will do, has been done, All that I have, has not."
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20220218020821.GK97875>