一位朋友正在与我谈论比特腐烂的问题-驱动器上的比特随机翻转,破坏数据。极为罕见,但有足够的时间可能会成为问题,并且无法检测到。
该驱动器不会认为它是坏扇区,而备份只会认为该文件已更改。没有验证完整性的校验和。即使在RAID设置中,也会检测到差异,但无法知道哪个镜像副本正确。
这是一个真正的问题吗?如果是这样,该怎么办?我的朋友推荐使用zfs作为解决方案,但是我无法想象将工作中的文件服务器弄平,使用Solaris和zfs。
一位朋友正在与我谈论比特腐烂的问题-驱动器上的比特随机翻转,破坏数据。极为罕见,但有足够的时间可能会成为问题,并且无法检测到。
该驱动器不会认为它是坏扇区,而备份只会认为该文件已更改。没有验证完整性的校验和。即使在RAID设置中,也会检测到差异,但无法知道哪个镜像副本正确。
这是一个真正的问题吗?如果是这样,该怎么办?我的朋友推荐使用zfs作为解决方案,但是我无法想象将工作中的文件服务器弄平,使用Solaris和zfs。
Answers:
首先,您的文件系统可能没有校验和,但硬盘驱动器本身就有校验和。例如,有SMART。当然,一旦翻转太多,错误就无法纠正。而且,如果您真的不走运,则位的更改方式可以使校验和不会变得无效。那么该错误甚至都不会被检测到。因此,可能发生令人讨厌的事情;但是声称随机翻转会立即破坏您的数据是虚假的。
但是,是的,当您将数万亿个位放在硬盘驱动器上时,它们不会永远保持这种状态。那是一个真正的问题!每次读取数据时,ZFS都可以进行完整性检查。这类似于硬盘驱动器本身已经完成的工作,但是这是您要牺牲一些空间的另一种保护措施,因此您将增强抵御数据损坏的能力。
当您的文件系统足够好时,发生未被检测到的错误的可能性就会变得非常低,以至于您不必再担心了,您可能会决定将校验和内置到所使用的数据存储格式中是不必要。
不管哪种方式:不,检测并非并非不可能。
但是,文件系统本身永远不能保证可以从中恢复所有故障。这不是灵丹妙药。当检测到错误时,您仍然必须具有备份和计划/算法。
是的,这是一个问题,主要是因为驱动器尺寸增大。大多数SATA驱动器的URE(不可纠正的读取错误)速率为10 ^ 14。或者,按统计数据读取的每12TB数据,驱动器供应商表示驱动器将返回读取失败(通常可以在驱动器规格表中查找它们)。该驱动器将继续在驱动器的所有其他部分正常工作。企业FC和SCSI驱动器的URE速率通常为10 ^ 15(120TB),并带有少量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之类的较新的存储/数据库系统还具有每次更新的校验和,以防止文件系统中的错误:)
从理论上讲,这值得关注。实际上,这是我们保留子/父/祖父母备份的部分原因。IMO每年的备份至少需要保存5年,如果您发现备份的时间远不止于此,那么文件显然不那么重要。
除非您处理的是可能会液化某人大脑的位,否则我不确定风险与回报是否完全可以更改文件系统。
是的,这是一个问题。
这就是RAID6如今备受青睐的原因之一(以及增加HD大小会增加重建阵列的时间)。具有两个奇偶校验块可以进行额外的备份。
RAID系统现在还执行RAID清理,该清理会定期读取磁盘块,检查奇偶校验,如果发现一个坏块则将其替换。
关于OP关于RAID的声明,不了解什么数据是好是坏。
RAID控制器在每个数据条带上至少使用(奇/偶)个奇偶校验位。这就是一切;磁盘数据条带和奇偶校验(备份)数据条带。
这意味着对于具有冗余条带化的任何RAID类型(RAID 5/6),控制器都可以准确地判断原始数据条带是否已更改以及冗余数据条带是否已更改。
如果引入第二个冗余带(例如RAID6),则必须在三个不同的驱动器上损坏3个数据带,它们均对应于相同的实际文件数据。请记住,大多数RAID系统使用相对较小的数据条带(小于或等于128kb),因此实际上几乎不可能出现“位腐”排队到相同文件的相同128kb的情况。
是的,这是一个现实世界的问题,但问题是您是否应该担心它。
如果您只有一张装满图片的HDD,则可能不值得付出努力。它充满了重要的科学数据,可能是另一种故事,您明白了。