2026年01月22日/ 浏览 5
适用场景:在 VMware ESXi 主机之上,某台虚拟机由于异常关机、存储故障或者人为手动误删等缘由,进而引发如下状况:
其一,无法借助 Web 界面启动该虚拟机;
其二,无法对其进行正常删除操作,具体表现为删除按钮呈灰色不可用状态,或者操作过程中界面卡住,亦或是系统报错;
其三,虚拟机显示为“无效”“配置文件缺失”,甚至完全无响应。
解决思路:绕过 ESXi 图形界面限制,通过 SSH 命令行强制清理残留文件 + Web 界面取消注册,实现彻底清除!
第一步:启用 ESXi 主机的 SSH 访问
1、登录 ESXi Web Client(https://<ESXi_IP>)【我的版本是ESXi7.0 Update 3】
2、进入 【主机】→【操作】→【服务】→【启用安全 Shell (SSH)】或者【主机】→【管理】→【服务】→【启用安全 Shell (SSH)如 下图:

3、使用终端工具(如 PuTTY、Terminal)SSH 登录 ESXi 主机:注意:操作需具有 root 权限【或者直接用root登陆】
第二步:定位并删除损坏虚拟机的文件
1、 查找目标虚拟机信息
vim-cmd vmsvc/getallvms | grep -i <虚拟机名称>
[root@localhost:~] vim-cmd vmsvc/getallvms | grep -i centosdeep
25 centosdeep [datastore2] centosdeep/centosdeep.vmx centos7_64Guest vmx-19
记下:
VMID(如 25)存储路径(如 [datastore2] centosdeep/...)2、 检查是否有进程占用(关键!)
lsof | grep <虚拟机名称>
[root@localhost:/vmfs/volumes/6708c20b-7e5dfcd8-444a-34735a9e2218] lsof | grep centosdeep
1050746 hostd FILE 52 /vmfs/volumes/6708c20b-7e5dfcd8-444a-34735a9e2218/centosdeep/centosdeep-flat.vmdk
如果输出上面结果:说明 hostd 仍在占用文件,需重启服务(见下一步)。
3、重启 hostd 释放文件锁(如有必要)
/etc/init.d/hostd restart
等待 30 秒,再次运行 lsof | grep <名称> 确认无输出。
4、 删除虚拟机文件夹
# 进入对应 datastore cd /vmfs/volumes/datastore2/
# 强制删除整个虚拟机目录 rm -rf <虚拟机文件夹名>/
注意:此操作不可逆,请务必确认文件夹内容!
5、验证是否删除成功
ls /vmfs/volumes/datastore2/<虚拟机文件夹名>/
[root@localhost:/vmfs/volumes/6708c20b-7e5dfcd8-444a-34735a9e2218] rm -rf /vmfs/volumes/datastore2/centosdeep/
[root@localhost:/vmfs/volumes/6708c20b-7e5dfcd8-444a-34735a9e2218] ls /vmfs/volumes/datastore2/centosdeep/
ls: /vmfs/volumes/datastore2/centosdeep/: No such file or directory
第三步:在 Web 界面取消失效虚拟机的注册
1、刷新 ESXi Web Client 页面
2、找到该虚拟机(通常显示为灰色、带“⚠️”图标或提示“配置文件缺失”)
3、右键点击 → 【从清单中移除】(Remove from Inventory)
此操作仅删除 ESXi 的注册信息,不涉及磁盘(因文件已删)
4、虚拟机将立即从 Web 界面消失
若 Web 界面仍显示“Skipping invalid VM”提示,可再次执行:
/etc/init.d/hostd restart
以强制同步状态
不要直接在 Web 界面删除后再手动删文件,可能导致元数据不一致。
大容量虚拟机(如 1TB+)删除需耐心等待,避免中断 SSH 会话。
操作前建议拍照记录当前状态,防止误删其他 VM。
若连接了 vCenter,还需在 vCenter 中同步清理
# 列出所有虚拟机
vim-cmd vmsvc/getallvms
# 关机(仅当 VM 可管理时有效)
vim-cmd vmsvc/power.off <VMID>
# 注销(仅当状态正常时有效)
vim-cmd vmsvc/unregister <VMID>
# 查看文件占用
lsof | grep <关键词>
# 重启管理服务
/etc/init.d/hostd restart