mik*_*ike 14 linux unix filesystems ext3
据我了解,类 Unix 操作系统上的每个文件都有一个 inode 编号(可以用“ls -i”查看),每个 inode 是一个包含文件实际数据的磁盘块列表。
是否有一个 Linux 命令将文件名作为其参数并打印出该文件的 inode 指向的磁盘块列表?
PS 有问题的文件系统是 ext3。
kat*_*iel 20
您可以使用“debugfs”工具在命令行或交互上查看文件信息。要么使用:
# debugfs /dev/<spartition>
# stat /path/to/file
Run Code Online (Sandbox Code Playgroud)
或者
# debugfs -R "stat /path/to/file" /dev/<partition>
Run Code Online (Sandbox Code Playgroud)
例如:
# debugfs -R "stat /etc/passwd" /dev/sda5
Inode: 435914 Type: regular Mode: 0644 Flags: 0x0
Generation: 979004472 Version: 0x00000000
User: 0 Group: 0 Size: 1577
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 8
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x4a2d6f78 -- Mon Jun 8 23:07:20 2009
atime: 0x4a2d6f79 -- Mon Jun 8 23:07:21 2009
mtime: 0x4a2d6f78 -- Mon Jun 8 23:07:20 2009
Size of extra inode fields: 4
BLOCKS:
(0):1767438
TOTAL: 1
Run Code Online (Sandbox Code Playgroud)
获取块列表的一种简单方法(不必像debugfs答案中那样从分区中读取)是使用FIBMAPioctl。我不知道有什么命令可以这样做,但是写一个很简单;一个快速的谷歌搜索给了我一个 FIBMAP 使用的例子,它完全符合你的要求。一个优点是它可以在支持该bmap操作的任何文件系统上工作,而不仅仅是 ext3。
一个更新(也更有效)的替代方法是FIEMAPioctl,它也可以返回有关范围的详细信息(对 ext4 很有用)。
小智 5
hdparm --fibmap /path/to/filename
Run Code Online (Sandbox Code Playgroud)
我不会在 zfs 上工作,但会在 ext4、btrfs、(v)fat 等上工作
--fibmap使用时,这必须是唯一给出的标志。它需要一个文件路径作为参数,并将打印出该文件在磁盘上占用的设备范围(扇区范围)列表。扇区编号作为绝对 LBA 编号给出,从物理设备(不是分区或文件系统)的扇区 0 引用。然后,此信息可用于多种目的,例如检查较大文件的碎片程度,或确定在故障注入测试过程中故意损坏的适当扇区。