恢复仍由活动进程加载的已删除文件夹

恢复仍由活动进程加载的已删除文件夹

如果这个问题之前被问过,我真的很抱歉。我真的需要这方面的帮助,因为它涉及非常重要的数据,而我在过去的两个小时内一直无法做到这一点。

本质上,由于运行 rm -r 时的拼写错误,我不小心删除了错误的文件夹。据我所知,这些文件仍然存在,但链接已被删除。由于使用这些文件的进程仍在运行,看起来它们现在仍然可以访问,直到进程结束(那么它们应该永远丢失)。在过去的两个小时左右的时间里,我一直在尝试将进程中的数据写入文件夹以恢复文件。但只能找到如何对单个文件执行此操作。

运行时的输出lsof | grep ./仍然显示所有文件和大小。让我相信仍然有可能恢复它。该进程本身似乎也能够很好地访问这些文件,因为即使链接消失,程序仍然可以正常工作。

我尝试了您使用的方法cp /proc/32184/fd/103 ./resoration,但这似乎只能恢复单个文件。有没有一种方法可以快速恢复所有文件,而不必关闭服务器并冒丢失文件的风险?

我已经对一些数据进行了一些手动备份,但大小太大,无法备份所有数据。

非常感谢能够帮助我解决这个问题的人,如果之前有人问过这个问题,再次表示歉意。

答案1

您可以尝试自己编写脚本:

PID=..your process..
export RESTORE_TO_DIR=some_place
find "/proc/$PID/fd" -lname '* (deleted)' -printf '%p %l\0' |
xargs -0 sh -c '
   for l; do
      f=${l%% *}; t="$RESTORE_TO_DIR${l#* }"
      echo mkdir -p "${t%/*}" && echo cp -vb "$f" "${t% (deleted)}"
   done
' sh

删除echo之前的 s mkdircp如果看起来没问题。如果设置RESTORE_TO_DIR为空字符串,则应该将删除的文件恢复到原来的位置。


与某些观点相反,您不能创建指向已删除文件的硬链接(未从任何目录引用的索引节点)。

相关内容