运行中系统Raid1配置故障:无法将/home与/var分区加入阵列
运行中系统Raid1配置故障:无法将/home与/var分区加入阵列
嘿,我看你这是在给运行中的系统搭RAID1,结果卡在/home和/var分区没法加入阵列了——这个问题我碰到过好多次,核心原因很简单:你要加的/dev/sda5和/dev/sda6现在正被系统挂载着,处于「忙(busy)」状态,mdadm自然没法操作它们。咱们一步步来解决:
先明确现状
从你给出的设备信息和RAID状态来看:
/dev/md0(根分区)已经正常搭建RAID1,双盘同步没问题/dev/md127(对应/home)和/dev/md2(对应/var)现在都是单盘的RAID1阵列,且处于只读状态,还差sda5和sda6没加进去- 目前sda5还挂载在
/home,sda6挂载在/var,这就是执行mdadm /dev/md127 -a /dev/sda5时提示Device or resource busy的原因
解决步骤(重中之重:先备份数据!)
不管做什么磁盘操作,先把/home和/var的所有数据备份到外部存储或者临时目录,比如用rsync:
# 备份/home rsync -avx /home/ /mnt/external_drive/home_backup/ # 备份/var rsync -avx /var/ /mnt/external_drive/var_backup/
一、处理/home分区(对应md127)
- 先把空的md127临时挂载,把原/home的数据同步过去:
mkdir /mnt/md127 mount /dev/md127 /mnt/md127 rsync -avx /home/ /mnt/md127/ - 修改
/etc/fstab,把/home的挂载点从sda5改成md127(推荐用UUID更稳定,先查UUID:blkid /dev/md127):
把原来类似/dev/sda5 /home ext4 defaults 0 2的行,替换成:UUID=你的md127UUID /home ext4 defaults 0 2 - 卸载正在使用的/home和临时挂载的md127:
如果卸载失败,说明有进程占用/home,用umount /home umount /mnt/md127fuser -m /home查看占用进程,临时终止它们;或者更稳妥的方式是用Linux Live镜像(比如Ubuntu Server Live)启动系统,在不挂载系统分区的环境下操作。 - 现在可以把sda5加入md127了:
mdadm /dev/md127 -a /dev/sda5 - 用
watch cat /proc/mdstat查看同步进度,等进度条走完,阵列就变成双盘正常状态了。
二、处理/var分区(对应md2)
步骤和/home类似,但/var被更多系统进程占用(比如日志、数据库),大概率没法直接卸载,推荐用Live CD/USB启动系统操作:
- 用Live系统启动后,先挂载md2和原sda6:
mkdir /mnt/md2 /mnt/sda6 mount /dev/md2 /mnt/md2 mount /dev/sda6 /mnt/sda6 - 把sda6的/var数据同步到md2:
rsync -avx /mnt/sda6/ /mnt/md2/ - 修改系统的
/etc/fstab(需要先挂载根分区,比如mount /dev/md0 /mnt/root,然后编辑/mnt/root/etc/fstab),把/var的挂载点改成md2:
替换原来的/dev/sda6 /var ext4 defaults 0 2为:UUID=你的md2UUID /var ext4 defaults 0 2 - 卸载sda6和md2:
umount /mnt/sda6 umount /mnt/md2 - 将sda6加入md2阵列:
mdadm /dev/md2 -a /dev/sda6 - 同样用
watch cat /proc/mdstat等待同步完成。
后续验证
同步完成后重启系统,执行以下命令确认状态:
df -h:检查/home和/var是否正确挂载在md127和md2上mdadm --detail /dev/md127和mdadm --detail /dev/md2:查看阵列状态,应该显示[UU],代表双盘正常- 最后别忘了更新mdadm的配置文件,确保系统重启后能识别阵列:
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
备注:内容来源于stack exchange,提问作者codelearner1029
相关产品推荐
相关产品推荐

