Usiłuję znaleźć rozwiązanie, aby z wdziękiem zamknąć wszystkie maszyny wirtualne gościa działające w systemie VirtualBox Windows, gdy komputer hosta zostanie zamknięty lub ponownie uruchomiony.
Wydaje się, że najbezpieczniejszą opcją byłoby uruchomienie polecenia „zapisz stan”, gdy host zaczyna się zamykać, ale nie jest jasne, czy host będzie czekać wystarczająco długo, aż maszyny wirtualne zakończą zapisywanie stanu i wyłączy się.
Czy ktoś ma solidne rozwiązanie tego (pozornie podstawowego) problemu?
windows
virtualbox
virtual-machine
virtualization
shutdown
Matt Jenkins
źródło
źródło
Odpowiedzi:
Miałem podobny problem i rozwiązałem go, uruchamiając VirtualBox jako usługę:
http://vboxvmservice.sourceforge.net/
Dzięki VBoxVMService możesz wybrać sposób, w jaki urządzenie ma zostać wyłączone (Zapisz stan, wyłącz zasilanie) i uruchomione. Ponieważ działa jako usługa, system Windows będzie automatycznie czekał na zamknięcie podczas procesu zamykania systemu.
źródło
Niestety nie wydaje się to możliwe w przypadku maszyn wirtualnych uruchamianych za pomocą interfejsu GUI VirtualBox. Mimo że GUI może złapać zdarzenie zamknięcia hosta i zareagować, usługa VirtualBox zostaje zakończona: https://forums.virtualbox.org/viewtopic.php?p=278668#p278668
Jeśli nie potrzebujesz konsoli graficznej, możesz wybrać VBoxHeadlessTray lub VBoxVMService. Obie obsługują automatyczne zapisywanie i wznawianie po wyłączeniu i ponownym uruchomieniu hosta Windows.
VirtualBox 5.0 wprowadza tryb startowy „odłączalny interfejs użytkownika” . Ten tryb uruchamia bezgłową maszynę wirtualną z osobnym procesem interfejsu użytkownika. Wydajność graficzna ulega jednak pogorszeniu, a przyspieszenie 3D nie jest jeszcze obsługiwane. Ale może można to w przyszłości połączyć z VBoxHeadlessTray (VBoxHeadlessTray nie obsługuje jeszcze 5.0). Linki do repozytorium GitHub VBoxHeadlessTray i do odpowiedniego żądania ściągnięcia GitHub w celu dodania obsługi VirtualBox 5 .
Edycja: VBoxVmService również nie obsługuje nowego trybu odłączanego od wersji 5.0. Do tej pory tylko bezgłowy . Dodałem do tego prośbę o funkcję .
źródło
Mam 3 skrypty wsadowe, których używam zamiast przycisków zasilania w menu Start.
do_shutdown.bat (zamknij komputer z 10-sekundowym okresem oczekiwania, aby nie dać vm 10 sekund na zapisanie stanu, ale pozwolić mi anulować zamknięcie w ciągu 10 sekund. Odliczanie rozpoczyna się po zamknięciu vm)
do_reboot.bat (restartuje się natychmiast po zamknięciu vm)
do_cancel.bat (pozwala mi anulować zamknięcie komputera w ciągu 10 sekund. Następnie ponownie uruchamia się vm, ponieważ zostały zamknięte za pomocą do_shutdown.bat)
Zamiast
savestate
ciebie możesz również użyć jednego z poniższychźródło
Przepraszam za spóźnienie na imprezę. Jest na to dokładna odpowiedź, choć wymaga ona trochę wiersza polecenia-foo. Zobacz ten wątek, aby uzyskać więcej informacji: https://forums.virtualbox.org/viewtopic.php?f=6&t=53684#p285540
Polecenie, którego szukasz, to:
„C: \ Program Files \ Oracle \ VirtualBox \ VBoxManage.exe” setextradata GUI „VM NAME” / DefaultCloseAction Shutdown
Tego używam na wielu maszynach wirtualnych, zamknij okno i automatycznie rozpocznie się bezpieczne zamknięcie. Zamknij system Windows i podczas próby zamknięcia wszystkiego będzie czekał na zakończenie tych procesów.
źródło
Miałem podobne pytanie i znalazłem tę stronę. Nie chcę uruchamiać VirtualBox jako usługi, ponieważ mam wiele maszyn wirtualnych do testowania i zwykle wybieram różne do uruchomienia w interfejsie VirtualBox. Kiedy zamykam komputer, denerwujące jest ręczne zapisywanie stanu każdej maszyny wirtualnej. Zastosowanie skryptów do zapisania wszystkich działających maszyn wirtualnych wydaje się w tym przypadku praktycznym rozwiązaniem. Aby uogólnić odpowiedź Daniela F., napisałem te skrypty, które automatycznie zapisują stan wszystkich działających maszyn wirtualnych bez wyraźnego nazywania ich.
saveRunningVMs.bat dla Windows:
saveRunningVMs.sh dla systemu Linux:
źródło
Utworzyłem skrypt Pythona, który zawiesiłby wszystkie działające maszyny wirtualne VirtualBox, a następnie skonfigurowałem system do uruchamiania skryptu podczas wylogowywania jako zaplanowane zadanie.
Nie wiem, jak niezawodna jest ta metoda. Jak zauważyli inni, istnieją ograniczenia dotyczące czasu oczekiwania systemu na zakończenie zadania Winlogon 7002. Ale ja osobiście nie miałem z tym problemu, dając użyteczne stany zapisu, nawet przy wielu działających maszynach wirtualnych na ponad 4 GB ogólnej pamięci RAM maszyny wirtualnej.
Oto kroki, aby to skonfigurować:
python.exe
, na przykładc:\Python27\python.exe
C:\Users\rakslice\Documents\vboxsuspend\vboxsuspend.py
Teraz maszyny wirtualne VirtualBox powinny zostać zawieszone przy wylogowaniu / ponownym uruchomieniu / zamknięciu.
Skrypt Pythona do zamykania systemu znajduje się poniżej:
źródło