如果进程仍在使用文件,则恢复文件

如果进程仍在使用文件,则恢复文件

我遇到了一个问题,我不小心删除了conf文件的内容。我正在尝试使用我在网上看到的 cp 和 tail 恢复过程,但它似乎不起作用。该文件仍在内存中:

# ps aux | grep 'process'
root     30495  0.0  0.0  23660   728 ?        S     2015   0:17 /usr/local/sbin/file -C /etc/dir/file.cfg

/proc/pid 的内容如下:

ls -l /proc/30495/fd/0
lrwx------. 1 root root 64 Mar  7 11:35 /proc/30495/fd/0 -> socket:[1278416]

CP恢复方法:

cp /proc/30495/fd/0 recovered.cfg
cp: cannot open `/proc/30495/fd/0' for reading: No such device or address

尾部恢复:

tail -c +0 -f /proc/30495/fd/0 recovered.cfg
tail: cannot open `/proc/30495/fd/0' for reading: No such device or   address
tail: cannot open `recovered.cfg' for reading: No such file or directory

我还能做些什么来从 RAM 中取出该文件的内容吗?

答案1

正确的解决方案是从上次备份中恢复文件。

仅当进程当前打开文件时,复制才有效。它无法对进程在过去某个时刻打开但现在不再打开的文件执行任何操作。程序不需要保持其配置文件打开:一旦读取其配置,它就会关闭该文件。这样你就无法恢复任何东西。您尝试恢复的文件是不相关的文件;它是进程正在侦听的网络套接字,您无法从这样的套接字读取数据,但这对您没有任何好处。/proc/PID/fd/

gcore 30495 正如马克·普洛特尼克所建议的会将进程的内存映像转储到文件中core.30495。您可以尝试筛选该内存映像,但不要抱有太大希望:该进程很可能已解析配置文件并重用其存储文件的任何内存以用于其他目的。甚至有可能整个配置文件从来没有完全在内存中,只是一块一块地覆盖前一个。

你可以试试已删除文件恢复工具。如果你想尝试一下的话立即停止写入该文件系统:您所做的每一次写入都会减少恢复任何内容的机会。但再次不要抱太大希望:查找文本文件就像大海捞针一样。如果您发现某些内容,请注意它可能是旧版本,而且通常无法辨别。

为了将来,请记住进行备份。并将您的配置文件置于版本控制之下(并备份存储库)。

相关内容