sco*_*obi 34 raid zfs hard-drive
一位朋友正在和我谈论位腐烂的问题 - 驱动器上的位随机翻转,破坏数据。非常罕见,但如果有足够的时间,它可能会成为一个问题,并且不可能被发现。
驱动器不会认为它是坏扇区,备份只会认为文件已更改。不涉及校验和来验证完整性。即使在 RAID 设置中,也会检测到差异,但无法知道哪个镜像副本是正确的。
这是一个真正的问题吗?如果是这样,可以做些什么呢?我的朋友推荐 zfs 作为解决方案,但我无法想象在工作中扁平化我们的文件服务器,安装 Solaris 和 zfs ..
小智 26
首先:您的文件系统可能没有校验和,但您的硬盘驱动器本身有它们。例如,有 SMART。当然,一旦翻转了太多,错误就无法纠正。如果你真的很不走运,比特可以以校验和不会失效的方式改变;那么错误甚至不会被检测到。因此,可能会发生令人讨厌的事情;但声称随机位翻转会立即破坏您的数据是虚假的。
然而,是的,当你在硬盘上放置数万亿位数据时,它们不会永远保持这样;这是一个真正的问题!ZFS 可以在每次读取数据时进行完整性检查;这类似于您的硬盘驱动器本身已经完成的操作,但它是另一种保护措施,您为此牺牲了一些空间,因此您可以提高抵御数据损坏的能力。
当您的文件系统足够好时,发生错误而未被检测到的概率会变得如此之低,以至于您不必再关心它,并且您可能会决定将校验和内置到您正在使用的数据存储格式中不必要。
无论哪种方式:不,并非不可能检测到。
但是文件系统本身永远不能保证每次故障都可以恢复;这不是灵丹妙药。当检测到错误时,您仍然必须有备份和计划/算法。
小智 16
是的,这是一个问题,主要是因为驱动器大小增加。大多数 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)也为每次更新提供校验和,以防止文件系统中的错误 :)
| 归档时间: |
|
| 查看次数: |
30907 次 |
| 最近记录: |