¿Cómo asegurarse de que una VM se apague correctamente?

¿Cómo asegurarse de que una VM se apague correctamente?

Mi servidor doméstico ejecuta varios otros servidores a través de VirtualBox en máquinas virtuales.

En particular, tengo un servidor web que, por alguna razón, si no se cierra correctamente, no se selecciona automáticamente en el menú de grub, lo que significa que se bloquea hasta que lo restablezco manualmente en el servidor.

¿Cómo puedo asegurarme de que mi VM se apague correctamente cada vez que se apague mi servidor?

Información adicional: el "servidor" es en realidad una computadora portátil vieja, ejecuta Ubuntu Desktop 11.04 y no es sin cabeza (también ejecuta el centro multimedia).

Respuesta1

Puede utilizar el VBoxManagecomando para controlar sus máquinas virtuales desde la línea de comando. Esto le permite crear una secuencia de comandos que puede apagar su máquina virtual antes de apagarla.

Podrías ejecutar un script muy básico para apagar la máquina virtual y el host...

#!/bin/bash
# poff.sh - poweroff the vm, then the host...

VBoxManage controlvm VMNAME acpipowerbutton && sudo shutdown -P 1

O puede usar los mismos comandos como un alias agregado a su archivo .bashrc...

alias poff='VBoxManage controlvm VMNAME acpipowerbutton && sudo shutdown -P 1' # poweroff the vm, then the host...

Estos son ejemplos muy básicos que se pueden desarrollar para satisfacer sus necesidades exactas. Es posible que también sea necesario modificarlos para que funcionen correctamente con la configuración de su sistema operativo.

Respuesta2

Hice esto usando qemu ejecutándose en Debian que aloja una máquina virtual con Windows Server 2003. Habilité "Servicios de administración de emergencias" en la máquina virtual Win2k3. Esto le proporciona la "Consola de administración especial" en el puerto serie. qemu te permite conectar un puerto serie virtual a un puerto "telnet", así que le di una dirección de host local. El SAC le permite apagar el sistema limpiamente emitiendo un comando a través del puerto serie y, dado que es algo así como una "puerta trasera de emergencia", tiende a ser muy confiable independientemente de lo que pueda estar sucediendo en la VM.

Luego creé un breve expectscript para "iniciar sesión" en el SAC basado en serie y emitir el comando de apagado. Esto estaba incluido en otro script que llamaría a este expectscript y esperaría 2 minutos hasta que finalizara el proceso qemu. Si el proceso no muriera, entonces lo mataría a la fuerza. Configurar Linux para que llame a este script al apagar garantizó que la VM siempre se apagara limpiamente si era posible.

Por lo tanto, es posible que pueda adaptar este método a su situación.

Si tiene una máquina virtual Linux, entonces puede crear un pequeño script en su sistema Ubuntu que inicie sesión en la máquina virtual a través de ssh y llame a un script que apague el sistema correctamente.

información relacionada