管理数据持久性/文件损坏

管理数据持久性/文件损坏

我们知道硬盘的使用寿命有限,数据损坏的情况时有发生。硬盘可能看起来仍然正常并且通过了测试,但由于介质物理/损坏,某些文件的读取可能会在某些时候开始与原始文件不同。

数据备份/镜像解决了整个磁盘故障的问题,但不能解决沉默的数据损坏。此外,如果源/主磁盘的某些文件损坏,则备份磁盘上的正确版本将在下次备份时被覆盖,从而实质上传播了错误并使原始文件无法恢复。

2017 年,有哪些技术/解决方案可以解决这个问题在场(而不是将数据档案以 99.999...% 的耐用性上传到云端)?

我听说过一种软件,它基本上可以跟踪文件的校验和并检测它们何时发生变化,但我想知道是否有更低级(例如文件系统级)的解决方案?例如,每次写入/更新文件/块时计算文件校验和的文件系统,并支持校验和验证以检测损坏的文件,以便在错误传播到备份媒体之前采取措施?

最后,也许存在某种我不知道的完全不同的解决问题的方法?

答案1

ZFS 基本上就是为此而设计的。它会对每个数据块进行校验,如果损坏,则从“虚拟 RAID”的其他部分进行恢复(ZFS 更愿意做自己的 RAID 等效物,而不是使用硬件 RAID)。

ZFS 的功能之一是定期进行清理,即检查磁盘是否有错误的过程。

ZFS 既是块级别的解决方案,又是文件系统级别的解决方案(它与 RAID 类型解决方案中的块设备上的文件系统是不同的范例)。

我还注意到,大多数 RAID 系统也允许在块级别进行定期验证,但这种验证不够可靠,而且可能会用坏数据覆盖好数据。有关此雷区(ZFS 可绕过)的更多研究,请谷歌搜索“Write Hole”

答案2

这似乎是一种迂回的管理方式,但我发现最好的(用最少的资源实现最高效率) 管理数据以防止“持久性和数据损坏”的方法是既要有正确管理的磁盘阵列,又要有适当的备份和版本控制方案。

ZFS 和 BTRFS 阵列/文件系统组合使用的校验和可以主动发现数据损坏,但它不一定能给出如何处理它的“答案”,而且您可能仍然需要对该特定数据集进行备份。其他阵列上的 AND Scrubs 也可以发现数据损坏,以确保您的阵列能够重建。此外,电池备份和 Write-Intent-Bitmaps 可以处理写入漏洞问题。总体而言,如果正确实施,现代存储系统非常强大,可以处理您实际遇到的问题。

如果数据损坏是一个大问题,而校验和阵列/文件系统组合是答案,那么所有大型企业公司都只会使用和校验和阵列/文件系统组合,而事实并非如此。相反,他们拥有强大的基础设施,包括冗余 SAN 和交换机、电池备份、发电机、电源调节器、久经考验的文件系统、管理良好的阵列以及备份、备份、备份!

事实上,少量数据损坏确实会造成真正的问题,这种情况极为罕见;而且这种情况很少发生,我个人认为最好依靠适当的系统管理来缓解它,而不是积极尝试管理数据损坏本身。我知道在过去的 20 年里,我有几个文件,通常是媒体文件,随机无法使用,我认为这是数据损坏。但我从来没有遇到过真正需要的文件无法使用的情况,如果是这样,我会去备份那个文件,如果那不起作用,我的生活还会继续!

此外,我想不出有哪一份文件会毁掉我的个人生活或事业;没有一份。客户不满意?诉讼中缺少信息(我诚实,只需要证明这一点)?个人记忆受损?这些都是我宁愿避免的事情,但所有这些事情只值得我花费有限的时间和金钱去缓解,因为这些事情实际上因数据损坏而发生的几率接近于 0……永远。

重点是,我认为对于较小的设置,“管理数据持久性/文件损坏”最好的方法是:

  • 按照适合你的情况的方式运行你的阵列
  • 定期清理,以确保在发生驱动器故障时能够正确重建
  • 使用电池供电的硬件控制器或写入意图位图作为软件阵列
  • 如果可能的话,使用非奇偶校验阵列,以避免在 URE 或 Scrub 之间发生其他情况时重建失败
  • 最重要的是, 建立适当的备份和版本控制方案。

本质上正确的系统管理可以解决数据损坏问题。

相关内容