在对我刚刚遇到的问题进行了一些调查之后,看起来 mdadm 完全忘记了我添加到阵列中的新设备。我最近在阵列中添加了一个新设备,它运行良好,但我现在已经重新启动(我认为自从进行此更改后我没有重新启动)并且我遇到了各种各样的错误,而且我相当肯定是因为这个。
所以我的问题是:将该设备重新添加回阵列是否安全?我真的不想在这里丢失任何数据!这是我认为我应该做的,但我想先得到有更多经验的人的确认 :) 请记住,我已经做过一次,并且 fscked 和扩展了文件系统,然后写了更多数据给它。
sudo umount /dev/md0
sudo mdadm --stop /dev/md0
sudo mdadm --add /dev/md0 /dev/sdd1
sudo mdadm --grow /dev/md0 --raid-devices=4
我已经采取了一堆额外的信息和步骤:我重新启动并收到一条消息,类似于我的 RAID 阵列 /dev/md0 的“无法读取超级块”。因为我最近一直在摆弄它,所以我立即怀疑 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 没有将磁盘从“in use”更改为“spare”,只是完全忘记了它. 我将更新标题以说明这一点。
该行:
意味着 mdadm 将仅检查这 2 个设备以用作 RAID 阵列的一部分。
您需要添加
/dev/sdd1
到该行,或将其替换为:这是默认设置,它会扫描所有分区以查找 mdadm 超级块。