Linux之恢复误删除文件

直接说出你的结论。

如果文件被进程占用,恢复方法如下:
1 .使用 lsof 检查文件的状态。
输出被移除意味着它被占用。
2 .使用cat /proc/[pid]/fd/[fd]查看文件内容。
3 . 使用 cat /proc/[pid]/fd/[fd] > /path/to/new/file 恢复文件。

恢复原理是删除文件只是删除了索引节点,数据块还在。
/proc/[pid]/fd/ 指向这些数据块。

适用范围:进程必须正在运行,文件系统不能覆盖数据,需要root权限。

如果这不起作用,请使用 extundelete 或 testdisk。

注意事项:使用rm -i,创建定期备份,并使用文件系统快照。

记住:停止写作并立即继续。

如何在Linux上恢复误删除的文件或目录

粗略地说,在Linux中恢复误删除的文件时,可能有两种情况。
如果该进程存在,您将依赖文件描述符,如果该进程消失,您将不得不使用恢复工具。

我们先来说说最重要的事情。
当进程仍然存在时,恢复起来非常容易。
去年我们启动这个项目时,日志文件被意外删除,但应用程序仍在主动写入日志。
我刚刚使用了 lsof | grepremove 来查找被删除的文件。
记下输出的PID,然后cd /proc//fd 进入。
一堆(已删除的)文件是您的机会。
只需将其中之一复制到像 cp 3 /tmp/log.txt 这样的临时目录中,就可以直接使用 cat /tmp/log.txt 查看内容。
很多人不注意这一点。
应该是 cp 而不是 mv,因为 mv 将重新打开文件句柄。

还有一点是,您应该尽快检查恢复情况。
还有一个二级陷阱。
我最初以为恢复后一切都会结束,但我忘记了该文件默认由root拥有。
我只是用 chown user:user /tmp/log.txt 改了一下就可以正常使用了。

等等,还有一件事。
如果文件是目录,恢复过程完全相同,但复制命令必须改为cp -r。

如果该进程消失了,您将不得不使用 extundelete 等工具。
该操作因准备工作而变得复杂。
去年我用它来保存客户数据。
我首先停止所有写入,然后使用 Fuser -k /mount 强制删除挂载点,然后使用 extundelete 扫描它。
默认情况下,恢复的文件位于 RECOVERED_FILES 文件夹中。
但说实话,还是挺难的。
如果分区被新数据覆盖,那基本就没救了。

最后,让我提醒您一个简单的陷阱:extundelete 仅支持 ext3 /ext4 ,因此您需要寻找 XFS 等其他工具。
恢复前备份分区是一个基本操作,不要等到出现问题才后悔将会发生。