Answers:
您可以使用“ 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
path/to/file
在所有情况下都不能正常工作?让我感到困惑的是,通过debugfs ..... /dev/fs_blockdev
我的理解,我只考虑过一个文件系统,而该系统内的所有这些文件都可以通过其路径或通过Thair inode访问,您想表达什么?
debugfs -R "stat /home/myuser/foo.txt" /dev/sda5
导致错误。但是调用debugfs -R "stat /path/on/rootfs" /dev/sda3
有效。
sudo
,否则将显示一些无用的消息。
查看“ debugfs”的语法,尤其是“ stat”命令。这将显示文件使用的数据块的列表。您可以使用“ -f”参数将参数传递给“ debugfs”,以从脚本中调用它。
一种获取块列表的简单方法(无需像debugfs
答案中那样从分区中读取)是使用FIBMAP
ioctl。我不知道有什么命令可以这样做,但是写一个命令很简单。快速的Google搜索为我提供了FIBMAP用法的示例,它可以满足您的需求。一个优点是它可以在支持该bmap
操作的任何文件系统上运行,而不仅仅是ext3。
更新(更有效)的方法是FIEMAP
ioctl,它也可以返回有关范围的详细信息(对ext4有用)。
hdparm --fibmap /path/to/filename
我不会使用zfs,但会使用ext4,btrfs,(v)fat等
--fibmap
使用时,这必须是给定的唯一标志。它需要文件路径作为参数,并将在磁盘上打印出该文件占用的设备范围(扇区范围)的列表。扇区编号作为绝对LBA编号给出,从物理设备(而不是分区或文件系统)的扇区0引用。然后,此信息可用于多种目的,例如检查较大文件的碎片化程度,或确定在故障注入测试过程中故意破坏的适当扇区。
e2fsck -b 32768 / dev / hda1我觉得您可以尝试一下,或者如果您在同一目录下查找更多的docx,则可以检查以下内容
http://www.linux-tutorial.info/modules.php?name=MContent&pageid=97
File not found by ext2_lookup
。因此,最好将inode表示法用作stat的参数。使用ls -i
获取文件的inode编号,然后调用debugfs与“<>”,而不是/路径/到/文件数量。例如:# debugfs -R "stat <1234567>" /dev/sda2