VSAN 虚拟机丢失排查与恢复完整方案
适用场景:
- ESXi 主机运行正常,但所有 VSAN 虚拟机(包括 vCenter)显示为“无效”或“找不到”。
- 未重新部署 vCenter,但通过 ESXi 主机无法注册虚拟机。
一、初步检查
1. 确认存储是否可见
- 目的:快速判断 VSAN 存储是否正常挂载。
- 详细操作:
- 登录 ESXi 主机管理界面:
- 打开浏览器,输入 ESXi 主机的 IP 地址(如
https://192.168.1.100
),使用管理员账号(如root
)和密码登录。
- 打开浏览器,输入 ESXi 主机的 IP 地址(如
- 检查数据存储状态:
- 点击左侧菜单 存储 → 数据存储。
- 查看是否存在名为
vsanDatastore
的存储(名称可能不同,但通常包含“vsan”字样)。 - 检查存储状态是否为 “已挂载”,并确认容量显示正常(如
5 TB 可用
)。
- 登录 ESXi 主机管理界面:
- 常见问题及解决:
- 存储未挂载:需手动挂载(见步骤二)。
- 存储容量显示为 0:可能是磁盘组故障或元数据损坏(见步骤六)。
二、手动挂载 VSAN 存储
1. 通过 SSH 连接到 ESXi 主机
- 目的:通过命令行操作挂载存储。
- 详细操作:
- 启用 SSH 服务:
- 在 ESXi Host Client 界面,导航到 管理 → 服务 → TSM-SSH,点击 启动。
- 使用 SSH 工具连接:
- 打开 PuTTY(Windows)或终端(Mac/Linux),输入 ESXi 主机的 IP 地址,端口
22
,使用管理员账号登录。
- 打开 PuTTY(Windows)或终端(Mac/Linux),输入 ESXi 主机的 IP 地址,端口
- 启用 SSH 服务:
2. 查找并挂载 VSAN 存储
-
详细命令:
# 1. 列出所有存储设备及其 UUID esxcli storage filesystem list # 示例输出(重点关注 "VSAN" 相关行): # Mounted Volume Name UUID Size Free # ------- --------------- ------------------------------------ --------- ------ # false vsanDatastore 12345678-abcdef-1234-5678-90abcdef1234 5TB 4TB # 2. 挂载存储(替换为实际的 UUID) esxcli storage filesystem mount -u 12345678-abcdef-1234-5678-90abcdef1234
-
验证结果:
- 成功提示:
The filesystem was mounted successfully
。 - 返回 ESXi Host Client 界面,刷新后应看到存储状态变为 “已挂载”。
- 成功提示:
常见问题及解决:
- 错误提示 “Unable to mount filesystem”:
- 可能原因:存储元数据损坏或物理磁盘离线。
- 解决:检查磁盘组状态(见步骤六)或重启 ESXi 主机。
三、检查虚拟机文件是否存在
1. 通过命令行确认文件
-
目的:验证虚拟机文件是否实际存在于存储中。
-
详细操作:
# 1. 进入 VSAN 存储根目录 cd /vmfs/volumes/vsanDatastore/ # 2. 列出所有文件夹(每个文件夹对应一个虚拟机) ls -al # 示例输出: # drwxr-xr-x 1 root root 8192 Aug 10 10:00 vCenter-Server # drwxr-xr-x 1 root root 8192 Aug 10 10:00 Web-Server # 3. 进入目标虚拟机目录(以 vCenter 为例) cd vCenter-Server # 4. 列出所有文件 ls -al
-
正常结果:
- 应包含以下文件:
.vmx
:虚拟机配置文件。.vmdk
:虚拟磁盘文件(可能有多个,如vCenter_1.vmdk
)。.nvram
:虚拟机 BIOS 配置。.log
:虚拟机运行日志。
- 应包含以下文件:
常见问题及解决:
-
目录为空:
- 可能原因:文件被误删除或存储故障导致数据丢失。
- 解决:从备份恢复(见步骤八)。
-
权限不足:
-
可能原因:目录权限被修改。
-
解决:
修复权限(需谨慎操作):
chmod 755 /vmfs/volumes/vsanDatastore/vCenter-Server/
-
四、解决文件锁定问题
1. 删除残留的锁定文件
-
目的:清除因虚拟机异常关闭生成的临时锁文件。
-
详细操作:
# 1. 进入虚拟机目录(以 vCenter 为例) cd /vmfs/volumes/vsanDatastore/vCenter-Server/ # 2. 删除所有 .lck 文件或文件夹 rm -rf *.lck # 3. 检查是否删除成功 ls -al | grep .lck # 应无输出
-
注意事项:
.lck
文件是虚拟机运行时生成的临时文件,删除不会影响数据。- 如果虚拟机正在运行,不要强制删除锁文件!
常见问题及解决:
-
无法删除锁文件
-
可能原因:虚拟机进程仍在后台运行。
-
解决:
重启 ESXi 主机或终止相关进程
# 查找虚拟机进程 ID ps -c | grep vmx # 终止进程(替换为实际 PID) kill -9 1234
-
五、手动注册虚拟机
1. 通过命令行强制注册
-
目的:绕过 vCenter 直接通过 ESXi 主机恢复虚拟机管理。
-
详细操作:
# 1. 注册虚拟机(替换为实际路径) vim-cmd solo/registervm /vmfs/volumes/vsanDatastore/vCenter-Server/vCenter.vmx # 示例成功输出: # (vim.vm.VmConfigInfo) { # dynamicType = <unset>, # name = "vCenter", # uuid = "12345678-90ab-cdef-1234-567890abcdef" # }
-
验证结果:
- 返回 ESXi Host Client 界面,刷新后应看到虚拟机出现在列表中。
常见问题及解决:
- 错误提示 “File not found”:
- 可能原因:路径错误或文件被移动。
- 解决:通过
ls
命令确认.vmx
文件路径。
- 错误提示 “Already exists”
- 可能原因:虚拟机已注册但状态异常。
- 解决:在 ESXi Host Client 中删除残留的虚拟机条目,再重新注册。
六、检查 VSAN 健康状态
1. 验证 VSAN 集群状态
-
目的:确认所有节点在线且通信正常。
-
详细命令:
esxcli vsan cluster get # 示例输出: # Cluster Information: # Enabled: true # Current Local Node State: MASTER # Node Count: 3
-
异常处理
- Node Count 少于预期:检查离线节点的电源、网络和服务状态。
2. 检查磁盘组状态
-
详细命令:
esxcli vsan storage list # 示例输出: # Disk Group Name: VSAN-DG1 # Storage Health: Healthy # Cache Devices: mpx.vmhba1:C0:T0:L0 # Capacity Devices: mpx.vmhba1:C1:T0:L0
-
关键状态说明:
- Healthy:正常。
- Degraded:部分数据不可用(需更换故障磁盘)。
- Absent:磁盘组丢失(检查物理连接)。
3. 测试节点间网络
-
详细命令:
vsan.vmkping -c 3 -H 192.168.1.101 # 替换为其他节点 IP # 正常输出: # 3 packets transmitted, 3 packets received
-
异常处理:
- 丢包或超时:检查物理交换机、VLAN 配置和 VMkernel 网卡设置。
七、修复元数据损坏
1. 检查损坏的 VSAN 对象
-
详细命令:
vsan.vobjutil -a | grep -i "invalid\|missing" # 示例输出: # Object UUID: 1234-5678, State: Invalid
-
记录结果:记下所有标记为
Invalid
或Missing
的对象 UUID。
2. 尝试修复对象
-
详细命令:
vsan.repair.dom_objects -p 1234-5678 # 替换为实际对象 UUID
-
注意事项:
- 此操作可能导致数据丢失!确保已备份关键文件。
- 如果修复失败,需联系 VMware 支持。
八、终极恢复方案
1. 从备份恢复虚拟机
- 操作步骤:
- 如果有备份工具(如 Veeam),直接还原虚拟机。
- 如果使用快照,通过 ESXi Host Client 回滚到健康状态。
2. 联系 VMware 支持
-
操作步骤
-
收集日志
# 生成 VSAN 日志包 vsan.support --generate --output /tmp/vsan-logs.tgz # 收集 ESXi 系统日志 tar -czvf /tmp/esxi-logs.tgz /var/log/vmware/
-
提交日志
- 登录 VMware 支持网站(https://my.vmware.com),创建工单并上传日志文件
-
总结流程图
开始
│
├─ 1. 检查存储是否挂载 → 是 → 3. 检查文件
│ │
│ └─ 否 → 2. 手动挂载存储
│
├─ 3. 文件是否存在 → 是 → 4. 删除锁定文件 → 5. 手动注册
│ │
│ └─ 否 → 8. 从备份恢复
│
├─ 6. 检查 VSAN 健康状态 → 正常 → 7. 修复元数据
│ │
│ └─ 异常 → 修复磁盘/网络
│
└─ 9. 联系 VMware 支持
注意事项
- 备份优先:所有操作前对关键虚拟机执行快照或文件备份。
- 网络排查:优先检查 VMkernel 端口、物理交换机和防火墙规则。
- 谨慎操作:修复元数据或删除文件前,确认已理解风险。
通过以上步骤,可系统性解决 90% 的 VSAN 虚拟机丢失问题。如遇复杂情况,建议在 VMware 技术支持下操作。