我们有一个 inode 编号,我们试图将其与实际文件名相关联。文件系统是 XFS。看看有一些示例声称能够通过xfs_db
和/或来实现这一点,xfs_ncheck
但到目前为止,我们还没有成功地做到这一点。
例子
我们正在分类一个问题,我们希望找到与 inode 编号相关联的文件名,这些文件名显示在 .procsfdinfo
文件中/proc
。
$ grep inotify /proc/9652/fdinfo/23 | head
inotify wd:58eb9 ino:cfd30c7 sdev:20 mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:c730fd0c00000000
inotify wd:58eb8 ino:cfd1f09 sdev:1e mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:091ffd0c00000000
inotify wd:58eb7 ino:cfd1ee9 sdev:1a mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:e91efd0c00000000
inotify wd:58eb6 ino:cfd1ec8 sdev:1c mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:c81efd0c00000000
inotify wd:58eb5 ino:cfd1eb9 sdev:19 mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:b91efd0c00000000
inotify wd:58eab ino:cfd24cf sdev:20 mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:cf24fd0c00000000
inotify wd:58eaa ino:cfdbc51 sdev:1e mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:51bcfd0c00000000
inotify wd:58ea9 ino:cfdbc31 sdev:1a mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:31bcfd0c00000000
inotify wd:58ea8 ino:cfdbc0f sdev:1c mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:0fbcfd0c00000000
inotify wd:58ea7 ino:cfdb000 sdev:19 mask:3c0 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:00b0fd0c00000000
这些 inode 采用 HEX 格式,因此我们需要将它们转换为 DEC:
$ echo $((16#cfd30c7))
217919687
使用xfs_ncheck
:
$ xfs_ncheck -i $(echo $((16#cfd30c7))) /dev/mapper/vg0-dockerlv
ERROR: The filesystem has valuable metadata changes in a log which needs to
be replayed. Mount the filesystem to replay the log, and unmount it before
re-running xfs_ncheck. If you are unable to mount the filesystem, then use
the xfs_repair -L option to destroy the log and attempt a repair.
Note that destroying the log may cause corruption -- please attempt a mount
of the filesystem before doing this.
must run blockget -n first
问题
- 我们如何使用 XFS 做到这一点?
- 我已经使用 debugfs 和 ext3/4 文件系统做过类似的事情,但是这对于 XFS 来说似乎并不容易?
理论上该命令应该可以工作,但实际上,
xfs_ncheck
它是一个 shell 脚本,xfs_db
并且xfs_db
非常喜欢完全卸载的文件系统:因此,默认情况下,对于挂载的文件系统,它甚至根本不运行,需要额外的选项来忽略挂载状态
xfs_ncheck
(xfs_db
由然后你会收到关于需要重播的日志等的一些不清楚的消息。因此,您必须卸载或重新安装只读,或使用写时复制快照来生成干净的文件系统映像以成功运行这些命令。
但是,如果它只是常规的 inode 编号,对于已挂载的文件系统,您也可以使用
但这不会找到已删除的文件,并且还可能会丢失隐藏在其他挂载点下的文件(在这种情况下,请考虑
mount --bind
代替-xdev
)。另请注意,在硬链接等情况下,inum 文件名相关性可能有些随意。