保护数据免遭位腐烂

保护数据免遭位腐烂

我意识到我需要保护我的所有照片免受位损坏(由于硬盘驱动器或网络传输错误而随机发生的文件损坏)。

我最近发现 par2 似乎是一个很棒的程序,可以创建冗余文件并提供检测和修复文件损坏的能力。

我不认为日志文件系统是正确的解决方案,因为我希望在将文件迁移到新笔记本电脑时将保护与文件一起保存到我的备份中。

所以,我认为我需要的是一个可以作为 cronjob 运行的脚本,也许每小时一次。如果添加或更改了文件(文件的编辑时间戳比冗余存档更新),它将查看所​​有需要保护的文件并更新冗余文件,如果任何文件已损坏(文件已更改但编辑),它将修复文件时间戳尚未更新)。

有没有任何脚本或程序可以做到这一点?或者是否有程序可以以另一种方式解决问题?或者我应该自己编写这样一个脚本(我不想这样做,我想要一些健壮的东西并经过很多用户的测试)?

答案1

规范的解决方案是使用支持校验和的文件系统并进行定期备份。

除此之外,如果可能的话,您还可以在文件系统层使用冗余存储方案 (RAID),以避免耗时的备份恢复。

此类文件系统的示例是ZFS或者Btrfs

此类文件系统的校验和功能是使用加密哈希函数实现的。因此,存储堆栈下游的位错误被检测到的概率非常高,因为它们检测损坏的能力与par2.

这些文件系统还包括冗余存储功能 - 类似于 RAID 级别。与经典分层 RAID 方法的区别在于,在检测到损坏的情况下,文件系统能够选择“正确”的部分,即返回具有正确校验和的块的 RAID 镜像的一侧。

答案2

这是一个较老的问题,但在 2019 年仍然相关。

是的,奇偶校验文件是位腐烂的可行解决方案

虽然非文件系统级奇偶校验检查有缺点,但也有一个巨大的好处:

可移植性。

理论上,世界上最奇特的基于文件系统的错误检查可以使您的数据永远保持无位腐烂,但保护被锁定到该文件系统。文件一旦离开,它们就不受保护。

“太沉重”经过布拉普斯已获得许可CC BY-NC 2.0 (在放入数据之前,他真的应该切换到 ZFS 和屋顶)

旁边带有奇偶校验文件的图像可以移动到 USB 驱动器、通过包丢失连接传输、压缩、单独备份到其他媒体,以及我能想到的一百种其他东西。

它们还可以防止基于不良程序的更改(例如,元数据分析器意外写入不正确的元数据)

PAR2 是奇偶校验文件的可行选择

PAR2 文件特别可以跨平台使用,它们最大的缺点实际上并不是保护大照片的用例中的问题(即 PAR2 不支持子文件夹,并且不能有效地处理 <1KB 文件)。

然而,PAR 文件本身并不是一个完整的备份解决方案

它们仍然需要成为 3 副本备份策略的一部分才能“防弹”,特别是对于 PAR 文件来说,没有更改历史记录:如果检测到更改有效,并且重新创建了奇偶校验文件,则在不引用单独的备份(具有内置更改历史记录的异地备份解决方案将是这里的赢家)。

下一步

最初问题“是否有任何脚本或程序可以[自动创建和维护奇偶校验文件]?”的答案2019 年仍然是“否”,但自己制作一个脚本或让别人制作一个脚本是相当简单的。如果您走这条路,我能给的最好建议是:创建一个包含您能想到的每种边缘情况的测试环境,并在信任它之前通过所有测试运行任何脚本。

而且,如果有人读到这篇文章走这条路,考虑将其开源,以造福所有人。

编辑后的附录: PAR 文件使用的技术是https://en.wikipedia.org/wiki/Reed–Solomon_error_ Correction尽管 PAR 开发已陷入停滞,但仍有数十个甚至数百个项目使用 Reed-Solomon 进行文件级数据完整性/修复。

答案3

我写了一个轻量级工具来检测 bitrot,称为chkbit

它创建一个独立于文件系统的跟随数据的哈希值。因此,chkbit您可以验证主系统、备份介质上以及恢复后数据的完整性。

chkbit 不允许您修复数据,您仍然需要一个或多个备份。

相关内容