快速查找哪些文件属于特定的inode号


44

我知道以下命令:

find /path/to/mountpoint -inum <inode number>

但这是一个非常缓慢的搜索,我觉得必须有一个更快的方法来做到这一点。有人知道更快的方法吗?


这是我第一次看到使用inode的搜索。什么时候需要按inode搜索?
Coren 2012年

@Coren-如果您的文件前面带有“-”,则通常使用它。您可以执行ls -li查找其索引节点,然后:find。-inum <inode> -exec rm -i {} \; 这是一种确保您可以删除文件的方式。当然,您也可以使用'rm--filename'或rm ./-filename或rm“ -filename”。
swisscheese 2012年

2
@Coren与selinux一起,日志消息包括inode,但不包括完整路径。因此,您必须搜索inode才能找到要引用的文件。(无论如何都是我的用例)
Patrick

1
@Coren例如,当一个文件具有多个硬链接时,您已经发现其内容已过时并希望删除该文件,但是您仅找到了一个文件名,并希望删除其他文件名。
吉尔(Gilles)'“ SO-不要邪恶”

2
只需使用find / -inum <inode>。它比现在具有更大的可移植性,debugfs并且工作起来也更加可靠(例如,它可以找到不属于硬盘驱动器上的文件的路径,例如设备)。
7heo.tk 2015年

Answers:


33

对于ext4文件系统,可以debugfs在以下示例中使用:

$ sudo debugfs -R 'ncheck 393094' /dev/sda2 2>/dev/null
Inode   Pathname
393094  /home/enzotib/examples.desktop

答案不是即时的,但似乎比更好find
获得的输出可以很容易地解析以获得文件名。


我应该已经指定了文件系统类型。在我看来,对于不同的文件系统,执行这些操作的方法不会有所不同。我正在使用XFS,因此虽然我确定您的答案是正确的,但它不会特别帮助我。
亚历克斯(Alex)

6

btrfs

man btrfs-inspect-internal 说:

   inode-resolve [-v] <ino> <path>
       (needs root privileges)

       resolve paths to all files with given inode number ino in a given
       subvolume at path, ie. all hardlinks

       Options

       -v
           verbose mode, print count of returned paths and ioctl()
           return value

例:

  • sudo btrfs inspect-internal inode-resolve 15380 /home

0

您可以查看fsdb命令,该命令在大多数Unices上都可以找到,并且可以在Linux上找到。这是一个功能强大的命令,可让您访问文件的核心inode结构,因此请当心。语法也很简洁。

用于AIX的fsdb

Solaris上的fsdb重新链接文件

尽管fsdb实际上不会让您发现inode的文件名,但它确实允许您在指定inode时直接访问它,实质上是将您“移植”到文件本身(或至少是数据块指针),因此在这方面比查找要快;-)。
您的问题未指定您要对文件执行的操作。您是否正在解码NFS文件句柄?

sc。


好吧,我认为我所要处理的信息与我的问题无关,因此我将其遗漏了。就我而言,这只是一个好奇心问题;我的xfs_fsr碎片整理吐出了碎片整理的inode节点,一个碎片非常分散(超过5000个范围),我只是好奇它是哪个文件。find有效,速度太慢了。
亚历克斯(Alex)

我正在尝试解决一个问题,其中我的rhel vm每次引导都会执行完整的(20分钟!)fsck,而我要做的只是在/ var / opt / messages中报告的inode编号有问题。(话虽如此,find -inum实际上并未找到它)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.