Estoy ejecutando Windows 7 dentro de Virtualbox en Ubuntu 11.10. Todo funciona bien Lo estoy ejecutando al inicio, pero tengo un problema con el reinicio.
Cuando escribo, sudo reboot now
el estado de Windows 7 virtual no se guarda. Después del reinicio, se inicia virtualbox, pero en lugar de ejecutar Windows, obtengo el menú de inicio de bloqueo de Windows 7 y Windows se inicia nuevamente.
¿Existe alguna opción de que Ubuntu pueda enviar alguna señal a la caja virtual para cerrar de forma segura la instancia antes de reiniciar el host?
fuente
reboot
12.10 dice "Cuando se llama con --force o cuando está en el nivel de ejecución 0 o 6, esta herramienta invoca el sistema reiniciar (2), se llama a sí mismo y reinicia directamente el sistema. De lo contrario, esto simplemente invoca la herramienta de apagado (8) con los argumentos apropiados "; y la página del manualshutdown
dice "Una vez que ha transcurrido el TIEMPO, el apagado envía una solicitud al demonio init (8) para que el sistema baje al nivel de ejecución apropiado".Recomendaría un enfoque más sofisticado que incluye un trabajo inicial, un script de inicio y detención. Como ejemplo, estoy usando Windows XP, ya que mi directorio de inicio permite usar tombert ... que debes cambiar en consecuencia. Tiene la ventaja de lo que sea que haga (reiniciar, apagar, presionar el botón de encendido), maneja su máquina virtual muy bien .
Primero el trabajo inicial, poner en /etc/init/winxpvm.conf:
El trabajo inicial inicia la máquina virtual en el nivel de ejecución 2 (que está en modo gráfico), y en mi caso aumenta la prioridad con
nice
. Para poder apagar la máquina virtual, necesito "deshabilitar" la terminación de inicio utilizando lakill signal SIGCONT
instrucción. Esto deja la máquina virtual ejecutándose al principio (evitando el valor predeterminadoSIGTERM
). Después de 120 segundos,SIGKILL
se envía de todos modos. En cambio, estoy ejecutando elwinxpvm-stop.sh
script.Nota al margen 1: Las estrofas
start on started runlevel [2]
ystop on starting runlevel [!2]
no funcionan. Hay que mencionar específicamente el trabajorc
.Nota al margen 2: Lo que es confuso también en el manual inicial: la
kill signal
estrofa especifica la señal enviada después de 5 segundos. En este ejemplo, lo configuré deSIGTERM
(predeterminado) a SIGCONT, pero no pude cambiar el tiempo de espera de 5 segundos. Lakill timeout
estrofa especifica el tiempo de espera después del cualSIGKILL
se envía, qué señal no se puede cambiar. Por lo tanto, una mejora sería definir nuevas estrofasterm signal
yterm timeout
.Aquí el script de inicio winxpvm-start.sh:
Dado que todas las configuraciones, etc., se realizan en modo de usuario (ya que mi inicio de sesión es tombert ), incluso cuando se ejecuta como root, cambio la cuenta a tombert . El usuario, por supuesto, podría cambiar en la configuración inicial, pero esta solución me deja la opción de iniciar / detener la máquina virtual "a mano" desde la consola.
Lo más interesante es el script de apagado en winxpvm-stop.sh:
Primero hago lo mismo que en el script de inicio: estoy cambiando el usuario de root a mi cuenta tombert . Ahora veamos la función
dostop
. Primero estoy verificando si la máquina virtual está funcionando. Entonces estoy tratando de apagar "suavemente" enviando un apagado directamente a WinXP usandoguestcontrol
. Aquí debe proporcionar las credenciales para la cuenta WinXP, que en mi caso es tombert y una contraseña. Windowsshutdown
cerrará con gracia todas las aplicaciones y apagará el sistema operativo (normalmente). Luego, verifiquemos el estado de la máquina virtual continuamente usandoshowvminfo
. Hacer esto al menos 60 veces con 1 segundo de tiempo de espera (haga lo que considere apropiado aquí) debería dejar a la máquina virtual el tiempo suficiente para apagarse correctamente. Tenga en cuenta que la llamada ashowvminfo
También toma un poco menos de un segundo (al menos en mi computadora), por lo que esto me da ~ 120 segundos en mi caso. Si todo se frena, podemos apagarlo forzosamente usando lapoweroff
declaración.También debería ver el
acpipowerbutton
, pero sin usar. Esto se debe a que no funciona de manera confiable. Si ha iniciado sesión en Windows o, lo que es peor, en varios usuarios, Windows mostrará un diálogo de confirmación de apagado que evitará que el sistema se apague. Esta es también la razón poracpibutton
la/etc/default/virtualbox
cual no funcionará 100% confiable. Ademáspoweroff
, la máquina virtual se apagará por la fuerza, igual que un botón de encendido de larga duración. Por lo tanto, es mejor configurar esto para vaciar:Extracto de / etc / default / virtualbox:
Para que sea perfecto, es posible que desee cambiar el comportamiento del botón de encendido:
Extracto de /etc/acpi/powerbtn.sh:
Queda un pequeño inconveniente. Cuando la máquina virtual todavía se está iniciando y el servicio de control de invitados no está activo (en la máquina virtual), no recibirá el comando de apagado. Un caso raro ... pero piénsalo.
Eso es, espero que ayude.
fuente
VERR_INVALID_PARAMETER
en el lado del host si estoy conectado a través de RDC como el usuario dado en el script, y posteriormente el invitado sigue ejecutándose.Siga esta respuesta para cambiar la política de su sistema para reiniciar
No puedes simplificar esto
reboot
. Losinit.d
scripts AFAIK no funcionarán porque lleva demasiado tiempo, pero puede ejecutar el comando de esta manera:donde
<vm>
está el nombre de la máquina virtualfuente
Puede enviar una solicitud de apagado a la máquina virtual con:
Pero si hace esto en un guión de inicio, el guión no debería salir hasta que se haya completado el apagado. Es posible que podamos detectar eso al sondear el archivo de unidad de VM (.vdi) con
lsof
ofuser
en un bucle. O como una solución económica,sleep 20
puede ser suficiente.Esto es lo que estoy usando actualmente en el bloque cerrado de mi script de inicio:
Cerca de la parte superior del archivo que definí:
Es posible que esto no cierre la aplicación VirtualBox en sí, pero sí espera a que la máquina virtual se cierre por completo. Además, no funciona si la máquina virtual todavía está en proceso de arranque (muchos sistemas operativos ignoran el botón de apagado durante esta fase), o si está emulando un sistema antiguo sin soporte ACPI.
fuente