zip/gzip 这类压缩工具,有自带的冗余/错误纠正功能吗?有没有熟悉的朋友

2021-02-24 02:10:34 +08:00
 LeeReamond

如题,前几天发了一个贴问了一下数据冷存有没有什么好方法,根据贴中老哥的回复,感觉采用序列化+压缩的方案就已经很不错了,压缩率已经满足期望,而且读取上也没什么延迟,各方面都很好

唯一的问题是,冷存数据是一个比较长周期的行为,我比较担心比如因为电磁干扰之类的导致硬盘上某些字符变化,使整个文件无法解码的情况。

我知道 winrar 这类工具在创建压缩文件时候是可以设计冗余的,比如留下百分之几的冗余,出错且无法恢复的概率就比较小了。但是 winrar 无法可编程化的编码和解码,我简单搜了一下使用 python 编解码的话 zip 和 gzip 都有成型第三方库。想请问一下这些编码格式设计时带有类似的冗余功能吗?还是我必须手动实现某种备份逻辑才能有比较好的抗变动效果?

2353 次点击
所在节点    问与答
12 条回复
gyf304
2021-02-24 05:26:11 +08:00
ZIP 和 Gzip 都自带 CRC
gyf304
2021-02-24 05:27:35 +08:00
不过纠错应该都没有 这个建议物理上复制 如果冷存的话防止 bitrot 是基本没办法的
neteroster
2021-02-24 05:55:30 +08:00
可以考虑使用 Parchive
https://parchive.github.io/
LeeReamond
2021-02-24 06:59:44 +08:00
@gyf304 请问这个 CRC 应该如何理解,我理解的 CRC 都是在传输过程中发生的,比如写入硬盘的时候硬盘校验 CRC,来证明实际写入和希望写入相同。但是 zip 这个,感觉对应不上这个过程?


@neteroster 感谢,有时间研究一下,如果命令行模式能满足需求的话,popen 调用似乎成本也不高。最好是新建一个冗余文件而不修改源文件,这样完全作为外挂,不影响原有实现
gyf304
2021-02-24 07:45:42 +08:00
@LeeReamond CRC, 和 MD5 / SHA 一样就是个算法 和 MD5 / SHA 类主要的区别是 CRC 不密码学安全
CRC 可以用作传输校验也可以用作其他的校验
xiangyuecn
2021-02-24 07:54:04 +08:00
"winrar 无法可编程化的编码和解码" WinRAR 自带有一个手册,还是中文版的,我从未见过如此友好的文档👌 里面有完整的命令行调用文档。

另:你依赖一个数据本身来恢复里面包含的数据,似乎不是一个靠谱的方案,不是应该存 N 份来增大可靠性的么;

不要求跨地域存储,你用两个盘里面分别存一份,这可靠性比压缩软件自带的纠错强好多倍的吧
LeeReamond
2021-02-24 08:08:54 +08:00
@xiangyuecn 因为实际业务场景不可能那么单纯,popen 一次就完事。实际处理中你可能需要修改已有文件,这样的话先命令行解码,再编辑,再命令行编码,可靠性和维护难度显然远低于程序内部 IOstream 一把梭,所以我称之为不能可编程化。楼上提供了一个第三方冗余,因为不影响整个操作流程,只是在结尾通过命令行调用一个附加品,所以我说这个可以。显然区别很明显。

我原贴当中就说了两种方案,用户级的备份逻辑显然是后一种选择,先问冗余肯定是因为要平衡效率和成本。比如你有 100T 的文件要备份,另外搞一些硬盘,将数据变成 200T 当然是能够解决,我只是综合考量失效后成本和备份成本,感觉这样对抗电子衰变已经可以接受了。
Kagari
2021-02-24 08:40:49 +08:00
不支持增量更新,走别的路吧。不知道单机 ceph 和 minio 之类的冷存会怎么样
des
2021-02-24 08:41:08 +08:00
@LeeReamond
7z 和 zip 都没恢复记录这个东西
如果想要的话是可以单独用其他软件搞得,比如说 QuickPar
反正你都打算编码了
OliverDD
2021-02-24 09:30:41 +08:00
多个盘,整个压缩包冗余备份 doge
lff0305
2021-02-24 09:36:54 +08:00
生成压缩包以后用 par2 工具生成恢复记录,可以选生成百分之几的恢复包,以后如果压缩包损坏了但是损坏少于这个百分比,就可以重建
Tony042
2021-02-24 09:56:36 +08:00
@LeeReamond winrar 自带了 cli,你可以用 python 进行调用,我另外记得 winrar 有部分源码好像是开源的,你可以用 pybind11 包装一下 C++暴露一个 python 接口

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/755660

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX