硬盘上的位腐烂是一个真正的问题吗?该怎么办?


32

一位朋友正在与我谈论比特腐烂的问题-驱动器上的比特随机翻转,破坏数据。极为罕见,但有足够的时间可能会成为问题,并且无法检测到。

该驱动器不会认为它是坏扇区,而备份只会认为该文件已更改。没有验证完整性的校验和。即使在RAID设置中,也会检测到差异,但无法知道哪个镜像副本正确。

这是一个真正的问题吗?如果是这样,该怎么办?我的朋友推荐使用zfs作为解决方案,但是我无法想象将工作中的文件服务器弄平,使用Solaris和zfs。



我只是在旧的200GB Seagate磁盘上出现了一个不错的SMART错误。碎片,它们已经烂得太多了:-(距5年保修期不到六个月,所以我可能会在没有大惊小怪的情况下得到更换
。– ThatGraemeGuy

Answers:


24

首先,您的文件系统可能没有校验和,但硬盘驱动器本身就有校验和。例如,有SMART。当然,一旦翻转太多,错误就无法纠正。而且,如果您真的不走运,则位的更改方式可以使校验和不会变得无效。那么该错误甚至都不会被检测到。因此,可能发生令人讨厌的事情;但是声称随机翻转会立即破坏您的数据是虚假的。

但是,是的,当您将数万亿个位放在硬盘驱动器上时,它们不会永远保持这种状态。那是一个真正的问题!每次读取数据时,ZFS都可以进行完整性检查。这类似于硬盘驱动器本身已经完成的工作,但是这是您要牺牲一些空间的另一种保护措施,因此您将增强抵御数据损坏的能力。

当您的文件系统足够好时,发生未被检测到的错误的可能性就会变得非常低,以至于您不必再担心了,您可能会决定将校验和内置到所使用的数据存储格式中是不必要。

不管哪种方式:不,检测并非并非不可能

但是,文件系统本身永远不能保证可以从中恢复所有故障。这不是灵丹妙药。当检测到错误时,您仍然必须具有备份和计划/算法。


好的,根据Wikipedia(en.wikipedia.org/wiki/Error_detection_and_correction)所述,现代硬盘驱动器使用CRC来检测错误,并尝试使用光盘样式的错误恢复来进行恢复。对我来说足够了。
scobi

1
但是,如果CRC与数据存储在同一位置(扇区),这将不会对所有错误情况有所帮助。例如,如果存在磁头定位错误,则可能会将错误数据写入错误的扇区-但是使用正确的校验和=>,您将无法检测到该问题。这就是为什么ZFS中的校验和与它们保护的数据分开存储的原因。
knweiss

ZFS是否像Windows一样具有维护功能?这基本上是定期重写数据以刷新磁编码。
TomTom

现代硬盘驱动器不使用CRC,它们使用的汉明码非常不同。ECC内存使用的是同一件事。可以纠正一位翻转错误,可以检测到但不能纠正两位翻转错误,翻转三位或更多位,并且实际上损坏了数据。无论如何,都无法替代数据备份。与驱动器盘片上的汉明代码相比,ZFS和其他文件系统没有提供更好的保护。如果数据已损坏,则ZFS不会保存您。
Jody Lee Bruchon '17

@JodyLeeBruchon您现在主要使用了汉明代码的源代码?我最近一直在进行的信息收集表明,驱动器制造商仍在使用CRC-RS。1 2
Ian Schoonover

16

是的,这是一个问题,主要是因为驱动器尺寸增大。大多数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,并且其中一个驱动器完全坏了,那么我会收到相当恒定的数据流(每次找到它都会在驱动器故障之前对其进行修复并提醒我)。如果碰到某些地方会很麻烦。


2
您在说什么单位?“ 10 ^ 14”不是“比率”。
杰伊·沙利文

2
该单位例如是“每个错误读取10 ^ 14位”,等于每个错误读取12 TB。
Jo Liss 2015年

2
当然,请记住,错误率通常是按读取的每个位的完整扇区错误来引用的。因此,当制造商将URE比率定为10 ^ -14时,它们的真正含义是任何随机扇区读到URE的概率为10 ^ -14,如果是,则整个扇区将变得不可读。那就是事实,这就是统计;在现实世界中,URE通常会成批出现。
2015年

9

硬盘驱动器通常不将数据位编码为单个磁畴-硬盘驱动器制造商始终意识到,磁畴可能会翻转,并内置了对驱动器的错误检测和纠正。

如果位发生翻转,则驱动器将包含足够的冗余数据,可以在下次读取扇区时对其进行纠正。如果您检查驱动器上的SMART统计信息,则显示为“可纠正错误率”。

根据驱动器的详细信息,它甚至应该能够从一个扇区中的多个翻转位中恢复。可以静默纠正的翻转位数将受到限制,并且可能被检测为错误的翻转位数也将受到限制(即使不再有足够的可靠数据来对其进行纠正)

所有这些加在一起,使得硬盘驱动器可以在大多数错误发生时自动纠正它们,并可以可靠地检测其余大多数错误。您必须在单个扇区中有大量的位错误,所有位错误都在再次读取该扇区之前发生,并且错误必须使得内部错误检测代码在您再次将其视为有效数据之前永远不会失败。这并非不可能,而且我敢肯定,运行非常大的数据中心的公司确实会看到这种情况的发生(或更确切地说,它发生了并且他们没有看到它的发生),但是这肯定不是您可能想到的那么大的问题。


2
实际上,我经常会出现位旋转错误(某些地方我读得很少),系统会(不正确地)从中自动恢复该错误。如果至少它通知我发生了故障,我可以在无法恢复之前重新读取数据以进行恢复;如果无法恢复,我可以将其与其他硬盘驱动器进行比较。
Alex

Alex,请检查您的HDD SMART数据和系统RAM,以确认没有其他问题导致损坏。比特腐烂/随机损坏非常罕见,因此您的计算机可能还会发生其他情况。
Brian D.

@BrianD。一个问题是,我将硬盘驱动器保留在其(绝缘的)包装材料中。这导致硬盘在工作时发热超过60°C,并持续数天。这听起来像是为什么会发生腐烂的正当理由吗?
亚历克斯

绝对不建议这样做,因为大多数硬盘驱动器中都有小气孔,不应将其盖上以正常运行。无论您的问题是位问题还是其他问题,我都会在PC上运行全面诊断,以验证一切是否正常运行。
Brian D.

4

现代硬盘驱动器(自199x起)不仅具有校验和,还具有ECC,可以检测并纠正相当多的“随机”位错误。请参阅:http : //en.wikipedia.org/wiki/SMART

另一方面,固件和设备驱动程序中的某些错误也会在极少数情况下损坏数据(否则QA会捕获这些错误),如果您没有更高级别的校验和,将很难检测到。早期的SATA和NIC设备驱动程序在Linux和Solaris上均损坏了数据。

ZFS校验和主要针对较低级别软件中的错误。诸如Hypertable之类的较新的存储/数据库系统还具有每次更新的校验和,以防止文件系统中的错误:)


