ESXi shell 下强制关闭或重启虚拟机
背景:
如果esxi下面某一台vm死机了,并且esxi的控制台卡死不能用,为了不影响同一个esx下其他的vm正常使用,那么我们只能用命令行来关闭或重启此vm,保证一定得安全性和效率。
登陆esxi shell的方法:
1.打开ssh服务,然后通过ssh上去(一般默认是关闭的)
2.通过控制口,打开主机界面,然后按Alt+F1 输入密码也可以进去。
关闭或重启vm的四种方法:
1.通过vim-cmd命令
vim-cmd vmsvc/getallvms (获取所有虚拟机的vmid信息)
[root@vmware02:~] vim-cmd vmsvc/getallvms Vmid Name le Guest OS Version Annotation 14 Vcsa6.7_172.16.1.30 [Nas100_10T] Vcsa6.7_172.16.1.30.vmx other3xLinux64Guest vmx-13 VMware vCenter Server Appliance
关闭虚拟机:
vim-cmd vmsvc/power.off 14
打开虚拟机:
vim-cmd vmsvc/power.on 14
重启虚拟机:
vim-cmd vmsvc/power.reset 14
获取虚拟机的当前状态:
[root@vmware02:~] vim-cmd vmsvc/power.getstate 14 Retrieved runtime info Powered on
2.使用esxcli命令
esxcli vm process list (获取正在运行的虚拟机的信息)
[root@vmware02:~] esxcli vm process list Vcsa6.7_172.16.1.30 World ID: 2100087 Process ID: 0 VMX Cartel ID: 2100086 UUID: 56 4d 51 8b 58 26 1e bc-d3 bf be 23 74 75 9d 4e Display Name: Vcsa6.7_172.16.1.30 Config File: /vmfs/volumes/616fce75-05e03f8f-4b11-90e2ba8a10d0/Vcsa6.7_172.16.1.30/Vcsa6.7_172.16.1.30.vmx
关闭虚拟机:
vm process kill --type=hard --world-id=2100087
type选项有三种关闭虚拟机的模式:soft程度最低,hard为立即执行,force为强制模式。
查看虚拟机有没有被关闭:
esxcli vm process list (如果没有在列表里面的则表示已经关闭了)
3.在esxi上面发送信号来关闭vm
说明:主要是虚拟机能够在命令行下停止相关的进程从而关闭
警告:这个操作对esxi主机有潜在危险,如果你不能正确辨别进程的ID,而误杀了其他的进程,就会导致不可预期的后果。
3.1要知道esxi下面有没有虚拟机在运行可以使用下面的命令:
ps | grep vmx(3列分别是pid,父进程,服务名)
2100086 2100086 vmx
2100094 2100086 vmx-vthread-210
2100095 2100086 vmx-filtPoll:Vcsa6.7_172.16.1.30
2100096 2100086 vmx-vthread-210:Vcsa6.7_172.16.1.30
2100097 2100086 vmx-vthread-210:Vcsa6.7_172.16.1.30
2100098 2100086 vmx-vthread-210:Vcsa6.7_172.16.1.30
2100099 2100086 vmx-vthread-210:Vcsa6.7_172.16.1.30
2100100 2100086 vmx-vthread-210:Vcsa6.7_172.16.1.30
2100101 2100086 vmx-vthread-210:Vcsa6.7_172.16.1.30
2100102 2100086 vmx-vthread-210:Vcsa6.7_172.16.1.30
2100103 2100086 vmx-vthread-210:Vcsa6.7_172.16.1.30
2100104 2100086 vmx-vthread-210:Vcsa6.7_172.16.1.30
2100105 2100086 vmx-vthread-210:Vcsa6.7_172.16.1.30
2100106 2100086 vmx-vthread-210:Vcsa6.7_172.16.1.30
2100107 2100086 vmx-vthread-210:Vcsa6.7_172.16.1.30
2100108 2100086 vmx-mks:Vcsa6.7_172.16.1.30
2100109 2100086 vmx-svga:Vcsa6.7_172.16.1.30
2100110 2100086 vmx-vcpu-0:Vcsa6.7_172.16.1.30
2100113 2100086 vmx-vcpu-1:Vcsa6.7_172.16.1.30
2100114 2100086 vmx-vcpu-2:Vcsa6.7_172.16.1.30
2100115 2100086 vmx-vcpu-3:Vcsa6.7_172.16.1.30
3.2从上面可以看出我的Vcsa6.7这台虚拟机的父进程是2100086,那么我只要把它kill掉就ok了 。即:
终止虚拟机的父进程: kill 2100086
强制终止:kill -9 2100086
3.3用上面的命令进行检测,应该是ok了。