如何创建到 inode (ext4) 的硬链接?

Ast*_*one 20 ext4 hard-link inode

如果我知道文件的索引节点(inode),但不知道它的路径(或其任何路径),是否可以直接创建到该 inode 的硬链接?

我可以找到文件sudo find / -inum 123546,然后创建一个硬链接,但这对我的应用程序来说太慢了。

注意我使用的是 ext4 文件系统。

Sté*_*las 25

AFAIK,而不是内核 API。如果存在这样的界面,则它必须仅限于超级用户,否则任何人都可以访问他们没有搜索权限的目录中的文件。

但是你可以debugfs在文件系统上使用(一旦它被卸载)来做它(假设你有对块设备的写访问权限)。

debugfs -w /dev/block/device

(替换/dev/block/device为文件系统所在的实际块设备)。

然后,在 的提示下debugfs,输入

统计< 123 >
(使用尖括号,用实际的 inode 编号替换 123)检查文件是否存在(inode 的链接计数大于 0)并且不是目录。

如果一切正常,请输入:

ln < 123 > path/to/newfile
创建硬链接(注意路径是相对于文件系统的根目录)。其次是:

米< 123 >
增加链接计数(按Enter除链接计数之外的所有字段,您希望在当前值上加 1)。

  • 这样的接口还必须检查文件是否具有非零链接计数,否则有可能恢复已删除但仍然打开的文件,该文件因违反内核不变量而被 IIRC 拒绝。 (6认同)
  • @OrangeDog,_search permission_ 是 POSIX 标准使用的术语。 (3认同)
  • @Gilles 相关:https://unix.stackexchange.com/a/499760/308316 (2认同)