一、问题描述
某Esxi主机因主机错误,手动关闭DRS后迁移虚拟机,发现某些虚拟机呈不可访问状态,主机进入维护模式失败
处理
1、将不可访问状态的vm记录,然后从清单移除,待主机恢复后,或存储里找到对应vm,在其他主机进行vm重新注册;
2、检查确认是否存在孤立的vm
将主机置于维护模式之前,必须将 ESXi 或 ESX 主机上的所有虚拟机迁移到另一个主机。如果清单中存在孤立的虚拟机,则无法将主机置于维护模式。请务必在尝试将主机置于维护模式之前移除孤立的虚拟机。
“孤立(orphaned)”虚拟机是存在于 vCenter Server 数据库中但不再存在于 ESX 主机清单中的虚拟机。 “无效(invalid)”虚拟机是由于 ESXi 主机脱机或无法访问、VM 配置文件被锁定或损坏或包含错误选项或其他可能原因而无法访问的 VM。
对于孤立的虚拟机,如果可能,需要重新注册虚拟机(如果尚未删除)或从清单中删除。要重新注册虚拟机,请导航到数据存储浏览器中的虚拟机位置,然后将虚拟机重新添加到清单中。如果主机“断开连接”或“无响应”,则该主机上的所有虚拟机都将无法用于 vCenter。
如果 VM 配置文件意外锁定,它可能会在 vCenter 清单中显示为“无效”。要验证是否发生了这种情况,请在数据存储浏览器中导航到相应数据存储的 VM 目录。您应该会看到列出的 VM 配置文件(.vmx 文件)。如果此文件的图标是空白页而不是 VM 图标,则典型原因是 VM 配置被锁定。要验证是否是这种情况,请从 ESXi 主机运行 vmfsfilelockinfo 命令以检查 VM 配置文件是否存在锁定。修复意外文件锁定后,需要从清单中删除 VM 并重新注册或重新加载。
如果缺少虚拟机配置文件,则虚拟机在 vCenter 清单中显示为“无效”。要验证是否发生此问题,请在数据存储浏览器中导航到相应数据存储的虚拟机目录。如果没有扩展名为“.vmx”的虚拟机配置文件(通常是根据虚拟机命名的文件)。如果缺少此文件,但其他文件仍然可用(日志、磁盘等),则可能需要重新创建该文件。有关重新创建虚拟机配置文件的详细信息,请参见 Rebuilding the virtual machine’s .vmx file from vmware.log (1023880)。重新创建虚拟机配置文件后,需要将该虚拟机从清单中移除,然后重新注册或重新加载。
如果虚拟机配置文件存在且已解锁,并且 ESXi 主机在 vCenter Server 清单中可用,则 VMX 可能已损坏或包含无效的选项或文本错误。最常见的原因是,缺少引号、行尾无效或选项无效。要确定选项无效或文本错误的确切原因,重新加载虚拟机配置。有关加载过程的详细信息,请参见https://kb.vmware.com/s/article/1026043;查看 /var/log/hostd.log 检查主机管理代理日志文件:
#tail -n50 /var/log/hostd.log //可看到指示重新加载失败的消息。更正该文件后,再次重新加载虚拟机并确定其是否恢复正常。例如:
info hostd[18267520] [Originator@6876 sub=vm opID=vim-cmd-61-609d user=root] File "/vmfs/volumes/5c182b95-ac4a587e-65f1-90b11c24698d/testVM/testVM.vmx" line 6: Syntax error.
info hostd[18267520] [Originator@6876 sub=Vmsvc.vm:/vmfs/volumes/5c182b95-ac4a587e-65f1-90b11c24698d/testVM/testVM.vmx opID=vim-cmd-61-609d user=root] Failed to load virtual machine
vm不响应故障排查
关闭无法关机的vm:
vim-cmd vmsvc/getallvms (获取所有虚拟机的vmid信息)
关闭虚拟机:vim-cmd vmsvc/power.off 3
打开虚拟机:vim-cmd vmsvc/power.on 3
重启虚拟机:vim-cmd vmsvc/power.reset 3
获取虚拟机的当前状态:vim-cmd vmsvc/power.getstate 3
或者:esxcli vm process list (获取正在运行的虚拟机的信息)
关闭虚拟机: vm process kill --type=hard --world-id=245735 //–type=[soft,hard,force] ,soft程度最低,hard为立即执行,如果依然不能关机那么就只能用force模式。
3、Esxi主机使用命令行进入维护模式:
1)进入维护模式:
方法一:# vim-cmd /hostsvc/maintenance_mode_enter
方法二:# esxcli system maintenanceMode set --enable yes
现场执行后,提示Another task is already in progress;这是因有些虚拟机无法关机导致,手段用命令行关掉后,即可进入维护模式了。
方法三:# vimsh -n -e /hostsvc/maintenance_mode_enter
2)退出维护模式:
方法一:# vim-cmd /hostsvc/maintenance_mode_exit
方法二:# esxcli system maintenanceMode set --enable no
方法三:# vimsh -n -e /hostsvc/maintenance_mode_exit
3)验证主机是否在维护模式:
方法一:# vim-cmd /hostsvc/hostsummary | grep inMaintenanceMode
方法二:# vimsh -n -e /hostsvc/hostsummary | grep inMaintenanceMode