Wax*_*ead 4 linux raid redundancy mdadm
我有一个 RAID5 阵列正在运行,现在还有一个我昨天设置的 raid1。由于 RAID5 计算奇偶校验,因此它应该能够捕获一个磁盘上的静默数据损坏。但是对于 RAID1,磁盘只是镜像。我想得越多,我认为 RAID1 实际上是相当危险的。当然它可以使我免于磁盘故障,但在保护磁盘上的数据方面可能没有那么好(实际上谁对我更重要)。
如果 RAID1 真的没有给我数据保护而是磁盘保护,我可以用 mdadm 做一些技巧来创建两个磁盘“类似 RAID5”的设置吗?例如,容量松散但仍为数据保留冗余?
由于 raid5 计算奇偶校验,因此它应该能够捕获一个磁盘上的静默数据损坏。
不。可以用随机数据完全抹掉一个扇区,RAID5 连一根睫毛都没有。RAID1 也有同样的问题。
一般来说,RAID 不提供实时数据完整性检查。它提供的是面对一个(或多个,具有某些 RAID 级别)驱动器故障时的容错能力。这是两件非常不同的事情。
如果您正在寻找捕获文件损坏的方法,则需要文件系统支持。RAID 不这样做。至少,不是靠自己。
要回答您的具体问题:
RAID1 被简单地实现为两个(或更多)相同的镜像。当镜像不同意扇区的内容时,就发生了损坏。问题是,RAID 系统通常不会意识到这一点,因为当它被要求检索给定扇区时,它通常不会读取所有镜像。为了效率,它可能只安排一个磁盘来读取它(希望是磁头当前离它最近的那个)。
假设在“清理”操作期间,当 RAID 系统被明确要求验证其所有数据的一致性时,就会发现不一致。如何解决这种不一致的问题没有简单的答案。请注意,此问题同样影响 RAID5 和 RAID1,以及其他 RAID 级别。
在 RAID1 中,不一致表现为包含不同数据的两个镜像扇区。RAID 系统如何决定哪个扇区代表正确的数据?嗯,这是一个实现细节,老实说我不知道Linux系统是如何实现的。但问题是根本性的:镜像扇区是不同的,可能没有迹象表明它们为什么会变成那样。因此,RAID 系统所能做的最好的事情就是抛硬币:随机选择一个作为“正确”数据。
在三盘RAID5中,会以三组扇区的奇偶校验扇区不正确的形式出现不一致。问题是:这 3 个扇区中哪个是错误的?同样,没有明显的答案。三者中的任何一个都可能腐败,而且可能无法知道。如果您必须从其他 2 个扇区中选择一个要重新计算的扇区,则您有三分之一的机会选择实际损坏的扇区。这表明 RAID1 在这个意义上实际上比 RAID5“更安全”。RAID1 有 50% 的选错扇区,而 RAID5 有 67% 的选错机会。
总而言之:RAID 并非旨在捕捉发生的磁盘错误。RAID 在整个驱动器出现故障时提供容错能力。而已。
RAID5 不会捕获磁盘上的静默数据损坏;您需要一个具有块级校验和的文件系统,例如 ZFS 或 BTRFS,以防止出现这种情况。由于奇偶校验计算,RAID5 的性能也不如 RAID1。对于任何类型的奇偶校验 RAID,您都应该注意解决 RAID5 写入漏洞,例如,在断电情况下,这可能会导致数据损坏。
Linux 软件 RAID1 有一个有趣的优势,您可以根据需要创建任意数量的镜像——因此,如果正常运行时间是您的第一要务,您可以配置一个 8 磁盘 RAID1,以维护 7 个冗余副本。
使用 RAID1 发生数据损坏的可能性与使用单个磁盘(没有 RAID)差不多。
如果您真的担心数据损坏,您应该使用校验和文件系统或定期将未更改的数据与多个备份进行比较。一个流行的 ZFS 成功故事讲述了一个人的计算机正在悄悄破坏他的数据的故事,直到他开始使用 ZFS 时他才知道这一点。经过一番排查,他发现原因是电源有问题。
您还应该考虑到硬盘驱动器不是唯一可能损坏数据的地方。例如,如果您不使用 ECC RAM(以及不仅兼容而且支持 ECC 的企业级主板),宇宙射线可能会在内存中翻转一点。根据我们谈论的数据类型,它甚至可能无关紧要。如果是视频或音乐文件,播放文件时不会注意到位翻转。
当您深入了解问题的实质时,静默数据损坏完全与概率有关。你的数据被破坏的概率不是很高;否则我们都会不断诅咒我们的数据再次被破坏。(每个人可能会保留多个备份,甚至是所有内容的硬拷贝,因为他们不相信计算机会保留一份好的副本。)您甚至会注意到数据损坏的可能性更低。大多数人完全不知道静默数据损坏的概念,他们过得很好。还值得注意的是,即使是许多企业级磁盘存储系统也无法在文件系统级别防止静默数据损坏。但是,如果您根本不是赌徒,那么您可能想在企业级硬件(ECC RAM、
聚焦实际问题...
即使 RAID 5 也无法纠正静默位衰减,但它可以在数据清理期间检测到它。尽管它能够纠正磁盘报告为具有不可恢复的读取错误(URE)的单个块。请注意,并非会读取 RAID5 条带中的所有驱动器来进行正常数据读取,因此,如果未使用的磁盘上的条带中存在错误,则在执行数据清理之前不会检测到该错误。任何标准 RAID 的静默位失效检测只能在数据清理期间进行。在重建故障磁盘期间,RAID 5 甚至无法做到这一点,这是当今 RAID 5 最令人担忧的问题。
这就是磁盘系统将大多数位损坏报告为不可纠正的读取错误 (URE) 给 mdadm 的原因。但是,您的数据仍然存在风险,不会导致磁盘报告任何错误,例如
以及其他类型的错误,例如 ServerFault 页面上描述的错误,硬盘驱动器上的位腐烂是否是一个真正的问题?对此我们能做些什么呢?
至少具有 3 个磁盘的 RAID 6 和 RAID 1 阵列是唯一有可能检测和纠正某些形式的静默位失效的标准 RAID 级别,这些静默位失效不会被各个磁盘报告为错误,尽管我不知道如果 mdadm 实现了所需的代码。通过使用前向纠错式投票系统。
仅供参考,我注意到 Synology DS1813+ 设备对数据和系统分区都使用 mdadm,并且在系统分区的所有 8 个磁盘上使用 RAID 1。
正如您可能已经观察到的,这在很大程度上依赖于磁盘能够将不良数据报告为错误。虽然大家都在说用ZFS来解决这个问题。我相信 ZFS 的主要数据完整性改进在于,它提供了更频繁的数据清理,因为它会在每次读取时检查镜像/奇偶校验,以及独立的块级奇偶校验(这意味着许多默默损坏的块不再沉默并在可能的情况下进行纠正),并且它可能实现上述逻辑以防止静默数据损坏。
要测试特定系统是否可以检测和/或纠正静默数据损坏,请使用 Linux dd 命令将随机数据写入阵列中的分区之一,然后测试阵列上的数据是否仍然良好。警告请勿在包含要保留数据的系统上执行此测试,因为您的系统可能无法通过测试。对于标准 RAID 级别,您需要在损坏和测试读取之间执行数据清理。
| 归档时间: |
|
| 查看次数: |
3494 次 |
| 最近记录: |