Linux文件删除恢复

时间:2013-08-12 21:59:33

标签: linux proc inode data-recovery ln

有没有办法在Linux中创建链接到特定iNode的文件? 采取这种情况:有一个文件正在写入(可能是日志),特定文件被删除 dir / proc中的链接仍然指向它。在这种情况下,我们需要不是裸份,而是需要它的硬链接,以便我们可以在进程关闭之前进行未来修改和最后修改,系统将其删除。

如果我们有iNode号码有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:15)

由于没有涉及iNode的Syscall,因为这是一个extX fs的概念并且不是一个好的做法制作一个炉管但它是一个负责任的链(如MEL建议的那样),只有一个回答这个问题,因为在VFS级别我们处理文件路径和名称而不是其他内部表示。

但是为了实现跟踪最后修改的目标,我们可以使用 tail 连续监控和复制:

tail -c+1 -f --pid=PID /proc/PID/fd/FD > /path/to/the/copy

其中PID是已删除文件仍然打开且FD是其文件描述符编号的进程的pid。在 -f 尾部打开并按住文件以显示进一步修改, -c + 1 开始" tail"从第一个字节开始,用 - pid = PID 尾部通知pid退出时退出。

答案 1 :(得分:5)

您可以使用lsof恢复已删除的文件(有时)......

> lsof | grep testing.txt
less    4607    juliet  4r  REG 254,4   21  
       8880214 /home/juliet/testing.txt (deleted)

在尝试此操作之前,请务必阅读原始文章以获取完整的详细信息,除非您是像我一样的Maveric。

> ls -l /proc/4607/fd/4
lr-x------ 1 juliet juliet 64 Apr  7 03:19 
         /proc/4607/fd/4 -> /home/juliet/testing.txt (deleted)
> cp /proc/4607/fd/4 testing.txt.bk

http://www.linuxplanet.com/linuxplanet/tips/6767/1

享受

答案 2 :(得分:4)

总是很难回答“我能做什么”这样的问题。但据我所知,/ sys / nor / proc都没有提供不是符号链接的打开文件描述符的映射。我假设“但是dir / proc中的链接仍然指向它”你的意思是/ proc // fd / entries看起来像符号链接?我几乎可以肯定你无法恢复原始文件。

我把它拿回来:正如用户user2676075指出的那样,复制确实有效。只是硬链接不...

更新:如果您考虑一下,这是合乎逻辑的。

  • / proc和/ sys是与您的硬盘不同的文件系统。因此,他们无法提供类似目录条目的文件,这些条目可以硬链接到硬盘上的目标。
  • / proc / * / fd / entries假装是符号链接,但实际上它们是不同的,否则复制将无效。我认为他们假装是符号链接,用'ln -l'提供有意义的信息。

  • 关于(缺少)硬链接到某些inode的能力(假设有一些系统调用):由于以下原因,这不能成为内核或VFS接口的一部分:

    • 这会违反文件系统的完整性。文件系统不应该保留完全删除的文件的磁盘块,其方式与保留的文件相同。

    • inode可能是一个完全虚拟的概念,用于标识“存储数据流的插槽”。我假设可能存在将没有引用的插槽转换回插槽的问题。由文件系统中的名称引用。

    我承认反对这种系统调用的可能性并不紧张。但是考虑到VFS接口的当前状态(AFAIR没有提供这样的调用),对于任何文件系统实现(包括例如分布式文件系统)来说,提供调用将文件链接到一个文件系统将是一个沉重的负担。目录由inode。

ATM我想知道在删除最后一个引用之前和之后调用fstat实际上是否需要返回相同的inode信息... 吨

相关问题