ESXi 8.0 重做RAID后VMFS数据存储消失问题解决实录

问题背景

最近在维护一台运行 ESXi 8.0(Build 25205845)的服务器时,遇到了一个棘手的问题:重做 RAID 阵列后,原本在系统盘 SSD(RAID1)上创建的 VMFS 数据存储"212"在 Web 管理界面中消失了,只能看到数据盘 RAID5 上的 "ESXI2-RAID5" 存储。

硬件配置

服务器配备了两组 RAID 阵列:

  • 系统盘:2块 SSD 组 RAID1(446.63 GB),用于安装 ESXi 操作系统
  • 数据盘:3块 HDD 组 RAID5(25.47 TB),用于存放虚拟机数据

故障现象

  1. 登录 ESXi Web Host Client,存储页面只显示 "ESXI2-RAID5" 这一个数据存储
  2. 通过 SSH 登录到 ESXi Shell,执行 df -h 命令发现系统确实挂载了多个文件系统:
Filesystem   Size   Used Available Use% Mounted on
VMFS-6      25.5T   2.6G     25.5T   0% /vmfs/volumes/ESXI2-RAID5
VMFSOS     119.8G   4.4G    115.4G   4% /vmfs/volumes/OSDATA-69f03d90-b92ce197-ec9b-34737991ebde
vfat         4.0G 277.9M      3.7G   7% /vmfs/volumes/BOOTBANK1
vfat         4.0G 277.8M      3.7G   7% /vmfs/volumes/BOOTBANK2

可以看到系统分区、引导分区都在,但就是没有看到原来的 "212" 存储。

问题排查

第一步:确认磁盘设备状态

首先查看系统识别到的存储设备:

esxcli storage core device list

输出显示了三个设备:

  • 25.47TB 的 HDD RAID5 阵列(数据盘)
  • 446.63GB 的 SSD RAID1 阵列(系统盘,标记为 Boot Device)
  • XFUSION 的 Enclosure 管理设备

这说明硬件层面一切正常,系统正确识别了两个 RAID 阵列。

第二步:检查分区表

查看系统盘的分区布局:

partedUtil getptbl /dev/disks/naa.600605b0123843f031d0edf5a4d32dcb

输出结果:

gpt
58303 255 63 936640512
1 64 204863 ... systemPartition 128
5 208896 8595455 ... linuxNative 0
6 8597504 16984063 ... linuxNative 0
7 16986112 268435455 ... vmfsl 0
8 268437504 936640478 ... vmfs 0

关键发现:系统盘有 8 个分区!其中:

  • 分区 1:系统引导分区 (EFI)
  • 分区 5-6:BOOTBANK 分区
  • 分区 7:OSDATA (VMFSOS 格式)
  • 分区 8:VMFS 格式分区 — 这正是我们要找的!

第三步:寻找未挂载的 VMFS 卷

这是解决问题的关键步骤。使用 ESXi 的卷扫描工具:

esxcfg-volume -l

输出清楚地显示了问题的答案:

VMFS UUID/label: 69f03d91-cc51e625-b4ca-34737991ebde/212
Can mount: Yes
Can resignature: Yes
Extent name: naa.600605b0123843f031d0edf5a4d32dcb:8  range: 0 - 326143 (MB)

问题根源确认
"212" 数据存储确实完整存在(Can mount: Yes),位于系统盘的第 8 分区(naa.600605b0123843f031d0edf5a4d32dcb:8),但未被自动挂载!

为什么会出现这个问题?

重做 RAID 后,虽然 VMFS 分区本身完好无损,但 ESXi 的自动挂载机制可能因为以下原因跳过了它:

  1. 签名变化感知:RAID 重建可能导致磁盘底层的元数据或分区签名发生细微变化
  2. 挂载顺序冲突:系统启动时,OSDATA 卷的挂载可能对后续卷的自动发现产生影响
  3. 持久化配置丢失:部分存储在 OSDATA 中的挂载配置可能需要重新建立

解决方案

找到了问题,解决起来就很简单了:

挂载数据存储

使用 esxcfg-volume 命令进行持久化挂载:

esxcfg-volume -M "212"

参数 -M 表示执行持久化挂载(Persistent mount),确保重启后仍然有效。

验证结果

执行以下命令验证挂载状态:

df -h

输出显示挂载成功:

VMFS-6  318.5G  13.9G  304.6G  4% /vmfs/volumes/212

再看看详细列表:

esxcli storage filesystem list | grep 212

确认显示为已挂载状态(Mounted: true),容量约 318.5GB。

刷新 Web 界面

vim-cmd hostsvc/datastore/refresh 212

刷新后,在 ESXi Web Host Client 的存储页面中,"212" 数据存储重新出现,所有数据完好无损。

经验总结

排查思路

遇到类似问题时,可以按照以下流程操作:

  1. 不要慌张:数据通常还在,只是没有被正确挂载
  2. 检查硬件层:确认磁盘设备被正确识别
  3. 检查分区表:使用 partedUtil 查看分区布局
  4. 扫描 VMFS 卷:使用 esxcfg-volume -l 查找未挂载的卷
  5. 持久化挂载:使用 esxcfg-volume -M 命令挂载

关键命令清单

# 查看存储设备
esxcli storage core device list

# 查看分区表
partedUtil getptbl /dev/disks/<设备名>

# 扫描未挂载的 VMFS 卷
esxcfg-volume -l

# 持久化挂载卷
esxcfg-volume -M "卷名"

# 查看已挂载的文件系统
df -h
esxcli storage filesystem list

# 刷新数据存储
vim-cmd hostsvc/datastore/refresh <数据存储名>

预防建议

  1. 重做 RAID 前备份配置:可以使用 vim-cmd hostsvc/firmware/backup_config 备份 ESXi 配置
  2. 记录存储布局:维护一份服务器存储布局文档,包括分区结构和用途
  3. 分离系统与数据:尽量将 ESXi 系统安装在独立的小容量磁盘上,避免与数据存储混用
  4. 善用命令行:ESXi Shell 提供了强大的诊断能力,Web 界面看不到的东西,命令行往往能发现

写在最后

这个问题虽然看起来吓人——数据存储消失了,但实际上只是 VMFS 卷没有被自动挂载。通过系统化的排查思路,我们快速定位了问题并恢复了访问。

记住:在虚拟化环境中,"看不到"不等于"丢失了"。保持冷静,善用命令行工具,大多数存储问题都能迎刃而解。


环境信息

  • 虚拟化平台:VMware ESXi
  • 版本:8.0.3 (Build 25205845)
  • 硬件:AVAGO MR9440-8i RAID 控制器

关键词:ESXi 8.0、RAID重建、VMFS、数据存储消失、esxcfg-volume、存储挂载


本文首发于个人技术博客,转载请注明出处。