Ich verwende Windows 7 in Virtualbox unter Ubuntu 11.10. Alles funktioniert gut. Ich führe es beim Start aus, habe aber ein Problem mit dem Neustart.
Wenn ich tippe, wird sudo reboot now
der Status des virtuellen Windows 7 nicht gespeichert. Nach dem Neustart startet die Virtualbox, aber anstelle von Windows wird das Absturz-Startmenü von Windows 7 angezeigt, und Windows wird erneut gestartet.
Gibt es eine Option, mit der Ubuntu ein Signal an die virtuelle Box senden könnte, um die Instanz vor dem Neustart des Hosts sicher zu schließen?
quelle
reboot
12.10 heißt es: "Wenn dieses Tool mit --force oder in Runlevel 0 oder 6 aufgerufen wird, ruft es den Systemaufruf reboot (2) selbst auf und startet das System direkt neu. Andernfalls wird einfach das Tool shutdown (8) mit aufgerufen." die entsprechenden Argumente. "; und auf der Manpage fürshutdown
heißt es: "Nach Ablauf der ZEIT sendet das Herunterfahren eine Anforderung an den init (8) -Dämon, um das System auf den entsprechenden Runlevel herunterzufahren."Ich würde einen differenzierteren Ansatz empfehlen, der einen Startjob, ein Start- und Stoppskript umfasst. Als Beispiel verwende ich Windows XP, da in meinem Home-Verzeichnis Tombert verwendet werden kann ... was Sie entsprechend ändern sollten. Es hat den Vorteil, dass alles, was Sie tun (Neustart, Herunterfahren, Drücken des Netzschalters), Ihre virtuelle Maschine gut handhabt .
Zuerst den Startjob in /etc/init/winxpvm.conf:
Der Upstart-Job startet die virtuelle Maschine in Runlevel 2 (im grafischen Modus) und erhöht in meinem Fall die Priorität mit
nice
. Um die virtuelle Maschine ordnungsgemäß herunterzufahren, muss ich die Upstart-Beendigung mithilfe derkill signal SIGCONT
Anweisung "deaktivieren" . Dadurch wird die virtuelle Maschine zunächst ausgeführt (wobei die Standardeinstellung vermieden wirdSIGTERM
). Nach 120 SekundenSIGKILL
wird das trotzdem gesendet. Stattdessen führe ich daswinxpvm-stop.sh
Skript aus.Randnotiz 1: Die Strophen
start on started runlevel [2]
undstop on starting runlevel [!2]
funktionieren nicht. Man muss den Job ausdrücklich erwähnenrc
.Randnotiz 2: Was auch aus dem Upstart-Handbuch verwirrend ist: Die
kill signal
Zeilengruppe gibt das Signal an, das nach 5 Sekunden gesendet wird. In diesem Beispiel habe ich es vonSIGTERM
(Standard) auf SIGCONT gesetzt - aber das 5-Sekunden-Timeout konnte ich nicht ändern. Diekill timeout
Zeilengruppe gibt das Zeitlimit an, nach dem dasSIGKILL
gesendet wird - welches Signal man nicht ändern kann. Eine Verbesserung wäre daher die Definition neuer Strophenterm signal
undterm timeout
.Hier das Startskript winxpvm-start.sh:
Da alle Einstellungen usw. im Benutzermodus vorgenommen werden (da mein Login Tombert ist ), ändere ich das Konto in Tombert , auch wenn es als Root ausgeführt wird . Der Benutzer könnte natürlich in der Upstart-Konfiguration geändert werden, aber diese Lösung lässt mir die Möglichkeit, die virtuelle Maschine "von Hand" über die Konsole zu starten / zu stoppen.
Je interessanter das Shutdown-Skript in winxpvm-stop.sh ist:
Zuerst mache ich dasselbe wie im Startskript - ich ändere den Benutzer von root auf mein Konto tombert . Schauen wir uns nun die Funktion an
dostop
. Zuerst überprüfe ich, ob die virtuelle Maschine überhaupt läuft. Dann versuche ich "sanft" herunterzufahren, indem ich ein Herunterfahren direkt an WinXP mit sendeguestcontrol
. Hier müssen Sie die Anmeldeinformationen für das WinXP-Konto angeben , in meinem Fall Tombert und ein Kennwort. Das Windowsshutdown
schließt ordnungsgemäß alle Anwendungen und schaltet das Betriebssystem (normalerweise) aus. Lassen Sie uns dann den Status der virtuellen Maschine kontinuierlich mit überprüfenshowvminfo
. Wenn Sie dies mindestens 60 Mal mit einer Zeitüberschreitung von 1 Sekunde tun (tun Sie, was Sie für angemessen halten), sollte die virtuelle Maschine genügend Zeit haben, um ordnungsgemäß herunterzufahren. Beachten Sie, dass der Anruf anshowvminfo
dauert auch etwas weniger als eine Sekunde (zumindest auf meinem Computer), so dass es in meinem Fall ~ 120 Sekunden gibt. Wenn alles bremst, können wir mit derpoweroff
Anweisung gewaltsam herunterfahren .Sie sollten auch die sehen
acpipowerbutton
, aber nicht verwendet. Dies liegt daran, dass es nicht zuverlässig funktioniert. Wenn Sie bei Windows angemeldet sind oder noch schlimmer, mehrere Benutzer, zeigt Windows ein Bestätigungsdialogfeld zum Herunterfahren an, das das Herunterfahren des Systems verhindert. Dies ist auch der Grund, warum dieacpibutton
in der/etc/default/virtualbox
nicht 100% zuverlässig funktionieren. Außerdempoweroff
wird die virtuelle Maschine gewaltsam heruntergefahren - genau wie bei einem langen Netzschalter. Daher ist es am besten, dies auf leer zu setzen:Auszug aus / etc / default / virtualbox:
Um es perfekt zu machen, möchten Sie möglicherweise das Verhalten des Netzschalters ändern:
Auszug aus /etc/acpi/powerbtn.sh:
Es gibt noch einen kleinen Nachteil. Wenn die virtuelle Maschine noch bootet und der Gaststeuerungsdienst nicht aktiv ist (in der virtuellen Maschine), wird der Befehl zum Herunterfahren nicht empfangen. Ein seltener Fall ... aber denken Sie darüber nach.
Das ist es, hoffe es hilft.
quelle
VERR_INVALID_PARAMETER
auf der Host-Seite einen zu werfen scheint, wenn ich über RDC als der im Skript angegebene Benutzer angemeldet bin und der Gast anschließend weiter ausgeführt wird.Befolgen Sie diese Antwort, um Ihre Systemrichtlinie für den Neustart zu ändern
Sie können dies nicht rationalisieren
reboot
. AFAIK-init.d
Skripte funktionieren nicht, da sie zu lange dauern. Sie können den Befehl jedoch folgendermaßen ausführen:Wo
<vm>
ist der Name der virtuellen Maschine?quelle
Sie können eine Anforderung zum Herunterfahren an die virtuelle Maschine senden mit:
Wenn Sie dies jedoch in einem Init-Skript tun, sollte das Skript erst beendet werden, wenn das Herunterfahren abgeschlossen ist. Möglicherweise können wir dies erkennen, indem wir die Laufwerksdatei (.vdi) der VM mit
lsof
oderfuser
in einer Schleife abfragen . Oder als billige Problemumgehungsleep 20
kann genügen.Folgendes verwende ich derzeit im Close-Block meines Init-Skripts:
Nahe dem Anfang der Datei, die ich definiert habe:
Dadurch wird die VirtualBox-App möglicherweise nicht geschlossen, es wird jedoch darauf gewartet, dass die VM vollständig heruntergefahren wird. Es funktioniert auch nicht, wenn die virtuelle Maschine noch hochgefahren wird (viele Betriebssysteme ignorieren in dieser Phase die Ausschalttaste) oder wenn Sie ein altes System ohne ACPI-Unterstützung emulieren.
quelle