压缩中断时磁盘上压缩文件的完整性
On-disk zipped file integrity when zipping interrupted
我有一个程序可以获取一个文件,使用 /usr/bin/zip
或 /bin/gzip
或 /bin/bzip2
压缩它,当且仅当压缩操作成功完成时才删除原始文件。
但是,这个程序可以被终止(通过 kill -9
),或者原则上什至可以自行崩溃!
问题:我可以假设在磁盘上创建的压缩输出文件始终有效,而无需解压缩它并与原始文件进行比较吗?
换句话说,无论压缩操作在什么时候被不正常地中断,压缩输出文件存在于磁盘上这一事实是否意味着它是有效的?
换句话说,压缩操作和磁盘上的文件创建一起是一个原子事务吗?
这里主要关心的是如果压缩文件无效,不是删除原始文件,而是不必进行昂贵的解压缩和比较操作。
注:
忽略 OS 由于 UPS 故障而未刷新到磁盘的文件缓冲区。
忽略 disk/media 相关故障。无论如何,这可能会在很久以后发生,并且完全独立于程序的中断。
一个。是的,如果 zip、gzip 或 bzip2 成功完成,您可以假设生成的压缩文件很有可能是有效的。这些程序已经存在很长时间了,我敢断言,几乎所有的数据完整性错误都在很久以前就被解决了。您还需要考虑硬件在其运行环境中的可靠性。
乙。 (您的 "in other words" 似乎是完全不同的问题。)不。不正常地中断压缩操作通常会留下部分无效的压缩文件。
C。不。文件被创建,然后一次写入一个块。这些操作肯定不是原子的。
您只需要通过正常退出并返回零作为退出代码来验证压缩实用程序是否成功完成。然后你不需要检查压缩文件,除非你是超级偏执狂,也许是因为数据对你有很高的价值。
我应该注意到,验证压缩数据所花费的时间只是压缩数据所花时间的一小部分,至少对于 zip 和 gzip 是这样。 bzip2 将花费与压缩相同的时间。
我有一个程序可以获取一个文件,使用 /usr/bin/zip
或 /bin/gzip
或 /bin/bzip2
压缩它,当且仅当压缩操作成功完成时才删除原始文件。
但是,这个程序可以被终止(通过 kill -9
),或者原则上什至可以自行崩溃!
问题:我可以假设在磁盘上创建的压缩输出文件始终有效,而无需解压缩它并与原始文件进行比较吗?
换句话说,无论压缩操作在什么时候被不正常地中断,压缩输出文件存在于磁盘上这一事实是否意味着它是有效的?
换句话说,压缩操作和磁盘上的文件创建一起是一个原子事务吗?
这里主要关心的是如果压缩文件无效,不是删除原始文件,而是不必进行昂贵的解压缩和比较操作。
注:
忽略 OS 由于 UPS 故障而未刷新到磁盘的文件缓冲区。
忽略 disk/media 相关故障。无论如何,这可能会在很久以后发生,并且完全独立于程序的中断。
一个。是的,如果 zip、gzip 或 bzip2 成功完成,您可以假设生成的压缩文件很有可能是有效的。这些程序已经存在很长时间了,我敢断言,几乎所有的数据完整性错误都在很久以前就被解决了。您还需要考虑硬件在其运行环境中的可靠性。
乙。 (您的 "in other words" 似乎是完全不同的问题。)不。不正常地中断压缩操作通常会留下部分无效的压缩文件。
C。不。文件被创建,然后一次写入一个块。这些操作肯定不是原子的。
您只需要通过正常退出并返回零作为退出代码来验证压缩实用程序是否成功完成。然后你不需要检查压缩文件,除非你是超级偏执狂,也许是因为数据对你有很高的价值。
我应该注意到,验证压缩数据所花费的时间只是压缩数据所花时间的一小部分,至少对于 zip 和 gzip 是这样。 bzip2 将花费与压缩相同的时间。