V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LeeReamond
V2EX  ›  问与答

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

  •  
  •   LeeReamond · 2021-02-24 02:10:34 +08:00 · 2133 次点击
    这是一个创建于 1151 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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


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

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

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

    我原贴当中就说了两种方案,用户级的备份逻辑显然是后一种选择,先问冗余肯定是因为要平衡效率和成本。比如你有 100T 的文件要备份,另外搞一些硬盘,将数据变成 200T 当然是能够解决,我只是综合考量失效后成本和备份成本,感觉这样对抗电子衰变已经可以接受了。
    Kagari
        8
    Kagari  
       2021-02-24 08:40:49 +08:00 via Android
    不支持增量更新,走别的路吧。不知道单机 ceph 和 minio 之类的冷存会怎么样
    des
        9
    des  
       2021-02-24 08:41:08 +08:00 via iPhone
    @LeeReamond
    7z 和 zip 都没恢复记录这个东西
    如果想要的话是可以单独用其他软件搞得,比如说 QuickPar
    反正你都打算编码了
    OliverDD
        10
    OliverDD  
       2021-02-24 09:30:41 +08:00
    多个盘,整个压缩包冗余备份 doge
    lff0305
        11
    lff0305  
       2021-02-24 09:36:54 +08:00
    生成压缩包以后用 par2 工具生成恢复记录,可以选生成百分之几的恢复包,以后如果压缩包损坏了但是损坏少于这个百分比,就可以重建
    Tony042
        12
    Tony042  
       2021-02-24 09:56:36 +08:00   ❤️ 1
    @LeeReamond winrar 自带了 cli,你可以用 python 进行调用,我另外记得 winrar 有部分源码好像是开源的,你可以用 pybind11 包装一下 C++暴露一个 python 接口
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   887 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 525ms · UTC 21:30 · PVG 05:30 · LAX 14:30 · JFK 17:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.