2019-01-16 21:34:25

by Etienne Buira

[permalink] [raw]
Subject: ext4fs block role, debugfs testb and icheck mismatch

Hi all,

For the background: i've hit defect sectors (on part of md array), and i
want to rewrite those sectors to force hdd reallocation, so i need to
figure out what they are used for.

Unrolling the layers under fs, i'm interested in a 4K blocks range that
starts at 2035, here starts the trouble:
debugfs 1.43.9 (8-Feb-2018)
debugfs: testb 2035
Block 2035 marked in use
debugfs: icheck 2035
Block Inode number
2035 <block not found>

>From this result, i tried to figure out if this block were used for fs
internal structures.
Using dumpe2fs, i see that this block belongs to group 0, and falls
beyond fs structures (last block for inode table is reported as 1568).
Block 2035 is not reported as free blocks.

Running forced (fs was marked clean) RO check with e2fsck (on mounted
filesystem) did not report block 2035 in block bitmap differences.

Oh, and yes, unmounting the filesystem would be a costy operation, so
better if avoided (that's why i ran e2fsck RO, and only looked for
results about the block of interest).

So, how can i know how this (these, actually) block is used?

Regards.

PS: I'm not subscribed to the list, so please CC me.


2019-01-20 11:35:54

by Etienne Buira

[permalink] [raw]
Subject: Re: ext4fs block role, debugfs testb and icheck mismatch

On Wed, Jan 16, 2019 at 10:34:23PM +0100, Etienne Buira wrote:
> For the background: i've hit defect sectors (on part of md array), and i
> want to rewrite those sectors to force hdd reallocation, so i need to
> figure out what they are used for.

Hi,

I could resolve my issue, i was wrong on block number.

What's left is the weird behaviour of debugfs, which reports a given
block as "in use", and not linked to any inode (although it is in data
part):

> Unrolling the layers under fs, i'm interested in a 4K blocks range that
> starts at 2035, here starts the trouble:
> debugfs 1.43.9 (8-Feb-2018)
> debugfs: testb 2035
> Block 2035 marked in use
> debugfs: icheck 2035
> Block Inode number
> 2035 <block not found>
>
> From this result, i tried to figure out if this block were used for fs
> internal structures.
> Using dumpe2fs, i see that this block belongs to group 0, and falls
> beyond fs structures (last block for inode table is reported as 1568).
> Block 2035 is not reported as free blocks.

The debugfs queries have been done multiple times, so it is quite
unprobable fs allocated this block everytime before i issued testb,
and released it by the time i issued icheck.

Regards.