3

从理论上讲,这值得关注。实际上,这是我们保留子/父/祖父母备份的部分原因。IMO每年的备份至少需要保存5年,如果您发现备份的时间远不止于此,那么文件显然不那么重要。

除非您处理的是可能会液化某人大脑的位,否则我不确定风险与回报是否完全可以更改文件系统。


1
我看不出孩子/父母/祖父母的备份有什么帮助。无法通过该系统知道是否由于用户想要更改它而导致位被翻转或者驱动器是否自行完成了翻转。并非没有某种校验和。
scobi,

如果您不知道其中的数据是好的,那么进行多次备份将无济于事。您可以手动对文件进行校验和,但是ZFS可以自动执行更多操作,并且使文件系统管理变得容易。
Amok

1
备份备份的时间间隔超过一周/一个月会增加您获得文件副本的机会。我可能对此更加清楚。
卡拉Marfia

1
问题是:您怎么知道自己的副本不好?您怎么知道备份的是好的副本呢?以自动化的方式。
scobi

我已经看到也许每隔几年就会有一个文件因为腐败而归于腐败,但是我可能患有小鱼综合症。我可以理解有关备份无用的说法,如果有冒犯性,我将删除。无论如何,都是花时间阅读其他答案的时间。;)
Kara Marfia

2

是的,这是一个问题。

这就是RAID6如今备受青睐的原因之一(以及增加HD大小会增加重建阵列的时间)。具有两个奇偶校验块可以进行额外的备份。

RAID系统现在还执行RAID清理,该清理会定期读取磁盘块,检查奇偶校验,如果发现一个坏块则将其替换。


请注意,数据完整性并不是所有RAID系统的功能。
duffbeer703

1
对于TB级驱动器,共享命运的比特太多了,而比特的物理存储区域却很小,因此这个问题变得更加重要。同时,TB级驱动器发生故障的可能性增加很多,以至于RAID6不够,除非您在池中放置许多驱动器(例如8个或更多)。如果驱动器数量较少,则最好使用又称为RAID 10的镜像条带。在ZFS上,都可以使用RAID 6(raidz2)和RAID 10(zpool创建mypool镜像c0t1d0 c0t2d0镜像c0t3d0 c0t4d0)。
Michael Dillon

RAID无法分辨出哪些数据是好数据,哪些不是,因此它无法修复错误,它只能检测到它们。
Amok

Amuck:本身并不是“ RAID标准”的一部分,但是高级RAID系统(固件等)可以做到这一点
Matt Rogish 09年

@ Michael Dillion-随着驱动器数量的增加,RAID6的可靠性不会提高。对于所有数据,只有原始数据+ 2个奇偶校验。驱动器数量的增加对可靠性不利,因为它增加了可能的驱动器故障率,而没有增加任何数据的冗余性。增加驱动器数量的唯一原因是增加可用存储空间。
Brian D.

1

关于OP关于RAID的声明,不了解什么数据是好是坏。

RAID控制器在每个数据条带上至少使用(奇/偶)个奇偶校验位。这就是一切;磁盘数据条带和奇偶校验(备份)数据条带。

这意味着对于具有冗余条带化的任何RAID类型(RAID 5/6),控制器都可以准确地判断原始数据条带是否已更改以及冗余数据条带是否已更改。

如果引入第二个冗余带(例如RAID6),则必须在三个不同的驱动器上损坏3个数据带,它们均对应于相同的实际文件数据。请记住,大多数RAID系统使用相对较小的数据条带(小于或等于128kb),因此实际上几乎不可能出现“位腐”排队到相同文件的相同128kb的情况。


0

是的,这是一个现实世界的问题,但问题是您是否应该担心它。

如果您只有一张装满图片的HDD,则可能不值得付出努力。它充满了重要的科学数据,可能是另一种故事,您明白了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.