Featured image of post 记一次RAID硬盘识别问题排查过程

记一次RAID硬盘识别问题排查过程

详细记录如何使用MegaCli工具排查和解决服务器RAID卡未识别新硬盘的问题

问题背景

在服务器运维过程中,遇到了一个棘手的问题:向服务器插入了一块新的 1TB SAS 硬盘后,使用 lsblk 命令无法看到这块新硬盘。经过排查发现,这块硬盘虽然已经被 RAID 卡识别,但处于 Unconfigured(good) 状态,没有被配置为虚拟磁盘,因此操作系统无法访问。

本文记录了使用 MegaCli 工具排查和解决此问题的完整过程。

安装 MegaCli 工具

MegaCli 是用于管理 LSI/Broadcom RAID 卡的命令行工具,在 Ubuntu/Debian 系统上的安装步骤如下:

下载 MegaCli 软件包

1
wget https://docs.broadcom.com/docs-and-downloads/raid-controllers/raid-controllers-common-files/8-07-14_MegaCLI.zip

解压软件包

1
unzip 8-07-14_MegaCLI.zip

转换 RPM 包为 DEB 包

由于下载的是 RPM 格式,需要使用 alien 工具转换为 DEB 格式:

1
2
cd Linux
sudo alien MegaCli-8.07.14-1.noarch.rpm

安装 DEB 包

1
sudo dpkg -i megacli_8.07.14-2_all.deb

修复依赖库问题(如需要)

如果遇到缺少 libncurses.so.5 的错误,创建符号链接:

1
sudo ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64-linux-gnu/libncurses.so.5

验证安装

1
/opt/MegaRAID/MegaCli/MegaCli64 -v

查看 RAID 状态

使用以下命令查看所有物理硬盘的详细信息:

1
/opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL

通过 MegaCli 的输出,可以清楚地看到服务器上所有硬盘的当前状态。

排查结论

服务器共有 7 块物理硬盘,新插入的硬盘位于 Slot 6,当前状态为 Unconfigured(good)(未配置,状态良好),还没有被配置成虚拟磁盘(Virtual Drive),因此 Linux 操作系统(lsblk)无法识别它。

硬盘分布详细解读

为了便于理解,将 7 块硬盘按用途分为 4 组:

系统盘(对应 /dev/sda

  • 位置:Slot 5
  • 型号:Intel 120GB SSD
  • 状态:Online
  • 配置:单盘 RAID 0(或直通模式)
  • 用途:系统启动盘

数据盘阵列(对应 /dev/sdb,容量 2.7TB)

  • 位置:Slot 0, 1, 2, 3
  • 型号:4 块 Seagate 1TB SAS 硬盘
  • 状态:Online
  • 配置:RAID 5 阵列(3块数据 + 1块校验 = 3TB 可用容量)

数据盘(对应 /dev/sdc,容量 931GB)

  • 位置:Slot 7
  • 型号:Seagate 1TB SAS 硬盘
  • 状态:Online
  • 配置:单盘 RAID 0

🔍 关键发现:新插入的硬盘(Slot 6)

  • 位置:Slot 6
  • 型号:Toshiba 1TB SAS 硬盘
  • 状态Unconfigured(good)(未配置,状态良好)
  • Foreign State:None(无外来配置)
  • Other Error Count:9(有少量历史错误计数,不影响当前识别)
  • 现状:硬盘物理连接正常且被 RAID 卡识别,但由于未被加入任何 RAID 组或创建为虚拟磁盘,RAID 卡不会将其呈现给操作系统

问题分析:为什么没有自动识别?

原因一:Foreign State 为 None

输出显示 Foreign State: None,说明 RAID 卡没有检测到这块盘上有可识别的旧 RAID 配置信息(或已被清除)。

  • 如果之前是 Linux 软 RAID(mdadm):硬件 RAID 卡无法识别软 RAID 元数据,会将其视为空盘
  • 如果之前是硬件 RAID:可能是 RAID 元数据不兼容或已被清除

原因二:需要手动创建虚拟磁盘

在 Dell PERC 等 RAID 卡上,必须将物理磁盘配置为虚拟磁盘(Virtual Drive, VD),操作系统才能访问。

解决方案:配置硬盘上线

既然硬盘状态是 Unconfigured(good),需要将其配置为单盘 RAID 0,操作系统才能识别。

创建单盘 RAID 0

执行以下命令将 Slot 6 的硬盘配置为虚拟磁盘:

1
2
3
4
# 将 Slot 6 的硬盘配置为单盘 RAID 0
# [32:6] 代表 Enclosure 32, Slot 6
# -a0 代表第 0 个适配器
sudo /opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r0 [32:6] -a0

预期结果

命令执行成功后,终端会提示:

1
Adapter 0: Created VD 3

再次运行 lsblk 命令,应该就能看到新增的 /dev/sdd 设备了。

⚠️ 数据安全提示

重要:-CfgLdAdd 命令会创建 RAID 结构并重写磁盘头部元数据,可能会影响原有数据的访问。

不同场景的数据恢复方案

原硬盘配置 Foreign State 数据恢复可能性
Linux 软 RAID (mdadm) None 配置上线后,可尝试使用 mdadm --assemble --scan 找回数据
硬件 RAID None RAID 卡已不识别旧配置,只能作为新盘挂载,能否恢复取决于分区表是否完整
全新硬盘 None 无数据丢失风险,可直接使用

刷新系统设备列表

配置完成后,如果系统仍未自动识别新设备,可以手动刷新 SCSI 总线:

1
2
3
4
# 扫描所有 SCSI 主机控制器,让系统重新识别硬盘
for host in /sys/class/scsi_host/host*/scan; do 
    echo "- - -" > "$host"
done

执行后使用 lsblkfdisk -l 验证新硬盘是否已经可见。

总结

本次排查过程的关键步骤:

  1. ✅ 安装 MegaCli 工具进行 RAID 卡管理
  2. ✅ 使用 -PDList 命令查看所有物理硬盘状态
  3. ✅ 定位问题:新硬盘处于 Unconfigured(good) 状态
  4. ✅ 使用 -CfgLdAdd 命令创建单盘 RAID 0
  5. ✅ 刷新系统设备列表,验证硬盘上线

通过这次排查,深刻理解了硬件 RAID 卡的工作机制:物理硬盘必须先配置为虚拟磁盘,操作系统才能访问。在日常运维中,遇到硬盘无法识别的问题时,应首先检查 RAID 卡层面的配置状态,而不是仅在操作系统层面排查。

面朝大海,春暖花开。
使用 Hugo 构建
主题 StackJimmy 设计