filefrag fibmap が無効な FAT 物理オフセットを返します。

filefrag fibmap が無効な FAT 物理オフセットを返します。

ファイルシステムに拘束されないように、すべてのパーティションの空のスペースマッピングを取得しようとしています。これを行うには、すべての空きスペースを使用するファイルを作成し、「filefrag -e」コマンド(e2fsprogs v1.42.9)を使用してスペースマップを作成します(Ubuntu 14.04 Trustyでテスト、カーネル3.16.0を使用)67 4.1.20 -040120、dosfstools v3.0.26-1)。

これはほとんどのファイルシステムで動作しますが、特にFATファイルシステムでは、パーティションサイズを超える物理オフセットが得られます。 これで質問が変更されました。下記の編集内容をご覧ください。

$ dd if=/dev/zero of=temp.img bs=512 count=2048000
$ sudo losetup /dev/loop1 ./temp.img
$ sudo parted /dev/loop1 mklabel msdos
$ sudo parted /dev/loop1 mkpart primary fat32 2048s 1026047s
$ sudo blockdev --rereadpt /dev/loop1
$ sudo mkfs -t vfat /dev/loop1p1
$ sudo mount /dev/loop1p1 ./mnt
$ sudo cp somefile1 ./mnt
$ sudo cp somefile2 ./mnt
$ df -B 512 ./mnt
Filesystem     512B-blocks  Used Available Use% Mounted on
/dev/loop1p1       1023440 21232   1002208   3% ./mnt
$ sudo dd if=/dev/zero of=./mnt/emptyspace.zeros bs=512 count=1002208
$ df -B 512 ./mnt
Filesystem     512B-blocks    Used Available Use% Mounted on
/dev/loop1p1       1023440 1023440         0 100% ./mnt
$ sudo filefrag -b512 -e ./mnt/emptyspace.zeros 
Filesystem type is: 4d44
File size of ./mnt/emptyspace.zeros is 513130496 (1002208 blocks of 512 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0.. 1002207:     348688..   1350895: 1002208:    1350880: merged,eof
./mnt/emptyspace.zeros: 1 extent found
$ cat /proc/mounts
/dev/loop1p1 .../mnt vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,
  iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
$ sudo umount /dev/loop1p1
$ sudo fsck /dev/loop1p1
fsck from util-linux 2.20.1
fsck.fat 3.0.26 (2014-03-07)
/dev/loop1p1: 4 files, 63965/63965 clusters
$ echo $?
0

(filefrag はパーティションの先頭に基づいて物理オフセットを返します)

$ cat /sys/class/block/loop1p1/start 
2048
$ cat /sys/class/block/loop1p1/size
1024000

(512バイトセクタのsysfsの起動とサイズ)

明らかに1350895は1024000より大きい。これはFIBMAP ioctlのLinux vfat / fat実装にあるバグですか、それとも他の理由がありますか?

EmmaVがこの問題を示唆するコメントを投稿したことを確認しました。この問題しかし、明確な答えはありません。

また、Theodore Ts'o(filefragの作成者)に連絡しましたが、彼はfilefragに関する既知の問題を指摘していません。

編集する: それに加えて、上記の問題はe2fsprogs v1.42.9のバグによって引き起こされることがわかりました。この問題に対する解決策はここで見つけることができますe2fsprogs v1.42.12に最初に含まれていました。アップグレードしてテストしましたが、出力が大きく異なります。

しかし、FATファイルシステムにはまだ問題があります。オフセットは少なくともパーティション内にありますが、ファイルの内容をfilefragから返されたブロックと比較すると違いが発生します。私は書いたPythonスクリプトはここにありますテスト目的で。何が問題なのかについてフィードバックや提案を送っていただきありがとうございます。

btrfs問題についてmkfsについて教えてくれる人なら誰でもボーナスを受けることができます! :)

ベストアンサー1

私はOGAWA HirofumiとTheodore Ts'oに連絡し、さまざまなカーネルとe2fsprogsタグをテストしました。 2015年現在、e2fsprogs v1.43-WIPで残りの問題が修正されました。私は信じる今回提出してくださいこの問題を解決しました。

完全なテスト履歴とテストスクリプトを使用できます。ここで発見

ストーリーのレッスン:1.43-WIPマニュアルページの下部に「and 2015+」と書かれていない限り、FATファイルシステムでfilefragを使用しないでください。

また、v9.43では、hdparm --fibmapにもバグが実装されていることに言及したいと思います。少なくともv9.45が必要ですが、hdparmをfilefragほど徹底的にチェックしていません。

おすすめ記事