带有两个失败设备的RAID 5

我有一个带6个设备的软件RAID 5,其中一个需要重build。 到现在为止,一切都好。

但是,当磁盘被重build时,在另一个磁盘上发现了坏扇区,并且被标记为有故障。 我可以重新组装RAID制作mdadm --assemble --force /dev/sd[af]

于是,我制作了一个有问题的磁盘映像,并用零填充了坏区。 然后,我用losetup命令创build了一个循环设备。

当我尝试用循环设备组装RAID时,发生错误:

mdadm: failed to add /dev/loop0 to /dev/md/DATA: Invalid argument.

和dmesg中的消息:

 [ 3085.638028] mdadm: sending ioctl 1261 to a partition! [ 3085.638044] mdadm: sending ioctl 1261 to a partition! [ 3085.647487] md: loop0 does not have a valid v1.2 superblock, not importing! [ 3085.647516] md: md_import_device returned -22 

有没有解决这个问题?

算了吧。 即使这会起作用 – 你的数据将是一团糟。

至于失踪的超级街区 – 我不知道为什么它是错过,如果你做了你的副本与DD。

您可以尝试使用mdadm --misc -E /dev/yourdisk从故障磁盘中提取该信息。

我怀疑那个街区也可能是越野车。

我不知道为什么,错误磁盘的映像是不完整的。 我重新创build了映像,然后重新创build了环路设备并重新组装了RAID。 而令我惊讶的是,一切工作都完美无缺。 我知道这不是最好的解决scheme,可能会发生数据损坏。 但是我觉得这个解决scheme对我来说已经足够了。

感谢您的帮助:)

不,现在还没有解决办法。

根据定义,RAID 5不能与多于一个失败的成员一起工作:重复简化,数据被划分为n-1个条带( 而n = RAID成员的计数,这里是一个磁盘 ),将在这些条带上计算奇偶校验,在其余成员。 如果一个成员失败了,数据片或者奇偶校验将会丢失, 但是两者不能同时存在 – 这允许你重build一个。

但是,如果丢失两个成员, 当多个磁盘发生故障时原始数据总是丢失,因为片和奇偶校验都丢失 – 控制器根本无法重build这些数据。

如果一个成员没有整体丢失,就有可能通过传统的数据恢复程序重新构build你的数据的一部分,但要准备好你的数据看起来就像是一个霰弹枪。

PS不要用一个失败的RAID来调低底层,这只会让你的状况恶化。