如果这个问题之前被问过,我真的很抱歉。我真的需要这方面的帮助,因为它涉及非常重要的数据,而我在过去的两个小时内一直无法做到这一点。
本质上,由于运行 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 mkdir
,cp
如果看起来没问题。如果设置RESTORE_TO_DIR
为空字符串,则应该将删除的文件恢复到原来的位置。
与某些观点相反,您不能创建指向已删除文件的硬链接(未从任何目录引用的索引节点)。