恢复写入已移动文件的数据

恢复写入已移动文件的数据

我有一个在 CentOS 上运行的 Python 守护进程,它在会话开始时打开一个文件,并不断写入该文件。

然而,一个 cronjob 对正在写入的文件进行了 gzip 压缩,因此该文件从 log.txt 移动到 log.txt.gz。然而,守护进程继续写入 log.txt。然后守护程序已停止并关闭 log.txt 的文件描述符。

文件移动到 log.txt.gz 后,有什么方法可以恢复守护进程写入 log.txt 的数据吗?

答案1

AFAICT,没有。问题是该gzip过程将创建一个新文件并释放前一个(解压缩的)文件,包括从目录中删除。如果文件系统中没有其他硬链接指向该文件,那么一旦引用该文件的最后一个文件描述符被关闭,该文件就会丢失。

将来,建议您同步对该文件资源的访问,而不是让两个进程同时访问该文件(用于写入和删除)。

另一种选择是创建gzip压缩副本。但是这样你就会遇到竞争条件,即并非文件中的所有写入内容都可能进入文件gz

相关内容