我的 raid5 上有 6 个驱动器,正在运行,打算从旧的 ide 磁盘复制一些内容,因此我将 ide 转 usb 适配器插入其中,并将磁盘插入计算机中的 molex,然后我听到磁盘停止旋转,并检查 raid 是否正常,但它说我已经排除了 2 个故障,因此我检查了 /dev/,发现 2 个磁盘的名称已从 /dev/sdc 更改为 /dev/sdh,将 /dev/sdf 更改为 /dev/sdi,我最初有 sdb sdc sdd sde sdf sdg,因此我从计算机上拔下 usb ide 适配器并重新启动,认为这会有所帮助,但出于某种原因,它们又有了旧名称 sdc 和 sdf,因此我尝试将它们添加到 raid 中,但最终看起来像这样
http://pastie.org/private/ggfy02gicdv4mwruwcy1ug
http://pastie.org/private/ibg0kprjcxx4c9ohkz9ca
sdc 应该是 1 号,sdf 应该是 4 号
我已经搜索了大约 6 个小时的答案,但没有找到,请有人帮助我
答案1
当驱动器正在使用时,内核更改驱动器号,这很奇怪,但无论哪种方式。
如果可能的话,重新启动将重新扫描 raid,然后无论驱动器号如何都组装它们,因为 raid 信息存储在每个硬盘的开头,并且它根据该信息组装 raid,而不是存储在系统上的配置。
如果您经常想要插入额外的驱动器,而这会搞砸磁盘阵列,那么我建议您将一些 udev 驱动器规则写入 /dev/raid5disk1 或类似的东西。
可能已经太晚了,但是事件的 dmesg 输出会很好
答案2
根据我的经验,如果 RAID5 阵列中的两个驱动器被标记为故障,则需要创建一个新阵列。这显然是有风险的,您需要确保在进行任何写入或重新同步之前已正确设置了所有内容。因此,如果其他人可以建议在不创建新阵列的情况下使其正常运行,您可能应该先尝试一下 :)
但我要做的是停止旧阵列(mdadm --stop /dev/md0
),并创建处于降级状态的新阵列。然而我在这里给出的命令假设驱动器位置没有改变,您需要知道哪个磁盘放在哪里,因为顺序至关重要:
mdadm --verbose --create /dev/md1 --level=5 --raid-devices=6 /dev/sdb /dev/sdc /dev/sdd /dev/sde missing /dev/sdg
它应该向您发出警告,驱动器是另一个阵列的一部分,请确保时间戳相同(如果不相同,请停止并尝试使用另一个故障驱动器丢失)。
这足以启动阵列,因此使用 fdisk -l /dev/md1 检查分区布局是否符合您的预期,然后挂载文件系统只读(mount -r /dev/md1
)检查您的数据。如果数据已损坏,我会在缺少 /dev/sdc 的情况下重试,即:
mdadm --verbose --create /dev/md1 --level=5 --raid-devices=6 --chunk=64 /dev/sdb missing /dev/sdd /dev/sde /dev/sdf /dev/sdg
(如果你的块大小不是默认的 64K,你需要使用 来指定--chunk=###
)
一旦您对数据的完整性感到满意,请重新添加最后一个驱动器并重新同步:
mdadm -a /dev/md1 /dev/sdf
我之前曾创建过驱动器顺序错误的降级 RAID5 阵列,它并没有破坏数据,但是 YMMV。