前言
本篇博文主要记录在维护 VMware VSphere 时,遇到硬盘故障引发的一系列的问题和解决方案。
1. 发现问题:虚拟机和ESXi都连不上了
今天一看,VMware vSphere 里的好几台虚拟机都挂了,服务也连不上。
第一反应:是不是网络问题?还是数据中心出状况了?
我试着在 vSphere 里重启几台虚拟机(运行在同一台 Exis 物理机上的),但完全没用。再一看,连 ESXi 物理主机也显示“无法连接”——这下事情不对劲了,不是简单的虚拟机崩溃,而是更底层的问题。
2. 排查过程:硬盘故障开始浮出水面
既然 ESXi 主机都无法连接了,那只能去机房查看了。接上显示器后,屏幕上跳出了红色的错误信息:
“编号 xxx 硬盘名 的 什么什么I/O 检测暂停”
这很像硬盘出故障了!
但奇怪的是,无论是 iDRAC 控制台、ESXi 控制台、还是 Prometheus 监控系统,都没有任何预警,完全没有报警。这就很奇怪了。
我继续在 vSphere 界面中查看这台 ESXi 主机的状态,发现界面上的操作全部变灰
,完全无法操作。此时,我更加确定了问题与硬盘有关。
3. 解决方案:重启 ESXi,问题逐渐明朗
联系供应商,他们认为应该是硬盘大概率损坏,但 vSAN 将其识别为数据逻辑错误,而非物理故障,因此既没有将该主机下线,也没有自动迁移虚拟机,导致整个环境陷入卡顿,虚拟机持续异常。供应商建议我先尝试重启 ESXi 主机进行排查。
重启后,问题更清晰了
- iDRAC、服务器面板、Prometheus 终于开始报警,说明这块硬盘的确出现问题了。
- 部分虚拟机自动恢复,剩余的虚拟机需手动启动。
- 但有两台虚拟机手动启动也失败,提示 “不在线”
供应商的建议是将这两台虚拟机 手动操作才能重新注册到 vSphere。
- 右键虚拟机 -> 取消注册
- 到文件目录里找到原来的 vmdk 文件 -> 重新注册虚拟机
然而,这两台虚拟机仍无法启动!
再仔细一查,发现 vmdk 文件
的大小和数量根本不对,原本 vmdk 文件
应该是几个 T 大小,现在只有几十 G,但 vSAN 总存储容量大小没有减少,说明数据应该还在,只是部分文件损坏了。
4. 硬盘状态不一致,移除硬盘操作遇到障碍
这时,我又发现一个奇怪的现象:
- 在 ESXi 后台,该硬盘状态显示 正常。
- 但在 VMware vSphere 控制台,硬盘状态却为 异常。
理论上,两边的状态应该一致,但显然存在不一致的情况。
ESXi 可能是误判了硬盘状态,认为它还能用,但实际上已经坏了
。
按理来说,即使设备坏了我做了虚拟机多副本
和vSAN 的 RAID
,有冗余机制能确保虚拟机能正常运行,但目前很明显并没有生效。
尝试移除硬盘
- 先找到硬盘组,勾选 “不活动” 或 “出错” 状态的硬盘
- 尝试直接移除,但 vSphere 界面显示硬盘仍然存在
- 进入vCenter 用命令行查询,发现硬盘确实已经移除
- 重启 vCenter 后,界面才正确刷新
最终问题只能通过 更换硬盘 来彻底解决。我现在正在等待新的硬盘寄过来,并计划从 NAS 中恢复数据。
5. 后续处理:命令操作踢出坏硬盘,恢复数据
在等待新硬盘的同时,我决定先通过命令行操作处理坏硬盘。(前面的步骤)
- 通过命令成功将坏硬盘从 ESXi 移除,并拔掉硬件。
- 插入新硬盘后,通过命令将其重新加入原本的硬盘组。
在硬盘组完成平衡后,硬件报错消失了,但问题并没有完全解决。坏掉的数据依然占用了空间,并且没有得到修复。
原本以为硬盘修复后,丢失的 20TB vmdk 文件会自动恢复,但结果并没有恢复。我本以为是副本中某一份坏了,只要硬盘修复就能恢复数据,但实际上所有副本都坏了。而且,40TB 的数据(双副本)并没有释放出来,依然占用了空间。
6. 数据恢复与备份恢复的挑战
此时,我决定从群晖 NAS 的 Active Backup
上还原改虚拟机备份,但恰好仅此一台机的数据始终无法恢复(备份是成功,但恢复按钮是灰色的,无法点击)。找了群晖技术支持,邮件回复要求我开启远程连接,但因为我的 NAS 设备部署在内网,远程操作并不方便。
最终,我选择将改虚拟机的备份文件下载导出,并通过 NFS 挂载到 vSAN 进行测试,确认数据是没有问题的。
7. 解决硬盘空间占用问题:通过命令删除损坏文件
为了清理空间,进入 vCenter 控制台,手动删除了损坏的数据。因为在 vSphere 页面无法操作,所有操作只能通过命令行完成。
通过命令查询 vmdk 数据时,提示有损坏文件,通过删除这些文件,空间得以释放。
8. 重新导入 20TB vmdk 文件,解决空间问题
最后,空间占用问题终于解决了。为了恢复缺失的 20TB vmdk 文件,我需要登录到某台 ESXi 主机的后台进行操作。
因为ESXi 会挂载 vSAN 集群,而只有在任务开始一段时间后,vSphere 界面才能看到该任务和进度。
- vCenter 的后台无法通过命令无法完成此操作,因为它无法挂载 NFS;
- vSphere 页面也无法执行,虽然 NFS 挂载是成功的,但每次导入都会失败,提示资源不足(实际上资源是充足的)。
这项操作花费了一个星期,最终终于将 20TB 的 vmdk 文件导入并将虚拟机恢复了。
9. 经验总结:技术措施的局限性与重要性
这次硬盘故障让我深刻意识到,虽然我配置了 vSAN 冗余、虚拟机副本和监控系统等一堆防线,问题依然没能完全避免。
冗余≠绝对安全
即便有硬盘冗余和虚拟机副本,硬盘坏掉照样可能导致业务中断。冗余是为了降低风险,不是消除所有问题的保险。
监控≠及时报警
虽然装了监控,硬盘出问题的时刻并没有第一时间报警,直到我重启了一下才开始报错。这让我意识到,不是所有的监控都能及时响应每一个硬件问题,尤其是像这种隐性故障。
状态显示不一致
在 ESXi 后台,硬盘的状态显示一切正常,但在 vSphere 控制台却报错了,导致了 vSphere 读取硬盘数据出现逻辑错误。
一些个人经验
这次事故让我也意识到一些不得不承认的现实。如果资金允许,最好使用 VMware 的正版并有技术支持,至少碰到问题能快速得到帮助,不用自己折腾。如果预算紧张,开源方案比如 OpenStack 也是不错的选择,至少能接触到底层,知道出问题了是怎么回事,自己能定位问题。
所以,我也决定从这次经验中改进一些方面:
- 优化监控策略:在硬盘 IO 和存储状态监测上加大力度,确保能够早期捕捉到问题。
- 深入了解 vSAN 故障处理:深入学习 vSAN 的故障恢复机制,避免类似的情况发生。
- 定期检查存储健康:不要等到硬盘出问题才意识到,定期检查硬盘的健康状态,做好预防工作。
总结一下:
再多的技术措施也没法代替硬件的物理故障,冗余和监控只是减小风险的手段,但无法消除所有潜在问题。所以备份、监控和及时的健康检查是必须的。只要硬件在,问题就有可能发生,做好准备,尽量早发现,早解决,才是最重要的。