在压缩中断时,磁盘上的压缩文件完整性

时间:2018-05-31 04:17:35

标签: zip gzip kill disk bzip2

我有一个程序接收一个文件,使用/usr/bin/zip/bin/gzip/bin/bzip2对其进行压缩,并且当且仅当压缩操作成功完成时才删除原始文件。

然而,这个程序可以被杀死(通过kill -9),或者原则上甚至可以自行崩溃!

问题:我可以假设在磁盘上创建的压缩输出文件始终有效,无需解压缩并将其与原始文件进行比较吗?

换句话说,无论压缩操作被非正常地中断点,是否压缩输出文件存在于磁盘上意味着它是有效的?

换句话说,压缩操作和磁盘上的文件创建是一起原子事务吗?

如果压缩文件无效,则主要关注的是不删除原始文件,而是不必进行昂贵的解压缩和比较操作。

注意:

  1. 忽略由于UPS故障而未刷新到磁盘的OS文件缓冲区。

  2. 忽略与磁盘/媒体相关的故障。无论如何,这可能会发生得太晚,并且完全独立于程序的中断。

1 个答案:

答案 0 :(得分:1)

一个。是的,如果zip,gzip或bzip2成功完成,您可以假设生成的压缩文件很有可能有效。这些程序已经存在了很长时间,我认为很久以前几乎所有的数据完整性错误都是由它们完成的。您还需要考虑硬件在其操作环境中的可靠性。

B中。 (你的"换句话说"看起来完全不同的问题。)否。非正常中断的压缩操作通常会留下部分无效的压缩文件。

℃。不会。文件已创建,然后一次写入块。那些行动肯定不是原子的。

您只需验证压缩实用程序是否已成功完成,因为它正常退出并返回零作为退出代码。然后你不需要检查压缩文件,除非你是超级偏执,也许是因为数据对你有很高的价值。

我应该注意,验证压缩数据所需的时间只需压缩它的一小部分,至少对于zip和gzip来说。 bzip2将花费与压缩时间相同的时间。