vSphere Client üzerinden bir sanal makineyi kapatmak istersiniz ancak kapatamazsınız. Sanal makine cevap vermiyor olabilir, sanal makine kapandıktan sonra vCenter halen çalışıyor olarak görüyor olabilir vs. Aşağıdaki hataların bir veya bir kaçını görüyor olabilirsiniz.
- Soap error 999. The operation is not allowed in current state
- The attempted operation cannot be performed in the current state (Powered Off)
- The request refers to an object that no longer exists or has never existed
Bu gibi durumlarda sanal makineyi kapatmak için komut satırından müdahale etmemiz gerekir. Eğer ESXi host arayüzüne erişebiliyorsak arayüzden, erişemiyorsak DCUI üzerinden SSH bağlantısına izin vermemiz gerekir.
Öncelikle unresponsive durumdaki makinenin hangi ESXi host üzerinde olduğunu bulmalıyız. vSphere client üzerinde Summary sekmesinde bunu görebiliriz. Grafik arayüzden kapatamadığımız sanal makineyi kapatmanın iki yolunu aşağıda göstermeye çalışacağım.
ESXi komut satırı ile
Aşağıdaki komut ile ESXi host üzerindeki tüm VM’leri listeleyebiliriz. Bu listedeki VMID bilgisi bizim için önemli. Bunu not edin.
vim-cmd vmsvc/getallvms

Aşağıdaki komut ile bu VM’in çalışır durumda olup olmadığını kontrol edin.
vim-cmd vmsvc/power.getstate VMID

Sanal makinenin kapanmasını engelleyen bir etken olup olmadığını aşağıdaki komut ile görebilirsiniz. Benim test ortamımda ilgili VM snapshot alıyor.
vim-cmd vmsvc/get.tasklist VMID

Aşağıdaki komut ile ilgili task’ın detaylarını görebilirsiniz.
vim-cmd vimsvc/task_info task_id
vim-cmd vimsvc/task_info haTask-2-vim.VirtualMachine.createSnapshot-207

Burada cancel edilmesi gereken bir task varsa aşağıdaki komut ile cancel edebiliriz.
vim-cmd vimsvc/task_cancel task_id
Ancak dikkat edilmesi gereken nokta, her task’ın cancel edilmeyecek olması. Yukarıdaki ekran görüntüsünde cancelable = true görünüyor. Bu durumda biz bu task’ı normal bir şekilde cancel edebiliriz demektir. Yani, aslında bu task bizim sanal makinemizin kapanmasına engel teşkil etmiyor olabilir. Eğer false olsaydı, cancel edilemez durumda olacaktı ve makineyi kapatmamız gerekecekti.
Aşağıdaki komut ile VM’i kapatıyoruz.
vim-cmd vmsvc/power.shutdown VMID
Eğer shutdown komutu ile yaramazsa aşağıdaki komut ile kapatmaya çalışacağız.
vim-cmd vmsvc/power.off VMID

Yukarıdaki ekran görüntüsünde görüldüğü gibi ilgili sanal makine kapatıldı.
ESXi esxcli komutu ile
Öncelikle çalışan tüm sanal makinelerin World ID ve Display Name bilgilerinin gösterildiği listeyi getiriyoruz.
esxcli vm process list

Unresponsive durumda olan sanal makinenin World ID’sini not ediyoruz.
Daha sonra, aşağıdaki komutlardan biri ile sanal makineyi kapatıyoruz.
esxcli vm process kill -t=soft -w=WorldID
esxcli vm process kill -t=hard -w=WorldID
esxcli vm process kill -t=force -w=WorldID