VirtualBox : automatisation et dépannage
Démarrer une machine au démarrage de l’hôte
Section intitulée « Démarrer une machine au démarrage de l’hôte »Modèle de service (/etc/systemd/system/vbox@.service) : une instance par machine, exécutée par l’utilisateur propriétaire des machines (ici vbox).
[Unit]Description=Machine virtuelle VirtualBox %iAfter=network-online.target vboxdrv.serviceWants=network-online.target
[Service]Type=oneshotRemainAfterExit=yesUser=vboxGroup=vboxExecStart=/usr/bin/VBoxManage startvm %i --type headlessExecStop=/usr/bin/VBoxManage controlvm %i acpipowerbuttonExecStop=/bin/bash -c 'for i in $(seq 1 60); do /usr/bin/VBoxManage list runningvms | grep -q "\"%i\"" || exit 0; sleep 2; done; /usr/bin/VBoxManage controlvm %i poweroff'TimeoutStopSec=150
[Install]WantedBy=multi-user.targetsudo adduser --system --group --home /srv/vms vboxsudo usermod -aG vboxusers vboxsudo systemctl daemon-reloadsudo systemctl enable --now vbox@srv1systemctl status vbox@srv1À l’arrêt de l’hôte, systemd envoie la demande d’arrêt ACPI, attend jusqu’à 120 secondes que la machine ait disparu de la liste des machines en cours, puis coupe brutalement en dernier recours. Les machines doivent avoir été créées par l’utilisateur vbox (même registre). Voir systemd : écrire un service.
Sauvegarde planifiée
Section intitulée « Sauvegarde planifiée »Un minuteur (voir systemd : minuteurs) qui lance un script de sauvegarde :
#!/bin/bashset -euo pipefailvm=srv1dest=/srv/sauvegardesstamp=$(date +%F)
VBoxManage snapshot "$vm" take "sauv-$stamp" --liveVBoxManage export "$vm" -o "$dest/$vm-$stamp.ova" --ovf20 || trueVBoxManage snapshot "$vm" delete "sauv-$stamp"find "$dest" -name "$vm-*.ova" -mtime +7 -deleteSelon la version de VirtualBox, l’export d’une machine en cours d’exécution n’est pas possible : dans ce cas, arrêter la machine avant l’export ou copier le disque du snapshot (voir Snapshots, clones et sauvegarde).
Script utilitaire
Section intitulée « Script utilitaire »#!/bin/bash# vm.sh : démarrer, arrêter, étatset -euo pipefailvm=${2:?machine manquante}case ${1:?commande manquante} in start) VBoxManage startvm "$vm" --type headless ;; stop) VBoxManage controlvm "$vm" acpipowerbutton ;; status) VBoxManage showvminfo "$vm" --machinereadable | grep '^VMState=' ;; *) echo "usage : $0 start|stop|status machine" >&2; exit 2 ;;esacJournaux
Section intitulée « Journaux »tail -n 100 /srv/vms/srv1/Logs/VBox.loggrep -iE "error|fail|VERR" /srv/vms/srv1/Logs/VBox.log | headsudo journalctl -u vbox@srv1 -n 50 --no-pagersudo dmesg | grep -i vboxErreurs fréquentes
Section intitulée « Erreurs fréquentes »| Message | Cause et solution |
|---|---|
Kernel driver not installed (rc=-1908) |
Modules non chargés : sudo modprobe vboxdrv, sudo dkms status, redémarrer après une mise à jour du noyau |
Key was rejected by service |
Secure Boot : inscrire la clé des modules (MOK) ou le désactiver |
VERR_VMX_NO_VMX |
Virtualisation matérielle désactivée (micrologiciel) ou absente |
VERR_VMX_IN_VMX_ROOT_MODE |
KVM ou un autre hyperviseur utilise le processeur : sudo modprobe -r kvm_intel kvm |
NS_ERROR_FAILURE / Callee RC: E_FAIL |
Détail dans VBox.log |
VBoxManage: error: The machine 'srv1' is already locked by a session |
Une session existe déjà (machine démarrée, ou processus bloqué) : VBoxManage list runningvms, ps aux | grep VBox |
Could not find a registered machine |
Mauvais utilisateur (chaque utilisateur a son registre) |
VERR_FILE_NOT_FOUND sur un disque |
Fichier déplacé ou supprimé : corriger le chemin avec storageattach |
Version mismatch Extension Pack |
Réinstaller l’Extension Pack de la même version que VirtualBox |
| Machine « aborted » | Coupure de l’hôte ou arrêt brutal : redémarrer, vérifier les systèmes de fichiers de l’invité |
| Lenteurs | Trop de processeurs ou de mémoire attribués, KVM chargé en parallèle, disque de l’hôte saturé |
Libérer une machine bloquée
Section intitulée « Libérer une machine bloquée »VBoxManage list runningvmsps aux | grep -E '[V]BoxHeadless|[V]irtualBoxVM'kill <PID> # arrêt du processus de la machineVBoxManage startvm srv1 --type headlessAprès une mise à jour du noyau ou de VirtualBox
Section intitulée « Après une mise à jour du noyau ou de VirtualBox »sudo dkms statussudo apt install --reinstall virtualbox-dkmssudo modprobe vboxdrvVBoxManage --versionVBoxManage list extpacksMettre à jour aussi l’Extension Pack et les Guest Additions de l’invité (sudo apt install --only-upgrade virtualbox-guest-utils).
Ubuntu 24.04 et 26.04 : différences à connaître
Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »La procédure est la même. La version de VirtualBox, et donc la compatibilité avec le noyau, dépend de la version d’Ubuntu : après une montée de version, vérifier dkms status et les noms d’options des scripts (--audio-driver, --vrde-port depuis la 7.0). Le service d’exemple suppose que VBoxManage est dans /usr/bin.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Dépannage VirtualBox
- Retour : Installation