系统相关
首页 > 系统相关> > linux – filefrag fibmap返回FAT的错误物理偏移量

linux – 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

(sysfs start& size在512字节扇区中)

显然1350895大于1024000.这是FIBMAP ioctl的Linux vfat / fat实现中的错误还是有另一个原因?

我注意到EmmaV在this question发表了一个暗示这个问题的评论,但没有明确的答案.

我也与Theodore Ts’o(filefrag的作者)保持联系,他没有表明filefrag的已知问题.

编辑:
除此之外,我发现上述问题是由e2fsprogs v1.42.9中的错误引起的.对此的修复是available here,它首先包含在e2fsprogs v1.42.12中.我已经升级和测试,输出非常不同.

但是,我仍然遇到FAT文件系统的问题.偏移现在至少在分区内部,但是将文件的内容与filefrag返回的块进行比较会产生差异.我写了一个python script here进行测试.我将很感激有关问题的任何反馈和建议.

奖励积分可以告诉我mtrfs为btrfs的问题!

标签:linux,fat,vfat
来源: https://codeday.me/bug/20190815/1660492.html