如题,前几天发了一个贴问了一下数据冷存有没有什么好方法,根据贴中老哥的回复,感觉采用序列化+压缩的方案就已经很不错了,压缩率已经满足期望,而且读取上也没什么延迟,各方面都很好
唯一的问题是,冷存数据是一个比较长周期的行为,我比较担心比如因为电磁干扰之类的导致硬盘上某些字符变化,使整个文件无法解码的情况。
我知道 winrar 这类工具在创建压缩文件时候是可以设计冗余的,比如留下百分之几的冗余,出错且无法恢复的概率就比较小了。但是 winrar 无法可编程化的编码和解码,我简单搜了一下使用 python 编解码的话 zip 和 gzip 都有成型第三方库。想请问一下这些编码格式设计时带有类似的冗余功能吗?还是我必须手动实现某种备份逻辑才能有比较好的抗变动效果?
1
gyf304 2021-02-24 05:26:11 +08:00
ZIP 和 Gzip 都自带 CRC
|
2
gyf304 2021-02-24 05:27:35 +08:00
不过纠错应该都没有 这个建议物理上复制 如果冷存的话防止 bitrot 是基本没办法的
|
3
neteroster 2021-02-24 05:55:30 +08:00 via Android 1
可以考虑使用 Parchive
https://parchive.github.io/ |
4
LeeReamond OP @gyf304 请问这个 CRC 应该如何理解,我理解的 CRC 都是在传输过程中发生的,比如写入硬盘的时候硬盘校验 CRC,来证明实际写入和希望写入相同。但是 zip 这个,感觉对应不上这个过程?
@neteroster 感谢,有时间研究一下,如果命令行模式能满足需求的话,popen 调用似乎成本也不高。最好是新建一个冗余文件而不修改源文件,这样完全作为外挂,不影响原有实现 |
5
gyf304 2021-02-24 07:45:42 +08:00
@LeeReamond CRC, 和 MD5 / SHA 一样就是个算法 和 MD5 / SHA 类主要的区别是 CRC 不密码学安全
CRC 可以用作传输校验也可以用作其他的校验 |
6
xiangyuecn 2021-02-24 07:54:04 +08:00
"winrar 无法可编程化的编码和解码" WinRAR 自带有一个手册,还是中文版的,我从未见过如此友好的文档👌 里面有完整的命令行调用文档。
另:你依赖一个数据本身来恢复里面包含的数据,似乎不是一个靠谱的方案,不是应该存 N 份来增大可靠性的么; 不要求跨地域存储,你用两个盘里面分别存一份,这可靠性比压缩软件自带的纠错强好多倍的吧 |
7
LeeReamond OP @xiangyuecn 因为实际业务场景不可能那么单纯,popen 一次就完事。实际处理中你可能需要修改已有文件,这样的话先命令行解码,再编辑,再命令行编码,可靠性和维护难度显然远低于程序内部 IOstream 一把梭,所以我称之为不能可编程化。楼上提供了一个第三方冗余,因为不影响整个操作流程,只是在结尾通过命令行调用一个附加品,所以我说这个可以。显然区别很明显。
我原贴当中就说了两种方案,用户级的备份逻辑显然是后一种选择,先问冗余肯定是因为要平衡效率和成本。比如你有 100T 的文件要备份,另外搞一些硬盘,将数据变成 200T 当然是能够解决,我只是综合考量失效后成本和备份成本,感觉这样对抗电子衰变已经可以接受了。 |
8
Kagari 2021-02-24 08:40:49 +08:00 via Android
不支持增量更新,走别的路吧。不知道单机 ceph 和 minio 之类的冷存会怎么样
|
9
des 2021-02-24 08:41:08 +08:00 via iPhone
|
10
OliverDD 2021-02-24 09:30:41 +08:00
多个盘,整个压缩包冗余备份 doge
|
11
lff0305 2021-02-24 09:36:54 +08:00
生成压缩包以后用 par2 工具生成恢复记录,可以选生成百分之几的恢复包,以后如果压缩包损坏了但是损坏少于这个百分比,就可以重建
|
12
Tony042 2021-02-24 09:56:36 +08:00 1
@LeeReamond winrar 自带了 cli,你可以用 python 进行调用,我另外记得 winrar 有部分源码好像是开源的,你可以用 pybind11 包装一下 C++暴露一个 python 接口
|