经过一番调查,我发现 mdadm 似乎完全忘记了我添加到阵列中的新设备。我最近向阵列中添加了一个新设备,一切正常,但现在我重新启动了(我认为自从进行此更改后我还没有重新启动过),并且出现了各种错误,我相当确定这是由这个原因造成的。
所以我的问题是:将该设备重新添加到阵列中是否安全?我真的我不想在这里丢失任何数据!这就是我思考我应该这样做,但我希望首先得到更有经验的人的确认:)请记住,我已经做过一次了,并且对文件系统进行了 fsck 和扩展,然后向其中写入了更多数据。
sudo umount /dev/md0
sudo mdadm --stop /dev/md0
sudo mdadm --add /dev/md0 /dev/sdd1
sudo mdadm --grow /dev/md0 --raid-devices=4
我已经采取了一些额外的信息和步骤:我重新启动后,收到一条消息,内容是“无法读取超级块”,即 /dev/md0(我的 RAID 阵列)。我立即怀疑是 mdadm 的问题,因为我最近一直在摆弄它,并cat /proc/mdstat
报告了以下情况:
...
md0 : inactive sdb1[0](S) sdc1[1](S)[/code]
这是错误的;我刚刚也将 /dev/sdd1 添加到阵列中。sudo mount -a
报告bad superblock on /dev/md0
。我现在不记得我使用的下一个命令,但其他一些报告说我试图写入文件系统的末尾,这是有道理的,因为它上面的数据比前两个设备所能容纳的要多。
sudo fdisk -l
报告新设备和分区正常运作。cat /etc/mdadm/mdadm.conf
显示以下内容:
DEVICE /dev/sdb1 /dev/sdc1
ARRAY /dev/md0 level=raid5 num-devices=2 UUID=*snip*
spares=1
这清楚地表明它完全忘记了我添加的新设备。执行上述命令后,我应该“保存”配置吗?我假设它们是持久的更改;我看不出它们在重新启动时丢失有什么用处。
编辑说明:我意识到“num-devices=2”包含“spares=1”,这意味着 mdadm 并未将磁盘从“使用中”更改为“备用”,它只是完全忘记了这一点。我将更新标题以说明这一点。
答案1
以下行:
DEVICE /dev/sdb1 /dev/sdc1
意味着 mdadm 将仅检查这 2 个设备是否用作 RAID 阵列的一部分。
您需要添加/dev/sdd1
该行,或将其替换为:
DEVICE partitions
这是默认设置,将使其扫描全部mdadm 超级块的分区。