Comment arrêter en toute sécurité le système d'exploitation invité dans VirtualBox à l'aide de la ligne de commande

70

J'ai Ubuntu 10.10 et j'utilise VirtualBox 3.2. En tant qu'OS invité, j'ai un autre Ubuntu dans la VirtualBox.

Je lance Guest Ubuntu automatiquement en utilisant la commande suivante une fois que mon hôte Ubuntu a démarré:

VBoxHeadless -startvm Ubuntu --vrdp on

Ensuite, je peux y accéder avec ssh ou tsclient.

Maintenant, j'ai besoin d'arrêter automatiquement Guest Ubuntu une fois que j'ai arrêté mon hôte Ubuntu. Est-ce que quelqu'un connaît une méthode sûre pour arrêter automatiquement Guest Ubuntu avec une ligne de commande? J'ai découvert deux façons d'arrêter le système d'exploitation invité, mais je ne sais pas s'il est sécurisé ou non. Les voici:

VBoxManage controlvm Ubuntu acpipowerbutton

ou

VBoxManage controlvm Ubuntu poweroff
Bakhtiyor
la source

Réponses:

57

Si vous ouvrez les préférences de gestion de Gnome Power, vous pouvez définir les actions à exécuter lorsque vous appuyez sur le bouton d'alimentation. Si vous le configurez pour qu'il s'éteigne, il se fermera normalement lorsque vous appuierez sur le bouton d'alimentation virtuel avec la VBoxManage controlvm Ubuntu acpipowerbutton commande.

Egil
la source
16

Pour arrêter en toute sécurité vm, utilisez cette commande:

vboxmanage controlvm Ubuntu poweroff soft
Menzer
la source
9
Pouvez-vous fournir votre source? Il me semble être incapable de trouver quoi que ce soit sur cette option "logicielle" dans le chapitre 8 de la documentation de la VBox.
rbaleksandar
5
Tuer des vms sans méfiance depuis 2013. Peut-être enlever cette réponse? N'importe qui?
Arraché
11

Si vous arrêtez la machine virtuelle lorsque le serveur le fait, vous devez attendre la ou les machines virtuelles.

(Dans ce shellscript, 'root' est l'invocateur et 'l'utilisateur' est le propriétaire de 'thevm')

Je sais que les vms ont fini lorsque la sortie de la commande VBoxManage list runningvmsrenvoie une chaîne vide.

J'utilise ceci dans mon script shell

...
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
la source
9

Ne fais pas ça:

VBoxManage controlvm Ubuntu poweroff

Cela équivaut à débrancher le cordon d’alimentation d’un ordinateur réel. Tu ne veux pas faire ça!

Utilisez la méthode d’arrêt ACPI (vérifiez le paramètre de gestion de l’énergie comme suggéré par Egil) ou savestateessayez peut-être avec la méthode d’état de sauvegarde ( ).

htorque
la source
1
devrait probablement mettre le ne fais pas ça! partie avant la commande. J'ai lu les deux premières lignes et exécuté la commande!
nsane
1
@ nisargshah95 Puis-je vous référer à l'exemple donné par ce fil . Lisez toujours toutes les instructions en premier et faites toujours un effort pour comprendre les commandes avant de les exécuter. C'est particulièrement vrai sous Linux.
Samuel Harmer
2
Je comprends, mais dans le cas le plus courant, après avoir lu la commande, une personne en déduirait que c'est la solution (sans en lire plus)
nsane
Je suis d’accord @nsane - j’ai suggéré une modification afin que cela n’arrive pas aux autres.
Adam K Dean
6

Vous devez éteindre votre Ubuntu virtuel comme vous éteignez votre vrai matériel. À partir d'un commanline sur une session ssh à distance, émettez:

sudo poweroff

Si vous voulez sauvegarder l'état de la machine (similaire à suspendre / hiberner), utilisez le deuxième point de la réponse de @ htorque .

Takkat
la source
-4

J'ai l'habitude d'arrêter la machine virtuelle (Linux) en $ sudo shutdown -h now devinant que c'est la manière la plus élégante de mettre fin à la machine virtuelle car il s'agit d'un arrêt (pas de mise hors tension) qui fournit un temps de grâce et (éventuellement) le message aux utilisateurs qui se connectent.

Woogon Chung
la source
1
La question concerne l'arrêt de l'OS invité à partir de l'hôte. Cela n'aurait pas l'effet escompté si vous l'exécutiez à partir de la machine hôte.
Dave