Mostrando entradas con la etiqueta VirtualBox. Mostrar todas las entradas
Mostrando entradas con la etiqueta VirtualBox. Mostrar todas las entradas

jueves, 7 de mayo de 2009

Compactar archivos VDI de VirtualBox

En el portátil del trabajo (a partir de ahora, anfitrión con Windows Xp) utilizo VirtualBox y una máquina virtual (a partir de ahora, huésped con Windows Xp), en la que instalo todas las herramientas de desarrollo que necesito de manera que trabajo desde ella y no desde la máquina anfitriona. Con esto consigo aprovecharme de las ventajas de los snapshot cuando tengo que hacer algún cambio que entraña algún riesgo (porque siempre puedo retroceder al estado anterior) , además que me permite tener un entorno de trabajo (virtual, en este caso) limpio, únicamente con lo imprescindible para desarrollar. Todo lo relacionado con pruebas o novedades lo hago en otro huésped o directamente en el anfitrión. Otra de las ventajas es que puedo coger mi huésped de desarrollo, y ejecutarlo en cualquier anfitrión independientemente de su hardware o de su sistema operativo (lógicamente con VirtualBox instalado) sin necesidad de ningún ajuste en dicho huésped.

Pero a lo que iba, hoy he considerado oportuno hacer una copia de seguridad del archivo vdi (ojo, perdemos los snapshots, ya que se almacenan en otros archivos tal como explico aquí) por si tengo algún problema con el disco duro del equipo anfitrión. Y me encuentro que dicho archivo ocupa más de 8GB (cuando mi intención era grabarlo en un DVD+R DL, aprovechando la grabadora del portátil).

Lo curioso es que aunque el archivo vdi físicamente ocupa esos 8GB (es una imagen dinámica de 10GB, lo que implica que irá creciendo poco a poco hasta alcanzar ese valor) , si iniciamos el huésped y vemos el tamaño del espacio ocupado en la partición, me encuentro que es de poco más de 6GB: así que tengo 4GB libres en dicha partición (recordar que la imagen es dinámica con un límite de 10GB), y 2GB con respecto al archivo de imagen vdi que la contiene (todavía no hubo necesidad de que llegase a su tamaño máximo).

Por suerte, disponemos de la posibilidad de compactar dicho vdi, pero no sin antes tener que realizar algunas operaciones previas:

1.- (Opcional) Dentro del huésped, con una herramienta como CCleaner (o similar), liberamos el espacio que están ocupando temporales y demás información innecesaria.

2.- Dentro del huésped, con una herramienta desfragmentadora de hdd (en este caso he optado por Defraggler, gratuito y de los creadores de CCleaner), desfragmentamos la partición que queremos compactar.

3.- Todavía dentro del huésped, usamos alguna utilidad para sobreescribir con ceros el espacio vacío (libre) dentro de la partición (imprescindible pues sino VirtualBox no conseguirá compactar el vdi). Yo he utilizado SDelete, herramienta gratuita de la empresa Winternals (empresa comprada por Microsoft). Para utilizarla, abrimos una consola donde tengamos descomprimido el archivo descargado , y ejecutamos:
sdelete -c c:
poniendo cuidado de sustituir c: por la letra de la unidad de vuestra imagen virtual.

4.- Apagamos el huésped, cerramos VirtualBox, y ya desde una consola del anfitrión, nos vamos a la carpeta donde tengamos instalado VirtualBox, y ejecutamos VBoxManage.exe. Nos saldrá la lista de parámetros y opciones que admite. A nosotros nos interesa modifyhd. Así que ejecutamos:
VBoxManage.exe modifyhd
y nos saldrá la ayuda de este comando.
Lo que haremos es utilizar la opción --compact, en mi caso:
VBoxManage.exe modifyhd d:\vdi\desarrollo.vdi --compact

Tarda un rato, pero al final conseguimos lo que buscábamos (ojo, pues la opción --compact ha dejado de funcionar a partir de determinada versión de VirtualBox. En la 2.2.2 parecía que estaba resuelto el problema, pero en mi caso el proceso abortó al 80%, aunque consiguiendo compactar casi totalmente el vdi. En todo caso, los desarrolladores conocen tal regresión, y prometen solucionarlo completamente en la versión 2.2.4)

Ahora para finalizar, y con Imgburn (por cierto, ha salido una nueva versión recientemente, la 2.4.4.0) , ya puedo grabar mi imagen vdi sin ningún problema (ocupa 7GB).

sábado, 29 de noviembre de 2008

NS_ERROR_FACTORY_NOT_REGISTERED en VirtualBox OSE

Hoy he instalado VirtualBox 2.0.4 OSE (Open Source Edition) en openSUSE 11.1 RC1 (KDE4), utilizando Yast.

Una vez finalizada la instalación, deberíamos hacer dos cosas:

1.- Añadir nuestro usuario al grupo 'vboxusers', ya que sino solamente podremos ejecutar VirtualBox como usuario root.
  • Podemos hacerlo desde consola, ejecutando como root (comando su):
