这很愚蠢,以前也发生过这种情况,但我知道如何解决它,现在一切都好了。
我在 Ubuntu 7.10 服务器上的 RAID-5 中运行 4 个 500GB SATA 驱动器。其中一个磁盘发生故障(实际上我认为是热插拔笼中的一个连接器),它一直运行在三个磁盘上,而我正在寻找替换硬盘或进一步诊断问题。
现在,在您继续阅读之前,我要声明,我没有备份,而且这些信息并不是特别重要,只是有就好。
无论如何,我之前曾遇到过某种硬件故障,可能是断电或什么原因,我无法恢复阵列。并不是某个磁盘发生故障,而是其他原因。
我能够简单地重新添加第二个“故障”磁盘,几分钟后,我就可以恢复运行了。也许我必须运行某种文件系统检查,我不知道。
上次我花了几个小时,甚至几天的时间来弄清楚如何做,后来就忘记了。
问题的关键是,如果我在 sdb、sdc 和 sdd 上运行 mdadm --examine,sdd 认为它仍然是数组的一部分,但在 sdb 和 sdc 的超级块信息上,它将 sdd 列为已被删除。
sda 是很久以前发生故障的磁盘,它在所有磁盘中都被正确列为故障删除。
TIA。有问题的服务器不在互联网上,因此无法将各种命令的输出 C&P 到论坛上。
我知道,现在你们中的很多人可能认为我是个傻瓜,甚至更糟。但是我记得,一旦我弄清楚了要运行的一系列命令,这是一个相当简单的过程,而且效果很好。
答案1
如果驱动器实际上没有发生故障,而是暂时不可用,或者由于其他原因不同步,您可以尝试强制 raid 在线,而忽略每个成员的更改编号/时间戳。
这样做会面临损坏数据的风险,尤其是当您不知道哪个驱动器最后离线时 - 但听起来您别无选择。
阅读 mdadm 手册页中有关使用 --force 选项的各种方法。
如果其中一个驱动器确实发生故障,而另一个驱动器不同步,您仍然可以将 raid 联机,并提供“missing”作为故障驱动器的设备 ID,并结合 --force 选项。这应该会以降级模式启动 raid。
答案2
RAID5 是否可以从双磁盘失败?我认为不应该发生。您正在寻找的可能是用于将驱动器热移除和热添加到 RAID 阵列的命令。
mdadm --remove /dev/md0 /dev/sdX
mdadm --add /dev/md0 /dev/sdX
答案3
如果其他方法都失败了,你可以使用 raidextract:http://www.chiark.greenend.org.uk/~peterb/linux/raidextract/
答案4
你可以尝试
mdadm --create /dev/md0 --level=5 --raid-devices=4 missing /dev/sd{b..d}