先执行lsblk查看是否有md0等设备,再运行cat /proc/mdstat确认状态;若提示“No such file”,需加载对应raid模块;接着用mdadm --examine检查各盘元数据一致性,Event count差值超1则存在撕裂风险。

确认软RAID设备是否已识别
开机进入银河麒麟系统后,先执行 lsblk 查看所有块设备,重点观察是否有 md0、md1 这类以 md 开头的设备名。若完全不见 md 设备,说明内核未加载 RAID 模块或阵列元数据已严重损坏。
运行 cat /proc/mdstat,正常应显示阵列状态(如 active raid5 或 inactive)。如果输出为 No such file or directory,需立即加载模块:sudo modprobe raid456 && sudo modprobe raid1(根据实际 RAID 级别补全,如 RAID10 需加 raid10)。
【必须在加载模块后再执行 lsblk 和 mdstat,否则会误判阵列为“消失”】
检查 RAID 元数据完整性
软RAID依赖每个成员盘头部的元数据(superblock)来重建阵列。断电极易导致元数据写入中断,造成不一致。
方法一:用 mdadm 扫描并报告元数据状态
执行 sudo mdadm --examine /dev/sd[a-z]1(将 sd[a-z]1 替换为你的实际分区,如 sdb1、sdc1),逐个检查每块盘的 RAID superblock 版本、UUID、事件计数(Event count)是否一致。任意两块盘的 Event count 相差超过 1,即表明同步中断,存在元数据撕裂风险。
方法二:强制组装阵列验证
尝试用 sudo mdadm --assemble --force /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1(按实际盘序填写)。若返回 md0 started with 3 devices,说明元数据尚可解析;若报 No superblock found 或 Device or resource busy,则至少一块盘的 superblock 已损毁。
修复损坏的 RAID 成员盘元数据
第一步:定位损坏盘
对上一步中 mdadm --examine 显示 No superblock found 或 Invalid superblock 的分区,记下其设备路径(如 /dev/sdc1)。
第二步:备份原始 superblock(关键!)
执行 sudo dd if=/dev/sdc1 of=/root/sdc1_superblock_backup.bin bs=512 count=128 skip=0,把前 64KB 元数据区完整备份。这一步不可跳过,【一旦覆盖失败将彻底失去恢复机会】。
第三步:从其他健康盘恢复元数据
假设 /dev/sdb1 和 /dev/sdd1 元数据完好,且 UUID 与阵列一致,运行:sudo mdadm --zero-superblock /dev/sdc1 → 清除损坏残留sudo mdadm --create --force --metadata=1.2 /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1 → 强制重建(注意替换级别和盘数)
第四步:等待重建完成
执行 watch -n 1 cat /proc/mdstat,观察 [===>........] 进度条。重建过程严禁关机或中断 I/O,时间取决于磁盘容量和负载。
验证文件系统层是否受损
RAID 层恢复后,/dev/md0 只是块设备,其上文件系统可能因断电处于不一致状态。
先确认文件系统类型:sudo blkid /dev/md0,输出类似 TYPE="ext4" 或 TYPE="xfs"。
若为 ext4:sudo e2fsck -f -y /dev/md0
若为 xfs:sudo xfs_repair -L /dev/md0(【-L 参数会清空日志,仅在无法挂载且确定无未提交事务时使用】)
修复完成后,执行 sudo mount /dev/md0 /mnt 测试挂载。若成功,进入 /mnt 目录检查关键业务文件是否存在、可读取。











