J'exécute Windows 7 dans Virtualbox sur Ubuntu 11.10. Tout fonctionne bien. Je l'exécute au démarrage, mais j'ai un problème avec le redémarrage.
Lorsque je tape, sudo reboot now
l'état du virtuel Windows 7 n'est pas enregistré. Après le redémarrage, la virtualbox démarre, mais au lieu de Windows en cours d'exécution, j'obtiens le menu de démarrage de Windows 7 et les fenêtres redémarrent.
Existe-t-il une option permettant à Ubuntu d'envoyer un signal à la boîte virtuelle pour fermer l'instance en toute sécurité avant le redémarrage de l'hôte?
la source
reboot
12.10 indique: "Lorsqu'il est appelé avec --force ou lorsqu'il est au niveau d'exécution 0 ou 6, cet outil appelle lui-même le système de redémarrage (2) et redémarre directement le système. Sinon, cela appelle simplement l'outil d'arrêt (8) avec les arguments appropriés. "; et la page de manuel pourshutdown
indique "Une fois TIME écoulé, l'arrêt envoie une demande au démon init (8) pour ramener le système au niveau d'exécution approprié."Je recommanderais une approche plus sophistiquée, y compris un travail parvenu, un script de démarrage et d'arrêt. Par exemple, j'utilise Windows XP, car mon répertoire personnel permet d'utiliser tombert ... que vous devez modifier en conséquence. Il a l'avantage de tout ce que vous faites (redémarrage, arrêt, pression sur le bouton d'alimentation), il gère bien votre machine virtuelle .
Commencez par le travail parvenu, dans /etc/init/winxpvm.conf:
Le travail parvenu démarre la machine virtuelle au niveau d'exécution 2 (qui est en mode graphique), et dans mon cas, elle augmente la priorité avec
nice
. Afin d'arrêter correctement la machine virtuelle, je dois «désactiver» la terminaison parvenu à l'aide de l'kill signal SIGCONT
instruction. Cela laisse la machine virtuelle en cours d'exécution au début (en évitant la valeur par défautSIGTERM
). Après 120 secondes, leSIGKILL
est envoyé de toute façon. Au lieu de cela, j'exécute lewinxpvm-stop.sh
script.Side-Note 1: Les strophes
start on started runlevel [2]
etstop on starting runlevel [!2]
ne fonctionnent pas. Il faut mentionner spécifiquement le travailrc
.Side-Note 2: Ce qui prête à confusion également dans le manuel du débutant: La
kill signal
strophe spécifie le signal envoyé après 5 secondes. Dans cet exemple, je l'ai définiSIGTERM
(par défaut) sur SIGCONT - mais le délai d'attente de 5 secondes que je n'ai pas pu modifier. Lakill timeout
strophe spécifie le délai d'attente après lequel leSIGKILL
message est envoyé - quel signal ne peut pas changer. Une amélioration serait donc de définir de nouvelles strophesterm signal
etterm timeout
.Voici le script de démarrage winxpvm-start.sh:
Étant donné que tous les paramètres, etc. sont effectués en mode utilisateur (car ma connexion est tombert ), même lorsqu'il est exécuté en tant que root, je change le compte en tombert . L'utilisateur pourrait bien sûr être changé dans la configuration upstart mais cette solution me laisse la possibilité de démarrer / arrêter la machine virtuelle "à la main" depuis la console.
Le plus intéressant est le script d'arrêt dans winxpvm-stop.sh:
Je fais d'abord la même chose que dans le script de démarrage - je change l'utilisateur de root à mon compte tombert . Voyons maintenant la fonction
dostop
. Je vérifie d'abord si la machine virtuelle fonctionne même. Ensuite, j'essaie d'arrêter "doucement" en envoyant un arrêt directement à WinXP en utilisantguestcontrol
. Ici, vous devez fournir les informations d'identification pour le compte WinXP, qui dans mon cas est tombert et un mot de passe. Windowsshutdown
fermera normalement toutes les applications et éteindra le système d'exploitation (normalement). Permet ensuite de vérifier en continu l'état de la machine virtuelleshowvminfo
. Faire cela au moins 60 fois avec un délai d'expiration de 1 seconde (faites ce que vous pensez qu'il est approprié ici) devrait laisser suffisamment de temps à la machine virtuelle pour s'arrêter correctement. Notez que l'appel àshowvminfo
prend également un peu moins d'une seconde (au moins sur mon ordinateur), ce qui lui donne ~ 120 secondes dans mon cas. Si tout freine, nous pouvons arrêter de force en utilisant lapoweroff
déclaration.Vous devriez également voir le
acpipowerbutton
, mais inutilisé. En effet, cela ne fonctionne pas de manière fiable. Si vous êtes connecté à Windows, ou pire encore à plusieurs utilisateurs, Windows affichera une boîte de dialogue d'arrêt de confirmation empêchant le système de s'arrêter. C'est aussi la raison pour laquelle leacpibutton
dans le/etc/default/virtualbox
ne fonctionnera pas à 100% fiable. De plus, lapoweroff
machine virtuelle sera arrêtée de force - comme un bouton d'alimentation appuyé longuement. Par conséquent, il est préférable de définir ce paramètre sur vide:Extrait de / etc / default / virtualbox:
Pour le rendre parfait, vous pouvez changer le comportement du bouton d'alimentation:
Extrait de /etc/acpi/powerbtn.sh:
Il reste un petit inconvénient. Lorsque la machine virtuelle démarre toujours et que le service de contrôle invité n'est pas activé (dans la machine virtuelle), elle ne recevra pas la commande d'arrêt. Un cas rare ... mais pensez-y.
C'est tout, j'espère que ça aide.
la source
VERR_INVALID_PARAMETER
côté hôte si je suis connecté via RDC en tant qu'utilisateur indiqué dans le script, puis l'invité continue de fonctionner.Suivez cette réponse pour modifier votre stratégie système pour le redémarrage
Vous ne pouvez pas rationaliser cela en
reboot
. Lesinit.d
scripts AFAIK ne fonctionneront pas car cela prend trop de temps, mais vous pouvez exécuter la commande comme ceci:où
<vm>
est le nom de la machine virtuellela source
Vous pouvez envoyer une demande d'arrêt à la machine virtuelle avec:
Mais si vous le faites dans un script d'initialisation, le script ne doit pas se terminer tant que l'arrêt n'est pas terminé. Nous pouvons être en mesure de détecter cela en interrogeant le fichier de lecteur de la machine virtuelle (.vdi) avec
lsof
oufuser
en boucle. Ou comme solution de contournement bon marché,sleep 20
peut suffire.Voici ce que j'utilise actuellement dans le bloc de fermeture de mon script d'initialisation:
Près du haut du fichier, j'ai défini:
Cela ne fermera peut-être pas réellement l'application VirtualBox elle-même, mais cela attend la fin de l'arrêt de la machine virtuelle. De plus, cela ne fonctionne pas si la machine virtuelle est toujours en cours de démarrage (de nombreux systèmes d'exploitation ignorent le bouton de mise hors tension pendant cette phase), ou si vous émulez un ancien système sans prise en charge ACPI.
la source