我有几个目录包含数千个 gzip 文件(总共约 1M 个文件)。其中一些文件已损坏,大多数文件大小非常小(只有几 KB)。
它们的内容几乎都非常相似,因此将它们全部压缩在一起应该可以提高相对于当前情况的压缩率。
由于我很少浏览这些目录,只是出于存档原因需要保留它们,因此我需要一种高可用性和高压缩率的格式并创建一个存档。最好具有随机访问功能,以便偶尔访问特定文件而无需解压整个存档。
这里最好的策略是什么? tar 能抵御损坏吗? 我更喜欢可以作为一行或简单的 bash 脚本实现的东西。
答案1
研究完这个问题后,我解决这个问题的方法是解压所有文件,创建所有 sha256 总和的列表(或您喜欢的任何哈希值),然后将所有文件一起压缩成一个存档。我倾向于使用 tar.gz 文件以提高速度和易用性,但如果您想要一个较小的存档,您可以使用 zip、bzip、7zip、xz 或其他东西。将所有文件压缩成一个大文件本身就可以节省相当多的空间。
完成后,使用“par2”为压缩文件创建冗余和验证,并将文件与 .par2 文件一起备份。(我没有玩过很多,但 par2 的目的是创建一个创建冗余(PARity)的档案,以增强文件的完整性。
答案2
不幸的是,这样的问题没有明确的答案。不同的压缩程序和算法会根据数据有不同的压缩率。如果有办法知道压缩效果会有多好?如果有的话,你不觉得所有压缩程序都会内置此功能吗?
你说有数千个 1MB 的文件,相当于几 GB。假设你有 5000 个文件,也就是 5GB 的数据。假设使用超大压缩会将数据压缩到 2GB。如果你尝试另一个程序和算法,压缩率会提高 5%(我认为这是一个高估值),但只能为你节省 100GB。从总体上看,节省不了多少。
至于对损坏的恢复能力,没有这种东西。一个压缩程序可能比另一个程序更好地处理损坏,例如 CRC 校验失败。充其量,这可能意味着只有部分数据丢失,而不是全部。然而,再说一遍,真的没有办法知道。简而言之,没有什么可以替代重要数据的备份。