mdadm RAID1阵列替换故障磁盘失败报错求助
mdadm RAID1阵列替换故障磁盘失败报错求助
大家好,我遇到了RAID1磁盘替换的棘手问题:原来阵列里的/dev/sdb损坏后,我换了新磁盘,但不管是直接添加到阵列还是设为备用盘都失败了,始终报Invalid argument错误。以下是我执行的操作和对应输出,麻烦帮忙看看怎么解决?
# 尝试直接添加磁盘到阵列 mdadm --add /dev/md1 /dev/sdb mdadm: add new device failed for /dev/sdb as 3: Invalid argument
# 查看当前RAID状态 cat /proc/mdstat Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : active raid1 sda[2] 3906852864 blocks super 1.2 [2/1] [U_] bitmap: 12/30 pages [48KB], 65536KB chunk unused devices: <none>
# 尝试将磁盘添加为备用盘 mdadm --manage /dev/md1 --add-spare /dev/sdb mdadm: add new device failed for /dev/sdb as 3: Invalid argument
# 查看内核日志里的RAID相关报错 dmesg -T | tail | grep md [Mon Aug 5 13:53:56 2024] md: sdb does not have a valid v1.2 superblock, not importing! [Mon Aug 5 13:53:56 2024] md: md_import_device returned -22
# 检查磁盘上的RAID超级块信息 mdadm --examine /dev/sdb /dev/sdb: Magic : a92b4efc Version : 1.2 Feature Map : 0x9 Array UUID : 1919e203:1242d469:d56eea7e:80667163 Name : neverpi:1 Creation Time : Thu Jul 8 17:29:41 2021
可能的解决步骤
从输出和日志的矛盾点(mdadm --examine显示磁盘有v1.2超级块,但内核不认)来看,大概率是磁盘上残留的旧RAID信息和当前阵列不匹配导致的,试试下面的方法:
彻底清除磁盘上的旧RAID超级块
先把新磁盘上遗留的RAID配置信息清零,避免干扰当前阵列:mdadm --zero-superblock /dev/sdb检查磁盘容量与分区匹配度
确认新磁盘的容量至少和当前阵列里的/dev/sda一致(RAID1要求成员盘容量不小于现有盘);如果新盘有旧分区,先用fdisk或parted删除所有分区,再创建一个和sda上RAID分区大小完全一致的分区(比如/dev/sdb1),之后尝试添加分区到阵列:mdadm --manage /dev/md1 --add /dev/sdb1验证阵列与磁盘的UUID是否匹配
用下面的命令查看当前阵列的UUID,对比mdadm --examine得到的sdb的UUID:mdadm --detail /dev/md1如果两者UUID不一致,说明这个sdb曾属于其他RAID阵列,必须先执行第一步的清零操作后再重新添加。
检查新磁盘的健康状态
用smartctl工具排查磁盘是否存在硬件故障:smartctl -a /dev/sdb如果磁盘本身有坏道或硬件问题,也会导致添加失败,这种情况下需要更换磁盘。
备注:内容来源于stack exchange,提问作者Craig Hopkins
相关产品推荐
相关产品推荐

