ESXi 虚拟机损坏无法删除或启动的应急处理指南

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

picture loss