世界杯红牌 / 2025-08-26 14:25:28

Linux 软RAID故障排查指南

一.Linux软raid的常见排查步骤

1. 检查 RAID 状态

首先,需检查 RAID 的当前状态:

cat /proc/mdstat

mdadm --detail /dev/md0

检查输出,确认是否有任何设备标记为故障。

2.检查系统日志

查看系统日志以获取更多信息:

dmesg | grep md

journalctl -xe | grep md

grep “/dev/md” /var/log/messages

grep “sdx” /var/log/messages 其中sdx是成员盘的名称,也可以是sda或者sdb之类的

找出与 RAID 相关的错误信息,帮助定位问题。

3. 检查 RAID 详细信息

使用 mdadm 检查 RAID 详细信息:

mdadm --detail /dev/md0

查看设备状态,识别故障磁盘。

4.检查磁盘或者磁盘分区的 superblock

检查每个磁盘的 superblock 信息:

mdadm --examine /dev/sdx

确认 superblock 信息是否一致。

5.标记并移除故障磁盘

将故障磁盘标记为故障并移除:

mdadm --manage /dev/md0 --fail /dev/sdX

mdadm --manage /dev/md0 --remove /dev/sdX

确认磁盘已成功标记和移除。

6. 替换并添加新磁盘

插入新磁盘后,添加到 RAID 阵列:

mdadm --manage /dev/md0 --add /dev/sdY

其中sdY是新的成员盘

确保新磁盘成功添加并开始重建。

7.监控重建过程

监控 RAID 重建进度:

watch cat /proc/mdstat

确认重建过程顺利完成。

8.更新 RAID 配置文件

更新配置文件以反映更改:

mdadm --detail --scan >> /etc/mdadm.mdadn.conf

如果存在之前的配置文件,可以考虑直接覆盖并替换,选用>> 将输出重定向到文件,覆盖文件中的现有内容>> 将输出重定向到文件,追加到文件末尾确认不存在重复的配置文件,不然可能导致系统重启遇到异常进入维护模式。

分析: 确认配置文件更新无误。

9.常用的mdadm其他命令mdadm --action=check /dev/md0 检查RAID阵列一致性

mdadm --examine /dev/sdX 查看特定磁盘或分区上的RAID信息

mdadm --zero-superblock /dev/sdX 清除磁盘或分区上的RAID信息

具体可以mdadm –help 查看

二.典型案例分析 1.故障介绍 客户创建了一个/dev/md0,成员盘是两个nvme盘,在两个nvme盘上创建了单一分区后创建的/dev/md0。

客户重启系统后发现/dev/md0消失。

2.排查过程 2.1 检查软raid状态 cat /proc/mdstat cat /etc/mdadm.conf 都查看不到/dev/md0信息,只能看到作为系统盘的3个软raid信息。

2.2和客户了解到成员盘是两个nvme盘创建了单一分区后创建的md0 lsblk查看到两个nvme盘目前已无任何信息。

mdadm --examine /dev/nvme0n1 mdadm --examine /dev/nvme1n1 也无任何输出。

2.3检查/var/log/messagesgrep "nvme" /var/log/messages 有看到这样的输出:

vfs:open an exclusive opened block device for write。

grep "md0" /var/log/messages,也看到有md0 disappear的提示。

怀疑是清掉了nvme盘上的分区导致关联的md0出现异常。

2.4和客户沟通,之前运行了初始化脚本,然后没重启,当时无异常,后面重启了发现异常。

查看了初始化的脚本,怀疑这一部分有问题。

查看可知这一部分的作用:这个脚本的主要目的是自动化清理磁盘上未使用(未挂载)的分区。它遍历系统中的所有磁盘,检查每个磁盘是否有未挂载的分区,如果有,就尝试删除这些分区。

客户也反馈在测试环境运行此脚本无异常,最后核对,发现测试环境是使用整个磁盘作为软raid的成员盘,所以并不触发此问题,但是生成环境是对nvme盘再分区后创建/dev/md0,所以该初始化脚本会把两个nvme盘上的分区误删,据此,问题已经找到。

另外运行脚本后,系统继续运行,重启才出现问题的原因:在大多数情况下,已经挂载的分区在fdisk重新分区后、系统重启前可以继续使用。这是因为Linux内核会将已挂载的文件系统信息保存在内存中,即使分区表发生变化,这些信息仍然有效。

建议fdisk分区后重启系统,重启系统可以保证所有系统组件正确识别到新的分区方案。

苹果11Promax手机卡顿最佳解决方法
2024全球发展趋势:10大挑战,5大破局点