Jak bezpiecznie zamknąć system operacyjny gościa w VirtualBox za pomocą wiersza poleceń

70

Mam Ubuntu 10.10 i korzystam z VirtualBox 3.2. Jako system operacyjny gościa mam innego Ubuntu w VirtualBox.

Uruchamiam Guest Ubuntu automatycznie przy użyciu następującego polecenia po uruchomieniu mojego hosta Ubuntu:

VBoxHeadless -startvm Ubuntu --vrdp on

Następnie mogę uzyskać do niego dostęp za pomocą ssh lub tsclient.

Teraz muszę automatycznie wyłączyć gościa Ubuntu po zamknięciu hosta Ubuntu. Czy ktoś zna jakąś bezpieczną metodę automatycznego zamykania Guest Ubuntu za pomocą wiersza poleceń? Znalazłem dwa sposoby zamykania systemu operacyjnego gościa, ale nie jestem pewien, czy są one bezpieczne, czy nie. Oto oni:

VBoxManage controlvm Ubuntu acpipowerbutton

lub

VBoxManage controlvm Ubuntu poweroff
Bakhtiyor
źródło

Odpowiedzi:

57

Jeśli otworzysz preferencje zarządzania energią Gnome, możesz ustawić, jakie działania mają być wykonywane po naciśnięciu przycisku zasilania. Jeśli ustawisz na zamknięcie, zamknie się z wdziękiem po naciśnięciu wirtualnego przycisku zasilania za pomocą VBoxManage controlvm Ubuntu acpipowerbutton polecenia.

Egil
źródło
16

Aby bezpiecznie zamknąć vm użyj tego polecenia:

vboxmanage controlvm Ubuntu poweroff soft
menzer
źródło
9
Czy możesz podać swoje źródło? Wydaje mi się, że nie jestem w stanie znaleźć niczego w tej „miękkiej” opcji w rozdziale 8 dokumentacji VBox.
rbaleksandar
5
Zabijanie niczego nie podejrzewających vms od 2013 roku. Może usuniesz tę odpowiedź? Ktoś?
Uprooted
11

Jeśli zamykasz maszynę wirtualną, gdy robi to serwer, musisz poczekać na maszynę wirtualną

(W tym skoroszycie „root” to wywoływacz, a „użytkownik” jest właścicielem „thevm”)

Wiem, że vms zakończyło się, gdy wynik polecenia VBoxManage list runningvmszwraca pusty ciąg.

Używam tego w moim skrypcie powłoki

...
stop(){
    su -c "VBoxManage controlvm thevm acpipowerbutton" -s /bin/bash theuser
    while [ "`su -c 'VBoxManage list runningvms' -s /bin/bash theuser`" != "" ]
    do
        echo waiting for VMs to shutdown
        sleep 3
    done
}
...
Jorge Sanchez
źródło
9

Nie rób tego:

VBoxManage controlvm Ubuntu poweroff

Odpowiada to wyciągnięciu wtyczki zasilania na prawdziwym komputerze. Nie chcesz tego robić!

Użyj metody zamykania ACPI (sprawdź ustawienie zarządzania energią, jak sugeruje Egil) lub savestatespróbuj metody zapisywania stanu ( ).

htorque
źródło
1
powinienem chyba powiedzieć, nie rób tego! część przed poleceniem. Przeczytałem pierwsze dwa wiersze i uruchomiłem polecenie!
nsane
1
@ nisargshah95 Niech odsyłam do przykładu podanego w tym wątku . Zawsze najpierw przeczytaj wszystkie instrukcje i zawsze staraj się zrozumieć każde polecenie przed jego uruchomieniem. Szczególnie prawdziwe w Linuksie.
Samuel Harmer,
2
Rozumiem, ale w najczęstszym przypadku, po przeczytaniu polecenia, ktoś wywnioskowałby, że jest to rozwiązanie (bez dalszego czytania)
nsane
Zgadzam się @nsane - zasugerowałem edycję, aby nie zdarzyło się to innym.
Adam K Dean
6

Powinieneś wyłączyć swoje wirtualne Ubuntu, tak jak wyłączasz swój prawdziwy sprzęt. Z linii komend w zdalnej sesji ssh:

sudo poweroff

Jeśli chcesz zapisać stan komputera (podobny do zawieszenia / hibernacji), użyj drugiego punktu w odpowiedzi @ htorque .

Takkat
źródło
-4

Zwykle $ sudo shutdown -h now zamykam maszynę wirtualną (Linux) , myślę, że jest to najbardziej łaskawy sposób na zakończenie maszyny wirtualnej, ponieważ jest ona zamykana (nie wyłącza się) i zapewnia czas karencji oraz (ewentualnie) wiadomość dla użytkowników logujących się.

Woogon Chung
źródło
1
Pytanie dotyczy zamknięcia systemu-gościa z hosta. Nie miałoby to ... er ... zamierzonego efektu, jeśli uruchomisz go z komputera hosta.
Dave