我有一个健康的 RAID5 阵列,有 5 个磁盘:
# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sdb1[6] sdd1[0] sdh1[5] sdf1[2] sde1[1]
31255166976 blocks super 1.2 level 5, 512k chunk, algorithm 2 [5/5] [UUUUU]
bitmap: 0/59 pages [0KB], 65536KB chunk
unused devices: <none>
我想将一个磁盘移动到服务器上的另一个物理插槽,而不关闭服务器。 (插槽支持热插拔)
我可以安全地卸载阵列、移动磁盘并重新安装阵列,而不会进入降级模式吗?
答案1
卸载(文件系统)是不够的。
您必须停止阵列然后重新组装它:
mdadm --stop /dev/md0
# re-arrange / hotplug drives
mdadm --stop /dev/md0 # (*)
mdadm --assemble /dev/md0
检查journalctl
/dmesg
和/或cat /proc/partitions
/是有意义的lsblk
,以确保在尝试组装驱动器之前重新检测到驱动器正常。
(*) 在许多现代 Linux 系统上,udev ( ) 中存在一些 md 自动组装魔法,因此如果您只热插拔单个驱动器,/usr/lib/udev/rules.d/*md-raid*.rules
您可能会得到一个陈旧的结果。/dev/md0
在这种情况下,您实际上必须在组装之前再次停止它 - 或者重新触发未热插拔的驱动器的 udev 规则,或者使用 mdadm 的增量组装命令来完成它,但第二次停止它更简单,这就是为什么mdadm --stop
在热插拔驱动器之前和之后使用两次。
在某些情况下,mdadm.conf
过于冗长并限制设备或列出每个阵列的单独驱动器。这会阻止成功组装,因此如果仍然存在问题,则将是下一个检查的地方。保持mdadm.conf
尽可能简单(它实际上只需要知道每个数组的 UUID)。
如果您有额外的驱动器可用,并且不介意重新同步阵列,您可以在线完成整个过程,而不会丢失使用mdadm --replace
机制的冗余。这样您就可以交换插槽而无需卸载或停止任何东西。