如何在Linux上列出文件的数据块?

据我所知,Unix类操作系统上的每个文件都有一个inode号(可以用“ls -i”查看),每个inode是一个包含文件实际数据的磁盘块列表。

是否有一个Linux命令将文件名作为其参数,并打印该文件的inode指向的磁盘块列表?

PS有问题的文件系统是ext3

你可以使用“debugfs”工具来查看命令行或者interactivley中的文件信息。 要么使用:

# debugfs /dev/<spartition> # stat /path/to/file 

要么

 # debugfs -R "stat /path/to/file" /dev/<partition> 

例如:

 # 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 

看看“debugfs”的语法,特别是“stat”命令。 这将显示一个文件使用的数据块列表。 您可以使用“-f”参数将parameter passing给“debugfs”以从脚本中调用它。

获取块列表的简单方法(无需像debugfs解答那样从分区读取)是使用FIBMAP ioctl。 我不知道有什么命令可以这么做,但写一个很简单。 一个快速的谷歌search给了我一个FIBMAP使用的例子 ,这正是你想要的。 一个好处是它可以在任何支持bmap操作的文件系统上工作,而不仅仅是ext3。

一个更新的(也是更高效的)备选scheme是FIEMAP ioctl,它也可以返回有关范围的详细信息(对于ext4有用)。

至less在一些Linux机器上,“ls -s”可能会提供你正在寻找的东西。

编辑:我的坏,我看到你正在寻找一个块的列表本身,而不是他们的数量。

e2fsck -b 32768 / dev / hda1我觉得你可以试试看,或者如果你看到更多的docx在相同的你可以检查以下

http://www.linux-tutorial.info/modules.php?name=MContent&pageid=97