链接到特定的inode

10

我有一个文件被删除,但仍由程序持续打开。我使用lsof找到了这个文件的inode号码。如何创建一个硬链接指向该inode?

任何编程语言都可以,但Perl会更方便。

2个回答

13

从/proc/进程ID/fd/文件描述符复制

使用lsof命令查找进程ID和文件描述符。


1
我刚刚运行了我的小测试,这确实可以工作,但我不明白为什么!那些都是指向实际文件的符号链接(symlink),而符号链接通过其文件名访问文件,不是吗? - Thomas
1
你不能在/proc中创建硬链接,因为硬链接必须在同一文件系统上(也就是说,你的链接必须在/proc中)。复制应该没问题。 - mark4o
1
马克:已经注意到了,谢谢。托马斯:它们不是真正的符号链接,只是看起来像。请搜索 proc_register_dynamic 以获取更多信息。 - moonshadow
5
这是一个非常有用的程序,可以恢复当前数据(点赞 :) ),但它并没有真正回答这个问题。cp命令将已删除文件的内容复制到一个新文件中,而不是链接到原始inode。 - pabouk - Ukraine stay strong
@pabouk 所以,你认为这对提问者实际起作用了还是没有?他被错误地接受了吗?也许是提问者对自己在做什么有误解。 - can-ned_food
显示剩余2条评论

2
在EXT文件系统上,您可以使用debugfs命令重新创建链接,例如:
debugfs -w /dev/mapper/vg0-root -R 'link <16> myfile'

这将创建一个名为myfile的“文件”,并指向inode 16。


1
这回答了问题。谢谢!只有一个问题。link命令不会增加inode的引用计数。因此,实际上,在程序关闭文件描述符并且inode的引用计数减少为零后,文件可能会丢失。不幸的是,我不知道如何简单可靠地更改inode的引用计数。---另外,完整的答案应该显示如何获取inode号:stat -L /proc/PID/fd/FILE_DESCRIPTOR(或ls -Li)。 - pabouk - Ukraine stay strong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接