groupmod --add-user usuario vboxusers

sustituyendo 'usuario' por nuestro nombre de usuario.
  • O bien, desde Yast->Seguridad y usuarios->Gestión de usuarios y grupos, seleccionamos nuestro usuario, pulsamos el botón 'editar', y en la pestaña 'detalles' marcamos el grupo 'vboxusers'.

En ambos casos, debemos de reiniciar para que surta efecto la nueva configuración de usuario.

2.- Tenemos que asegurarnos que se carga el driver 'vboxdrv' al inicio.

  • Desde consola, ejecutamos como root (su):
insserv vboxdrv
  • O bien, desde Yast->Sistema->Servicios del sistema, seleccionamos 'vboxdrv', pulsamos el botón 'activar' y luego 'finalizar'.

Todos esto, con más detalle, podemos encontrarlos aquí.

Hasta este punto, los pasos normales para ejecutar VirtualBox. El problema que me he encontrado es que no arrancaba la aplicación, a no ser que la ejecutase como root. El mensaje de error que lanzaba era:

Receptor RC: NS_ERROR_FACTORY_NOT_REGISTERED (0x80040154) virtualbox

Probando a ejecutarlo desde la consola, muestra lo siguiente:

Cannot create a lock file for '/tmp/.vbox-jmunin-ipc/ipcd'.
Check permissions.

Cannot create a lock file for '/tmp/.vbox-jmunin-ipc/ipcd'.
Check permissions.

Así que el problema es que el usuario no tiene los permisos suficientes en esa ruta. Tenemos tres posibilidades para arreglar el error (optamos por una):

1.- Cambiar los permisos de esa ruta:
sudo chmod 777 /tmp/.vbox-usuario-ipc/
2.- Cambiar el propietario y/o el grupo asociado a esa ruta:
sudo chown usuario /tmp/.vbox-usuario-ipc/
o bien
sudo chown usuario:grupo-usuario /tmp/.vbox-usuario-ipc/
o bien
sudo chgrp grupo-usuario /tmp/.vbox-usuario-ipc/
3.- Más fácil todavía, directamente borramos dicha ruta:
sudo rm -r /tmp/.vbox-usuario-ipc
de lo que no hay que preocuparse, dado que la siguiente ejecución de Virtualbox volverá a crearla, con los permisos correctos.

Optéis por la alternativa que optéis, en cualquier caso, sustituyendo 'usuario' y 'grupo-usuario' por los valores reales.

Ahora probamos de nuevo a ejecutar VirtualBox con nuestro usuario, y ningún problema.


jueves, 4 de septiembre de 2008

VirtualBox: Snapshots (combinar, fusionar o integrar)

Cuando trabamos con máquinas virtuales en VirtualBox, hay que tener claro que trabajamos con dos subconjuntos de archivos. Por un lado, tenemos los archivos que contienen las imágenes propiamente dichas de la máquina virtualizada (los archivos con extensión vdi; un archivo vdi por cada máquina virtual). Si no trabajamos con el concepto de snapshot, aquí se queda la cosa. Lo que hay que tener cuidado es que en el momento que creamos snapshots (instantáneas de la máquina virtual a las que podemos volver), todos los cambios que se hagan a partir de ahora en esa máquina virtual ya no se almacenan en el archivo vdi (padre o raiz) correspondiente, si no en otro archivo (también con extensión vdi) independiente asociado a cada snapshot que tomemos. Para tener esto claro, lo mejor es ir a la pantalla de preferencias de VirtualBox,

donde comprobamos que distingue entre la ubicación de los 'VDI files' padres, y las 'Machines'. En esta última ruta creará una subcarpeta por cada máquina virtual que tengamos, y dentro de ésta, una subcarpeta 'snapshot' donde se guardará un archivo por cada snapshot que saquemos de esa máquina virtual. Mejor verlo visualmente, porque así explicado resulta un 'galimatías':


Pero el motivo de la entrada era recoger un duda que siempre que trabajo con los snapshots de Virtualbox se me plantea:

¿Qué ocurre cuando, después de sacar un snapshot y trabajar con él durante un tiempo, decidimos que en lugar de descartarlo para trabajar con el estado anterior de la máquina (que suele ser lo habitual), queremos combinar o fusionar (merge) la imagen en disco del snapshot con la imagen en disco padre (o la imagen en disco del snapshot anterior, si tenemos varios snapshots anidados)?

Pues para ello seleccionamos el snapshot que queremos fusionar, y ejecutamos la orden 'Discard snapshot' usando el botón de la barra de herramientas correspondiente:


De esta manera conseguimos combinar (referido a la imagen en disco) el contenido del snapshot seleccionado con el vdi o snapshot anterior. Digamos que es una manera de 'dar por bueno' todo el trabajo realizado en el snapshot (en argot de sistema de control de versiones, es como si después de hacer un 'branch', hiciésemos un 'merge' dentro del 'trunk').