mdadm RAID1 同步过程中掉电导致 superblock 不一致的修复步骤

RAID1 superblock不一致需先用mdadm -E检查各盘事件计数,再强制组装可信盘,接着清除问题盘superblock并重新加入重建,最后更新initramfs和mdadm.conf确保启动正常。

mdadm raid1 同步过程中掉电导致 superblock 不一致的修复步骤

掉电导致 RAID1 的 superblock 不一致,本质是两块成员盘的元数据(如事件计数、同步状态、UUID)出现偏差,系统无法确认哪份更可信。修复核心不是“恢复数据”,而是让 mdadm 重新识别并信任其中一块盘,再重建另一块。

确认当前状态和问题根源

先检查阵列是否能识别,以及哪块盘缺失或损坏的 superblock:

  • 运行 mdadm -E /dev/sdX1 分别检查每块成员盘(如 /dev/sda1/dev/sdb1),看是否提示 “No md superblock detected” 或显示不一致的 Events
  • 执行 cat /proc/mdstat,观察阵列是否为 inactivedegraded,是否有 [U_][_U] 标识
  • mdadm –examine –scan 查看系统能否自动发现阵列 UUID 和设备映射

强制使用可信盘组装阵列

若其中一块盘的 superblock 完整且 Events 值更高(说明它最后写入更接近完成状态),可优先信任它:

ToonMe

ToonMe

一款风靡Instagram的软件,一键生成卡通头像

下载

  • 停止所有活动阵列:mdadm -Ss
  • 用可信盘强制组装:mdadm –assemble –force /dev/md0 /dev/sda1(仅指定一块盘)
  • 验证是否成功:mdadm -D /dev/md0 应显示 State : clean, degraded 且只有 1 个 Active Device
  • 若报错 “device busy”,先卸载相关文件系统并停止使用该 md 设备

修复另一块盘的 superblock 并重新加入

对缺失 superblock 或事件落后的那块盘,需重写元数据使其与当前阵列对齐:

  • 清除旧 superblock(谨慎操作):mdadm –zero-superblock /dev/sdb1
  • 将该盘作为新成员加入:mdadm /dev/md0 -a /dev/sdb1
  • 立即触发重建:echo repair > /sys/block/md0/md/trigger 或等待自动开始
  • 监控进度:watch cat /proc/mdstat,看到 [===>........]recovery 即表示同步已启动

关键收尾:引导与持久化

RAID1 同步完成后,还需确保系统能正常启动和下次开机自动加载:

  • 更新 initramfs,让内核启动时识别 RAID:dracut -f(CentOS/RHEL)或 update-initramfs -u(Debian/Ubuntu)
  • 确认 /etc/mdadm.conf 包含有效 ARRAY 行,例如:
    ARRAY /dev/md0 metadata=1.2 name=host:0 UUID=xxxxxx
  • 若根文件系统在 RAID 上,务必复制 MBR/引导扇区:dd if=/dev/sda of=/dev/sdb bs=512 count=1(避免换盘后无法启动)

https://www.php.cn/faq/2004762.html

发表回复

Your email address will not be published. Required fields are marked *