Czasami natrafiam na fakt, że pewna maszyna wirtualna na hoście VMWare ESXi zawiesza się i nie można jej w żaden sposób wyłączyć ani zrestartować z interfejsu WWW klienta vSphere. Ponowne uruchomienie całego serwera ESXi z powodu pojedynczej maszyny wirtualnej nie jest całkowicie wskazane (szczególnie jeśli masz tylko jeden host ESXi lub pozostałe serwery w klastrze DRS nie ściągają dodatkowego obciążenia w postaci maszyn wirtualnych z serwera restartu). Rozważmy główne sposoby wymuszenia zatrzymania zamrożonej maszyny wirtualnej w VMWare ESXi.
Jeśli proces maszyny wirtualnej na serwerze ESXi zawiesza się, przestaje odpowiadać na polecenia Resetuj / Wyłącz i podaje jeden z błędów dowolnej akcji:
Próby operacji nie można wykonać w bieżącym stanie
;Kolejne zadanie jest już w toku
;Maszyna wirtualna może wykonywać równoległe operacje. Działania: zakończ równoległą operację i ponów operację wyłączania. Maszyna wirtualna jest w niepoprawnym stanie
.
W takich przypadkach można ręcznie zatrzymać proces maszyny wirtualnej na hoście ESXi z poziomu wiersza poleceń powłoki ESXi Shell lub PowerCLI.
Najpierw określ, na którym hoście ESXi działa zawieszona maszyna wirtualna. Aby to zrobić, znajdź maszynę wirtualną w interfejsie klienta vSphere. Nazwa hosta, na którym działa, jest wskazana na karcie Podsumowanie w sekcji Obiekt powiązany -> Host.
Kliknij nazwę hosta ESXi. Musisz zezwolić na dostęp do niego przez SSH. Idź do Konfiguruj -> Usługi -> Ssh -> Start.
Teraz możesz połączyć się z tym hostem ESXi za pośrednictwem SSH za pomocą klienta szpachli.
Wyświetl listę maszyn wirtualnych działających na hoście ESXi:
Lista procesów vm esxcli
Skopiuj identyfikator żądanej maszyny wirtualnej (identyfikator świata).
Aby zakończyć proces zawieszonej maszyny wirtualnej na hoście ESXi, użyj następującego polecenia:
esxcli vm process kill --type = [soft, hard, force] --world-id = WorldNumber
Jak widać, istnieją trzy typy zakończenia procesów VM:
- Miękkie - najbezpieczniejszy sposób na zakończenie procesu VMX (podobny do kill -SIGTERM);
- Trudne - natychmiastowe zakończenie procesu VM (kill -9);
- Siła - najpoważniejszy tryb zakończenia procesu powinien być używany jako ostatni, jeśli nic więcej nie pomaga.
Spróbujmy delikatnie zatrzymać maszynę wirtualną o określonym identyfikatorze:
proces ESXCLI VM Kill --type = soft -w = 25089429
Maszyna wirtualna powinna zostać zamknięta.
Możesz zatrzymać zamrożoną maszynę wirtualną za pomocą PowerCLI (jest to wygodne, ponieważ podczas łączenia się z vCenter nie musisz szukać hosta, na którym działa maszyna wirtualna i włączyć dostęp SSH). Sprawdź, czy maszyna wirtualna działa:
get-vm „web2” | wybierz nazwę, PowerStates
Wymuś zatrzymanie procesu VM za pomocą polecenia:
stop-vm -kill "web2" -confirm: $ false
Można także zatrzymać zamrożoną maszynę wirtualną za pomocą narzędzia ESXTOP.
W sesji SSH wprowadź polecenie esxtop, następnie kliknij „c”Aby wyświetlić zasoby procesora i Shift + V., wyświetlać tylko procesy maszyn wirtualnych
Następnie kliknij „f”(Wybierz wyświetlane pola),„c”(Wyświetl pole LWID-Leader World ID) i kliknij Enter.
W kolumnie Nazwa znajdź maszynę wirtualną, którą chcesz zatrzymać, i określ jej identyfikator LWID na podstawie odpowiedniej kolumny.
Następnie pozostaje nacisnąć przycisk „k„(zabij) i wybierz identyfikator LWID maszyny wirtualnej, którą chcesz wymusić zamknięcie.
Ostatnim sposobem twardego wyłączenia maszyny wirtualnej jest użycie narzędzia zabić. Ta metoda zatrzyma nie tylko maszynę wirtualną, ale także wszystkie procesy potomne.
Uzyskaj identyfikator procesu nadrzędnego maszyny wirtualnej:
ps | grep „web2”
Zakończ proces:
zabij -9 24288474
Po takim „twardym resecie” zainstalowany system operacyjny uruchomi się w trybie odzyskiwania. W przypadku systemu Windows gościa ekran będzie wyglądał następująco.