我有一个包含 6 个设备的软件 RAID 5,其中一个需要重建。到目前为止,一切正常。
但是,重建磁盘时,发现另一个磁盘上有坏扇区,并被标记为故障。我可以重新组装 RAID mdadm --assemble --force /dev/sd[a-f]
。
因此,我制作了故障磁盘的映像,并用零填充了坏区。然后,我使用命令创建了一个循环设备losetup
。
当我尝试使用循环设备组装 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
这个问题有解决办法吗?
答案1
算了吧。即使这可行,你的数据也会变得一团糟。
至于丢失的超级块 - 如果您使用 dd 进行复制,我不知道它为什么会丢失。
您可以尝试使用 从故障磁盘中提取该信息mdadm --misc -E /dev/yourdisk
。
我怀疑该块可能也有缺陷。
答案2
我不知道为什么,故障磁盘的映像不完整。我重新创建了映像,然后重新创建了循环设备并重新组装了 RAID。令我惊讶的是,一切都运行正常。我知道这不是最好的解决方案,可能会发生数据损坏。但我认为这个解决方案对我来说已经足够好了。
无论如何,谢谢你的帮助:)
答案3
不,目前还没有解决方案。
根据定义,RAID 5 不能在多个成员发生故障的情况下工作:大大简化了,数据被分区在n-1条纹(其中 n= 团队成员数量,此处为磁盘),将计算这些条带上的奇偶校验并将其放在剩余成员上。如果某个成员发生故障,则要么使用数据切片或者奇偶校验将会丢失,但并非两者兼而有之- 它允许您从另一个重建一个。
但如果你失去两名成员,当多个磁盘发生故障时,原始数据总会丢失,因为切片和奇偶校验均丢失- 控制器完全没有办法重建这些数据。
有可能通过传统的数据救援程序重建部分数据如果一个成员没有整体丢失但是请做好准备,你的数据看起来就像被人用猎枪射击过一样。
PS:不要对发生故障的 RAID 进行低级操作 - 这只会使您的情况变得更糟。