如何找出文件在磁盘上的物理位置(块号)?

Ric*_*shi 10 linux performance filesystems debugging

这是一个晦涩的问题,我知道。我正在尝试对 Linux 机器上的某些磁盘进行一些性能测试。我得到了一些不一致的结果,在同一个磁盘上运行相同的测试。我知道磁盘具有不同的性能,具体取决于正在访问磁盘的哪个部分。特别是,由于接近恒定的数据密度和恒定的旋转速度,对磁盘外部的读取和写入比对磁盘内部的读取和写入具有更高的吞吐量。

我想看看我的不一致是否可以归因于这种几何引起的吞吐量差异。是否可以使用现有工具找出文件在磁盘上的位置?

如果没有,我想我可以写一些东西来直接查找、读取和写入设备文件本身,绕过(并破坏)文件系统,但我希望避免这种情况。我目前在 3.0 内核(Arch Linux,如果重要的话)上使用 ext4,但我对其他文件系统的技术也很感兴趣。

小智 10

您可以使用FIBMAP IOCTL,例证这里,或使用hdparm的

/ $ sudo /sbin/hdparm --fibmap /etc/X11/xorg.conf

/etc/X11/xorg.conf:
 filesystem blocksize 4096, begins at LBA 0; assuming 512 byte sectors.
 byte_offset  begin_LBA    end_LBA    sectors
           0    1579088    1579095          8
Run Code Online (Sandbox Code Playgroud)


Bar*_*Vos 7

您可以debugfs为此使用:

debugfs -R "stat ~/myfile" /dev/hda1
Run Code Online (Sandbox Code Playgroud)

相应地更改硬盘/分区驱动器并确保驱动器已卸载。您将获得一个包含所有使用块的列表:

BLOCKS:
(0):1643532
TOTAL: 1
Run Code Online (Sandbox Code Playgroud)


Paw*_*cki 5

这个线程可能会让你对 ext4 文件放置算法有一些了解。

debugfs有一个bmap函数,它似乎给出了你想要的数据。你应该能够给它一个文件的连续块并获得物理块号。