Emm*_*maV 5 filesystems hard-disk
是否有任何 Linux 程序提供与 Sysinternals DiskView 相同(或部分)的功能,尤其是能够查看硬盘上文件的物理位置?
DiskView 网址:http ://technet.microsoft.com/en-gb/sysinternals/bb896650
Sté*_*las 14
对于某些文件系统,如 Linux 上的 ext4 或 btrfs,您可以使用 filefrag 来获取文件系统所在块设备上文件的数据段的偏移量。
$ seq 1000 > a
$ filefrag -v a
Filesystem type is: ef53
File size of a is 3893 (1 block of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 0: 82784147.. 82784147: 1: eof
a: 1 extent found
$ sudo dd bs=4k skip=82784147 count=1 if=/dev/storage/home 2>&- | head
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
这里的块设备是一个 LVM 卷。该卷可能在磁盘、分区、RAID 阵列、文件、RAM、网络块设备上具有物理卷……回到实际磁盘或磁盘组可能会很困难。
就我而言,这相对容易,因为它只是一个 GPT 分区顶部的逻辑卷,作为一个线性延伸。
$ sudo dmsetup table /dev/storage/home
0 1953120256 linear 8:98 384
Run Code Online (Sandbox Code Playgroud)
所以 /dev/storage/home 是设备 8:98 内的 384 个扇区,这恰好/dev/sdg2适合我。
$ cat /sys/block/sdg/sdg2/start
489060352
Run Code Online (Sandbox Code Playgroud)
所以 sdg2 是 /dev/sdg 中的 489060352 个扇区(这个系统上的第 7 个磁盘)。
所以我可以获得文件所在的单个磁盘内的偏移量:
$ sudo dd if=/dev/sdg skip="$((489060352+384+82784147*8))" count=1 2> /dev/null | head
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)