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

Ale*_*lex 63 search inode files

我知道这个命令:

find /path/to/mountpoint -inum <inode number>
Run Code Online (Sandbox Code Playgroud)

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

enz*_*tib 46

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

$ sudo debugfs -R 'ncheck 393094' /dev/sda2 2>/dev/null
Inode   Pathname
393094  /home/enzotib/examples.desktop
Run Code Online (Sandbox Code Playgroud)

答案不是立竿见影的,但似乎比find.

的输出debugfs可以很容易地解析以获得文件名:

$ sudo debugfs -R 'ncheck 393094' /dev/sda2 | cut -f2 | tail -n2 > filenames
Run Code Online (Sandbox Code Playgroud)

  • @LaneRettig您必须在文件系统设备上运行它,而不是容器设备。这将类似于“/dev/mapper/sda2_crypt”。 (3认同)
  • 不适用于加密驱动器:`debugfs:尝试打开 /dev/sda2 时超级块中的错误幻数 /dev/sda2 包含 crypto_LUKS 文件系统 ncheck:文件系统未打开` (2认同)

Tom*_*ale 14

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
Run Code Online (Sandbox Code Playgroud)

例子:

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

  • 这是像搜索索引记录一样瞬时的,还是像搜索文件名一样需要与路径中的文件数量成正比的时间? (2认同)
  • @DamnVegetables - 刚刚尝试过这个,它几乎可以立即在相当大的子卷上工作。 (2认同)

小智 2

您可以查看 fsdb 命令,该命令在大多数 Unices 上都可以找到,并且我确信 Linux 上也可以使用该命令。这是一个强大的命令,允许您访问文件的核心 inode 结构,所以要小心。语法也非常简洁。

AIX 的 fsdb

Solaris 上的 fsdb 重新链接文件

虽然 fsdb 实际上不会让您发现 inode 的文件名,但它确实允许您在指定 inode 时直接访问 inode,本质上是将您“移植”到文件本身(或者至少是数据块指针),因此它是在这方面比发现更快;-)。
您的问题没有指定您要如何处理该文件。您可能正在解码 NFS 文件句柄吗?

SC。