我有一个程序接收一个文件,使用/usr/bin/zip
或/bin/gzip
或/bin/bzip2
对其进行压缩,并且当且仅当压缩操作成功完成时才删除原始文件。
然而,这个程序可以被杀死(通过kill -9
),或者原则上甚至可以自行崩溃!
问题:我可以假设在磁盘上创建的压缩输出文件始终有效,无需解压缩并将其与原始文件进行比较吗?
换句话说,无论压缩操作被非正常地中断点,是否压缩输出文件存在于磁盘上意味着它是有效的?
换句话说,压缩操作和磁盘上的文件创建是一起原子事务吗?
如果压缩文件无效,则主要关注的是不删除原始文件,而是不必进行昂贵的解压缩和比较操作。
注意:
忽略由于UPS故障而未刷新到磁盘的OS文件缓冲区。
忽略与磁盘/媒体相关的故障。无论如何,这可能会发生得太晚,并且完全独立于程序的中断。
答案 0 :(得分:1)
一个。是的,如果zip,gzip或bzip2成功完成,您可以假设生成的压缩文件很有可能有效。这些程序已经存在了很长时间,我认为很久以前几乎所有的数据完整性错误都是由它们完成的。您还需要考虑硬件在其操作环境中的可靠性。
B中。 (你的"换句话说"看起来完全不同的问题。)否。非正常中断的压缩操作通常会留下部分无效的压缩文件。
℃。不会。文件已创建,然后一次写入块。那些行动肯定不是原子的。
您只需验证压缩实用程序是否已成功完成,因为它正常退出并返回零作为退出代码。然后你不需要检查压缩文件,除非你是超级偏执,也许是因为数据对你有很高的价值。
我应该注意,验证压缩数据所需的时间只需压缩它的一小部分,至少对于zip和gzip来说。 bzip2将花费与压缩时间相同的时间。