一位朋友正在和我谈论位腐烂的问题 - 驱动器上的位随机翻转,破坏数据。非常罕见,但如果有足够的时间,它可能会成为一个问题,而且无法检测到。
驱动器不会认为它是坏扇区,备份只会认为文件已更改。验证完整性不涉及校验和。即使在 RAID 设置中,也会检测到差异,但无法知道哪个镜像副本是正确的。
这是一个真正的问题吗?如果是这样,可以做些什么呢?我的朋友推荐 zfs 作为解决方案,但我无法想象在工作中扁平化我们的文件服务器,安装 Solaris 和 zfs..
一位朋友正在和我谈论位腐烂的问题 - 驱动器上的位随机翻转,破坏数据。非常罕见,但如果有足够的时间,它可能会成为一个问题,而且无法检测到。
驱动器不会认为它是坏扇区,备份只会认为文件已更改。验证完整性不涉及校验和。即使在 RAID 设置中,也会检测到差异,但无法知道哪个镜像副本是正确的。
这是一个真正的问题吗?如果是这样,可以做些什么呢?我的朋友推荐 zfs 作为解决方案,但我无法想象在工作中扁平化我们的文件服务器,安装 Solaris 和 zfs..
首先:您的文件系统可能没有校验和,但您的硬盘驱动器本身有它们。例如,SMART。当然,一旦翻转了太多位,错误就无法纠正。如果你真的很不走运,位可能会以这样一种方式发生变化,以至于校验和不会变得无效;那么甚至不会检测到错误。因此,可能会发生令人讨厌的事情;但是声称随机位翻转会立即破坏您的数据是虚假的。
但是,是的,当您将数万亿位放入硬盘驱动器时,它们不会永远保持这种状态。这是一个真正的问题!ZFS 可以在每次读取数据时进行完整性检查;这类似于您的硬盘驱动器本身已经做的事情,但它是您牺牲一些空间的另一种保护措施,因此您正在提高对数据损坏的恢复能力。
当您的文件系统足够好时,发生错误但未被检测到的可能性会变得非常低,以至于您不必再关心它,您可能会决定将校验和内置到您正在使用的数据存储格式中不必要。
无论哪种方式:不,并非不可能检测到.
但是文件系统本身并不能保证每次故障都可以恢复。这不是灵丹妙药。您仍然必须有备份和计划/算法,以便在检测到错误时做什么。
是的,这是一个问题,主要是随着驱动器大小的增加。大多数 SATA 驱动器的 URE(不可纠正读取错误)率为 10^14。或者对于每 12TB 的数据读取统计数据,驱动器供应商表示驱动器将返回读取失败(您通常可以在驱动器规格表上查找它们)。对于驱动器的所有其他部分,驱动器将继续正常工作。企业 FC 和 SCSI 驱动器通常具有 10^15 (120TB) 的 URE 速率以及少量的 SATA 驱动器,这有助于降低它。
我从未见过磁盘在同一时间停止旋转,但我有一个 raid5 卷遇到了这个问题(5 年前使用 5400RPM 消费者 PATA 驱动器)。驱动器出现故障,它被标记为死机,并且备用驱动器发生重建。问题是在重建过程中,第二个驱动器无法读取那一小块数据。根据谁在进行突袭,整个卷可能已经死了,或者只是那个小块可能已经死了。假设只有一个块死了,如果你尝试读取它,你会得到一个错误,但如果你写入它,驱动器会将它重新映射到另一个位置。
有多种方法可以防止:raid6(或等效的)可以防止双磁盘故障是最好的,其他的是 URE 感知文件系统,例如 ZFS,使用较小的 raid 组,因此从统计上讲,您击中 URE 驱动器的机会较低限制(镜像大驱动器或 raid5 较小驱动器),磁盘清理和 SMART 也有帮助,但它本身并不是真正的保护,而是在上述方法之一之外使用。
我在阵列中管理着近 3000 个主轴,并且阵列不断擦洗驱动器以寻找潜在的 URE。如果我使用的是 raid5 而不是 raid6 并且其中一个驱动器完全死机了,我会收到相当稳定的数据流(每次找到它都会在驱动器故障之前修复它并提醒我)......我会如果它击中某些位置,就会遇到麻烦。
硬盘驱动器通常不会将数据位编码为单个磁域——硬盘驱动器制造商一直都知道磁域可以翻转,并在驱动器中内置错误检测和纠正功能。
如果有一点翻转,则驱动器包含足够的冗余数据,它可以并且将在下次读取该扇区时更正。如果您检查驱动器上的 SMART 统计信息,您可以看到这一点,即“可纠正错误率”。
根据驱动器的详细信息,它甚至应该能够从扇区中的多个翻转位中恢复。可以静默纠正的翻转位的数量会有限制,并且可能会被检测为错误的翻转位的数量有另一个限制(即使不再有足够的可靠数据来纠正它)
这一切都表明硬盘驱动器可以在大多数错误发生时自动纠正它们,并且可以可靠地检测到其余大部分错误。您必须在单个扇区中有大量位错误,所有这些都发生在再次读取该扇区之前,并且错误必须使内部错误检测代码在您之前再次将其视为有效数据永远不会有无声的失败。这并非不可能,而且我确信运营超大型数据中心的公司确实看到了它的发生(或者更确切地说,它发生了但他们没有看到它发生),但这肯定没有你想象的那么大。
现代硬盘驱动器(自 199x 以来)不仅具有校验和,还具有 ECC,它可以检测和纠正相当多的“随机”位腐烂。请参阅:http ://en.wikipedia.org/wiki/SMART 。
另一方面,固件和设备驱动程序中的某些错误也会在极少数情况下损坏数据(否则 QA 会发现错误),如果您没有更高级别的校验和,则很难检测到这些错误。SATA 和 NIC 的早期设备驱动程序在 Linux 和 Solaris 上都损坏了数据。
ZFS 校验和主要针对较低级别软件中的错误。像 Hypertable 这样较新的存储/数据库系统也有每次更新的校验和,以防止文件系统中的错误 :)
从理论上讲,这是值得关注的。实际上,这是我们保留子/父/祖父母备份的部分原因。年度备份需要至少保存 5 年,IMO,如果你有这样的案例可以追溯到更远的地方,那么该文件显然不是那么重要。
除非您正在处理可能会液化某人大脑的位,否则我不确定风险与回报是否完全取决于更改文件系统。
是的,这是一个问题。
这是 RAID6 现在流行的原因之一(以及增加 HD 大小会增加重建阵列的时间)。拥有两个奇偶校验块允许额外的备份。
RAID 系统现在还执行 RAID Scrubbing,定期读取磁盘块,检查奇偶校验,并在发现块损坏时替换它。
关于 OP 关于 RAID 的声明,不了解哪些数据是好数据还是坏数据。
RAID 控制器在每个数据条带上至少使用(奇/偶)奇偶校验位。这适用于一切;磁盘数据条和奇偶校验(备份)数据条。
这意味着对于具有冗余条带化 (RAID 5/6) 的任何 RAID 类型,控制器可以准确判断原始数据条带是否已更改,以及冗余数据条带是否已更改。
如果您引入第二个冗余条带(如 RAID6),则必须有 3 个数据条带,在三个不同的驱动器上损坏,它们都对应于相同的实际文件数据。请记住,大多数 RAID 系统使用相对较小的数据条带(128kb 或更少),因此同一文件的“位腐烂”排队到相同 128kb 的机会实际上是不可能的。
是的,bitrot 是个问题。
我写了一个工具
chkbit
来帮助检测 bitrot:这是一个现实世界的问题,是的,但问题是你是否应该担心它。
如果你只有一个充满图片的硬盘,那可能不值得付出努力。它充满了重要的科学数据,它可能是另一种故事,你明白了。