En una ocasión necesité iniciar una máquina virtual virtualbox desde un dispositivo de almacenamiento usb; finalmente encontré como hacerlo http://agnipulse.com/2009/07/boot-your-usb-drive-in-virtualbox/
Realmente es bastante simple, únicamente hay que ejecutar el siguiente comando:
VBoxManage internalcommands createrawvmdk -filename usb.vmdk -rawdisk /dev/sdb -relative
Esto nos creará un fichero usb.vmdk que es un "enlace" a nuestro dispositivo usb. Por esta razón el fichero ocupa unos pocos bytes y no el tamaño completo de nuestro usb. Así pues es necesario que el usb esté conectado mientras queramos usarlo puesto que usb.vmdk es un "enlace" y no una copia del usb.
Una vez creado el vmdk simplemente lo vinculamos con la máquina virtual donde queremos utilizarlo y listo.
He tenido problemas de permisos; para solucionarlo simplemente lo he ejecutado todo como root y después he ejecutado virtualbox también como root. Parece que si no eres root tiene problemas al acceder al dispositivo usb.
Buscar este blog
Mostrando entradas con la etiqueta virtualbox. Mostrar todas las entradas
Mostrando entradas con la etiqueta virtualbox. Mostrar todas las entradas
viernes, 23 de agosto de 2013
domingo, 18 de noviembre de 2012
Problemas Virtuabox en Ubuntu 12.10
He tenido problemas con VirtualBox instalado directamente desde el repositorio APT de Ubuntu 12.10. Al intentar lanzar una de las máquinas virtuales obtuve el siguiente error:
Y sorprendentemente no existía /etc/init.d/vboxdrv, así que decidí como siempre había hecho instalar el .deb publicado en el proyecto virtualbox.
Pero antes tendría que desinstalar todos los paquetes asociados a virtuabox, para desinstalar por completo virtualbox desde apt, recomiendo ejecutes:
Una vez identificados los paquetes que tienes instalados estás preparado para desinstalarlos.
Y para instalarlo:
Ahora si podemos ver que efectivamente falta por instalar linux-headers, este error no lo mostró la instalación desde apt del paquete virtualbox. Para instalar linux-headers ejecutamos:
Y sorprendentemente no existía /etc/init.d/vboxdrv, así que decidí como siempre había hecho instalar el .deb publicado en el proyecto virtualbox.
Pero antes tendría que desinstalar todos los paquetes asociados a virtuabox, para desinstalar por completo virtualbox desde apt, recomiendo ejecutes:
~$ sudo aptitude search virtualbox | grep ^iEsto devolverá todos los paquetes instalados en el sistema que correspondan a virtualbox. Por defecto aptitude no está instalado en Ubuntu 12.10, si quieres utilizarlo tendrás que instalarlo con "sudo apt-get install aptitude"
i A virtualbox - x86 virtualization solution - base binarie
i virtualbox-dkms - x86 virtualization solution - kernel modul
i virtualbox-ose-dkms - transitional package for virtualbox-dkms
i virtualbox-qt - x86 virtualization solution - Qt based use
Una vez identificados los paquetes que tienes instalados estás preparado para desinstalarlos.
~$ sudo aptitude remove virtualbox virtualbox-dkms virtualbox-ose-dkms virtualbox-qt~$ sudo aptitude remove virtualbox virtualbox-dkms virtualbox-ose-dkms virtualbox-qtPara instalarlo sin utilizar APT, primero tenemos que descargarlo. Para ello ejecutamos:
Se ELIMINARÁN los siguientes paquetes:
libgsoap2{u} virtualbox virtualbox-dkms virtualbox-ose-dkms virtualbox-qt
0 paquetes actualizados, 0 nuevos instalados, 5 para eliminar y 0 sin actualizar.
Necesito descargar 0 B de archivos. Después de desempaquetar se liberarán 69,7 MB.
¿Quiere continuar? [Y/n/?]
Se ELIMINARÁN los siguientes paquetes:
libgsoap2{u} virtualbox virtualbox-dkms virtualbox-ose-dkms virtualbox-qt
0 paquetes actualizados, 0 nuevos instalados, 5 para eliminar y 0 sin actualizar.
Necesito descargar 0 B de archivos. Después de desempaquetar se liberarán 69,7 MB.
¿Quiere continuar? [Y/n/?]
wget http://download.virtualbox.org/virtualbox/4.2.4/virtualbox-4.2_4.2.4-81684~Ubuntu~quantal_amd64.deb
Y para instalarlo:
sudo dpkg -i virtualbox-4.2_4.2.4-81684~Ubuntu~quantal_amd64.deb
Seleccionando paquete virtualbox-4.2 previamente no seleccionado
(Leyendo la base de datos ... 181581 ficheros o directorios instalados actualmente.)
Desempaquetando virtualbox-4.2 (de virtualbox-4.2_4.2.4-81684~Ubuntu~quantal_amd64.deb) ...
Configurando virtualbox-4.2 (4.2.4-81684~Ubuntu~quantal) ...
addgroup: El grupo `vboxusers' ya existe como grupo del sistema. Saliendo.
* Stopping VirtualBox kernel modules [ OK ]
* Uninstalling old VirtualBox DKMS kernel modules [ OK ]
* Trying to register the VirtualBox kernel modules using DKMS Error! Your kernel headers for kernel 3.5.0-18-generic cannot be found.
Please install the linux-headers-3.5.0-18-generic package,
or use the --kernelsourcedir option to tell DKMS where it's located
* Failed, trying without DKMS
* Recompiling VirtualBox kernel modules
* Look at /var/log/vbox-install.log to find out what went wrong
Procesando disparadores para ureadahead ...
Procesando disparadores para shared-mime-info ...
Unknown media type in type 'all/all'
Unknown media type in type 'all/allfiles'
Unknown media type in type 'uri/mms'
Unknown media type in type 'uri/mmst'
Unknown media type in type 'uri/mmsu'
Unknown media type in type 'uri/pnm'
Unknown media type in type 'uri/rtspt'
Unknown media type in type 'uri/rtspu'
Procesando disparadores para bamfdaemon ...
Rebuilding /usr/share/applications/bamf.index...
Procesando disparadores para desktop-file-utils ...
Procesando disparadores para gnome-menus ...
Procesando disparadores para hicolor-icon-theme ...
Ahora si podemos ver que efectivamente falta por instalar linux-headers, este error no lo mostró la instalación desde apt del paquete virtualbox. Para instalar linux-headers ejecutamos:
sudo aptitude install linux-headers-genericDespués de instalar linux-headers volvermos a lanzar la instalación de virtualbox y esta vez sí es correcta.
Posiblemente si hubiera instalado linux-headers y el paquete de virtuabox en apt, todo hubiera funcionado correctamente. Pero también es verdad que el paquete de apt virtualbox debería arrastrar dependencia de linux-headers.
sudo dpkg -i virtualbox-4.2_4.2.4-81684~Ubuntu~quantal_amd64.deb
(Leyendo la base de datos ... 205051 ficheros o directorios instalados actualmente.)
Preparando para reemplazar virtualbox-4.2 4.2.4-81684~Ubuntu~quantal (usando virtualbox-4.2_4.2.4-81684~Ubuntu~quantal_amd64.deb) ...
* Stopping VirtualBox kernel modules [ OK ]
Desempaquetando el reemplazo de virtualbox-4.2 ...
Configurando virtualbox-4.2 (4.2.4-81684~Ubuntu~quantal) ...
addgroup: El grupo `vboxusers' ya existe como grupo del sistema. Saliendo.
* Stopping VirtualBox kernel modules [ OK ]
* Uninstalling old VirtualBox DKMS kernel modules [ OK ]
* Trying to register the VirtualBox kernel modules using DKMS [ OK ]
* Starting VirtualBox kernel modules [ OK ]
Procesando disparadores para ureadahead ...
Procesando disparadores para shared-mime-info ...
Unknown media type in type 'all/all'
Unknown media type in type 'all/allfiles'
Unknown media type in type 'uri/mms'
Unknown media type in type 'uri/mmst'
Unknown media type in type 'uri/mmsu'
Unknown media type in type 'uri/pnm'
Unknown media type in type 'uri/rtspt'
Unknown media type in type 'uri/rtspu'
Procesando disparadores para bamfdaemon ...
Rebuilding /usr/share/applications/bamf.index...
Procesando disparadores para desktop-file-utils ...
Procesando disparadores para gnome-menus ...
Procesando disparadores para hicolor-icon-theme ...
martes, 22 de septiembre de 2009
VBoxGuestAdditions para Debian
Es muy útil instalar VBoxGuestAdditions (cliente de virtual box para máquinas virtuales) en las máquinas virtuales que tengas corriendo en un servidor de VirtualBox. Así facilitarás la comunicación entre el Kernel de la máquina virtual y el servidor de máquinas virtuales.
Para instalarlo lo primero que tenemos que hacer es comprobar el Kernel que estamos utilizando en la máquina virtualizada. Para ello ejecutamos:
Una vez sabemos el Kernel que estamos utilizando ejecutaremos el script correspondiente, en nuestro caso:
Es posible que obtengamos el siguiente error:
Esto es porque necesitas las cabeceras del Kernel para poder compilar un modulo, para instalar las cabeceras de nuestro Kernel: (RECUERDA QUE TENDRÁS QUE INSTALAR LAS CABECERAS DEL KERNEL QUE ESTÉS UTILIZANDO)
Una vez instaladas las cabeceras correspondientes a tu Kernel, no tendrías que tener ningún error al ejecutar:
Y después de reiniciar la máquina virtual y ejecutar un "# ps aux", podrás ver un proceso correspondiente al modulo recién compilado.
Ahora el Kernel de tu máquina virtual Debian se comunicará más fácilmente con el Kernel de tu máquina servidora de máquinas virtuales.
Para instalarlo lo primero que tenemos que hacer es comprobar el Kernel que estamos utilizando en la máquina virtualizada. Para ello ejecutamos:
# uname -a
Linux Debian5Nagios 2.6.26-2-686 #1 SMP Thu Mar 26 01:08:11 UTC 2009 i686 GNU/Linux
Una vez sabemos el Kernel que estamos utilizando ejecutaremos el script correspondiente, en nuestro caso:
# ./VBoxLinuxAdditions-x86.run
Es posible que obtengamos el siguiente error:
Verifying archive integrity... All good.
Uncompressing VirtualBox 2.2.2 Guest Additions for Linux installation.................................................................
VirtualBox 2.2.2 Guest Additions installation
Please install the build and header files for your current Linux kernel.
The current kernel version is 2.6.26-2-686
This system does not seem to have support for OpenGL direct rendering.
VirtualBox requires Linux 2.6.27 or later for this. Please see the log
file /var/log/vboxadd-install.log if your guest uses Linux 2.6.27 and you still see this message.
Problems were found which would prevent the Guest Additions from installing.
Please correct these problems and try again.
Esto es porque necesitas las cabeceras del Kernel para poder compilar un modulo, para instalar las cabeceras de nuestro Kernel: (RECUERDA QUE TENDRÁS QUE INSTALAR LAS CABECERAS DEL KERNEL QUE ESTÉS UTILIZANDO)
# aptitude install linux-headers-2.6-686
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Se instalarán los siguiente paquetes NUEVOS:
cpp-4.1{a} gcc-4.1{a} gcc-4.1-base{a} linux-headers-2.6-686 linux-headers-2.6.26-2-686{a}
linux-headers-2.6.26-2-common{a} linux-kbuild-2.6.26{a}
0 paquetes actualizados, 7 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 7254kB de ficheros. Después de desempaquetar se usarán 41,3MB.
¿Quiere continuar? [Y/n/?]
Escribiendo información de estado extendido... Hecho
Des:1 http://ftp.rediris.es lenny/main gcc-4.1-base 4.1.2-25 [207kB]
Des:2 http://ftp.rediris.es lenny/main cpp-4.1 4.1.2-25 [2317kB]
Des:3 http://ftp.rediris.es lenny/main gcc-4.1 4.1.2-25 [417kB]
Des:4 http://ftp.rediris.es lenny/main linux-headers-2.6.26-2-common 2.6.26-19 [3718kB]
Des:5 http://ftp.rediris.es lenny/main linux-kbuild-2.6.26 2.6.26-3 [194kB]
Des:6 http://ftp.rediris.es lenny/main linux-headers-2.6.26-2-686 2.6.26-19 [398kB]
Des:7 http://ftp.rediris.es lenny/main linux-headers-2.6-686 2.6.26+17+lenny1 [2474B]
Descargados 7254kB en 10s (699kB/s).
Seleccionando el paquete gcc-4.1-base previamente no seleccionado.
(Leyendo la base de datos ...
29434 ficheros y directorios instalados actualmente.)
Desempaquetando gcc-4.1-base (de .../gcc-4.1-base_4.1.2-25_i386.deb) ...
Seleccionando el paquete cpp-4.1 previamente no seleccionado.
Desempaquetando cpp-4.1 (de .../cpp-4.1_4.1.2-25_i386.deb) ...
Seleccionando el paquete gcc-4.1 previamente no seleccionado.
Desempaquetando gcc-4.1 (de .../gcc-4.1_4.1.2-25_i386.deb) ...
Seleccionando el paquete linux-headers-2.6.26-2-common previamente no seleccionado.
Desempaquetando linux-headers-2.6.26-2-common (de .../linux-headers-2.6.26-2-common_2.6.26-19_i386.deb) ...
Seleccionando el paquete linux-kbuild-2.6.26 previamente no seleccionado.
Desempaquetando linux-kbuild-2.6.26 (de .../linux-kbuild-2.6.26_2.6.26-3_i386.deb) ...
Seleccionando el paquete linux-headers-2.6.26-2-686 previamente no seleccionado.
Desempaquetando linux-headers-2.6.26-2-686 (de .../linux-headers-2.6.26-2-686_2.6.26-19_i386.deb) ...
Seleccionando el paquete linux-headers-2.6-686 previamente no seleccionado.
Desempaquetando linux-headers-2.6-686 (de .../linux-headers-2.6-686_2.6.26+17+lenny1_i386.deb) ...
Procesando disparadores para man-db ...
Configurando gcc-4.1-base (4.1.2-25) ...
Configurando cpp-4.1 (4.1.2-25) ...
Configurando gcc-4.1 (4.1.2-25) ...
Configurando linux-headers-2.6.26-2-common (2.6.26-19) ...
Configurando linux-kbuild-2.6.26 (2.6.26-3) ...
Configurando linux-headers-2.6.26-2-686 (2.6.26-19) ...
Configurando linux-headers-2.6-686 (2.6.26+17+lenny1) ...
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Escribiendo información de estado extendido... Hecho
Leyendo las descripciones de las tareas... Hecho
Una vez instaladas las cabeceras correspondientes a tu Kernel, no tendrías que tener ningún error al ejecutar:
# ./VBoxLinuxAdditions-x86.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 2.2.2 Guest Additions for Linux installation.......................................................................
VirtualBox 2.2.2 Guest Additions installation
This system does not seem to have support for OpenGL direct rendering.
VirtualBox requires Linux 2.6.27 or later for this. Please see the log
file /var/log/vboxadd-install.log if your guest uses Linux 2.6.27 and you still see this message.
Building the VirtualBox Guest Additions kernel module...
Building the shared folder support kernel module...
Installing the VirtualBox Guest Additions...
Could not find X.org or XFree86 on the guest system. The X Window drivers
will not be installed.
Y después de reiniciar la máquina virtual y ejecutar un "# ps aux", podrás ver un proceso correspondiente al modulo recién compilado.
/usr/sbin/vboxadd-timesync --daemonize
Ahora el Kernel de tu máquina virtual Debian se comunicará más fácilmente con el Kernel de tu máquina servidora de máquinas virtuales.
martes, 9 de junio de 2009
Encender y Apagar máquinas virtuales en el inicio del sistema
Con este script podrás iniciar y apagar todas las máquinas virtuales de tu granja de servidores virtuales VirtualBox, sin preocuparte de corromper las máquinas virtuales al apagar la máquinas hospedadora.
Utilizo -type vrdp para no lanzarlas sobre ningún entorno gráfico. Las consolas serán accesibles desde la red.
Para apagar las máquinas windows utilizo el comando net rpc SHUTDOWN -t 0 -C "Apagado desde el servidor de maquinas vituales" -f -I xxx.xxx.xxx.xxx -U Administrador%password para el apagado desde la red de una máquina windows. Me ha pasado que en algunas máquinas no he sido capaz de que funcione, pero en otras sí. No soy un experto en windows así que si alquien sabe porqué puede pasar esto que deje un comentario.
Las máquinas Gnu/Linux normalmente se apagarán correctamente con la opción VBoxManage controlvm Suse10serverOracle10g acpipowerbutton.
No os preocupéis, he pensado en todo. Las maquinas tardan un tiempo en apagarse, el script está programado para esperar 60 segundos. Y después guardará el estado de todas las máquinas virtuales, por si alguna no se apagó correctamente (VBoxManage controlvm Win2003serverMSSql savestate).
Definir el fichero /etc/init.d/maquinasvirtuales.bash:
Utilizo -type vrdp para no lanzarlas sobre ningún entorno gráfico. Las consolas serán accesibles desde la red.
Para apagar las máquinas windows utilizo el comando net rpc SHUTDOWN -t 0 -C "Apagado desde el servidor de maquinas vituales" -f -I xxx.xxx.xxx.xxx -U Administrador%password para el apagado desde la red de una máquina windows. Me ha pasado que en algunas máquinas no he sido capaz de que funcione, pero en otras sí. No soy un experto en windows así que si alquien sabe porqué puede pasar esto que deje un comentario.
Las máquinas Gnu/Linux normalmente se apagarán correctamente con la opción VBoxManage controlvm Suse10serverOracle10g acpipowerbutton.
No os preocupéis, he pensado en todo. Las maquinas tardan un tiempo en apagarse, el script está programado para esperar 60 segundos. Y después guardará el estado de todas las máquinas virtuales, por si alguna no se apagó correctamente (VBoxManage controlvm Win2003serverMSSql savestate).
Definir el fichero /etc/init.d/maquinasvirtuales.bash:
#!/bin/bash
echo "Script de iniciado/apagardo de máquinas virtuales"
case $1 in
start)
echo "Iniciando máquinas vituales, espere a que inicien los sistemas..."
VBoxManage startvm Win2003serverMSSql -type vrdp
VBoxManage startvm Suse10serverOracle10g -type vrdp
VBoxManage startvm Debian5Nagios -type vrdp
;;
stop)
echo "Parando máquinas vituales, espere a que termien de apagar los sistemas..."
# apagar windows desde la red (Win2003serverMsSQL)
net rpc SHUTDOWN -t 0 -C "Apagado desde el servidor de maquinas vituales" -f -I xxx.xxx.xxx.xxx -U Administrador%password
# apagar como si pulsaras una vez el botón de apagar (aparagá correctamente)
VBoxManage controlvm Suse10serverOracle10g acpipowerbutton
VBoxManage controlvm Debian5Nagios acpipowerbutton
# espernado un tiempo prudencial para dar tiempo a las maquinas virtuales a que se apaguen
for i in `seq 1 60`; do
sleep 1
echo -n "."
done
# si no se apagaron las máquinas guardamos su estado, así no corromperemos los sistemas de ficheros
VBoxManage controlvm Win2003serverMSSql savestate
VBoxManage controlvm Debian5Nagios savestate
VBoxManage controlvm Suse10serverOracle10g savestate
echo "sistemas apagados"
;;
restart)
/etc/init.d/maquinasvirtuales.bash stop
/etc/init.d/maquinasvirtuales.bash start
;;
*)
echo "Usa: /etc/init.d/maquinasvirtuales.sh {start|stop|restart}"
;;
esac
martes, 5 de mayo de 2009
Eliminar disco duro VirtualBox
Sabemos como registrar discos duros virtuales que vienen de otros servidores de virtualización, también hemos creado discos duros desde cero y hemos hecho instalaciones directamente desde el servidor de virtualización.
Pero ¿Cómo borramos o desregistramos un disco duro que hemos registrado en nuestro sistema VirtualBox?, la respuesta a esta pregunta es poco elegante pero efectiva.
VirtualBox es sus versiones más actuales dispone un comando muy útil para la administración "VBoxManager list < vms |runningvms |ostypes |hostdvds |hostfloppies |hostifs |hostinfo |hddbackends |hdds |dvds |floppies |usbhost |usbfilters |systemproperties >" con este comando podremos ver entre otras cosas los identificadores de las máquinas virtuales que están corriendo, las máquinas virtuales registradas o el listado de discos duros registrados.
Disponemos también de comandos para parar y arrancar máquinas virtuales, así como para borrar máquinas virtuales, pero no tenemos comandos para borrar o desregistrar discos duros virtuales.
VirtualBox tiene un fichero .xml donde almacena toda esta información. Este se encuentra en el home del usuario donde se ha instalado VirtualBox en mi caso "/root/.VirtualBox/VirtualBox.xml".
En esto fichero no te costará encontrar la linea que corresponden al disco duro virtual que deseas borrar, ya que en esa misma linea vienen definida la ruta donde se encuentra el disco duro virtual que registraste. Si quitas esta linea ya no tendrás registrado tu disco duro y cuando lo borres con un "rm" no tendrás rastro de él.
Pero ten cuidado de no borrar un disco que esté asociado a una máquina virtual, si lo haces cuando intentes arrancar la máquina virtual está lanzará un error al no encontrar el disco.
Pero ¿Cómo borramos o desregistramos un disco duro que hemos registrado en nuestro sistema VirtualBox?, la respuesta a esta pregunta es poco elegante pero efectiva.
VirtualBox es sus versiones más actuales dispone un comando muy útil para la administración "VBoxManager list < vms |runningvms |ostypes |hostdvds |hostfloppies |hostifs |hostinfo |hddbackends |hdds |dvds |floppies |usbhost |usbfilters |systemproperties >" con este comando podremos ver entre otras cosas los identificadores de las máquinas virtuales que están corriendo, las máquinas virtuales registradas o el listado de discos duros registrados.
Disponemos también de comandos para parar y arrancar máquinas virtuales, así como para borrar máquinas virtuales, pero no tenemos comandos para borrar o desregistrar discos duros virtuales.
VirtualBox tiene un fichero .xml donde almacena toda esta información. Este se encuentra en el home del usuario donde se ha instalado VirtualBox en mi caso "/root/.VirtualBox/VirtualBox.xml".
En esto fichero no te costará encontrar la linea que corresponden al disco duro virtual que deseas borrar, ya que en esa misma linea vienen definida la ruta donde se encuentra el disco duro virtual que registraste. Si quitas esta linea ya no tendrás registrado tu disco duro y cuando lo borres con un "rm" no tendrás rastro de él.
Pero ten cuidado de no borrar un disco que esté asociado a una máquina virtual, si lo haces cuando intentes arrancar la máquina virtual está lanzará un error al no encontrar el disco.
Problemas al intentar borrar una máquina virtual de VirtualBox
Es muy posible que cuando intentas borrar una máquina virtual de VirtualBox tengas este error.
Esto pasa cuando intentas borrar una máquina virtual que está asociada a un disco duro virtual. La verdad que los desarrolladores de VirtualBox podrían poner un modificador --force para forzar el borrado incluso de los discos duros asociados, pero mientras lo hacen y no hay que hacerlo poco a poco.
Primero tendrás que quitar la relación entre máquina virtual y disco duro, es decir, dejar la máquina virtual sin disco duros asociados. En mi caso solo tenía un disco duro, pero podría darse el caso de tener más de un disco asociado a la máquina virtual.
Una vez desconectado el disco de la máquina virtual, podrás borrar la máquina sin problemas. Pero recuerda que aún tienes el disco duro registrado en el sistema de máquinas virtuales VirtualBox.
# VBoxManage unregistervm Win2003Server -delete
VirtualBox Command Line Management Interface Version 2.1.4
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.
[!] FAILED calling a->virtualBox->UnregisterMachine(uuid, machine.asOutParam()) at line 791!
[!] Primary RC = VBOX_E_INVALID_OBJECT_STATE (0x80BB0007) - Current object state prohibits operation
[!] Full error info present: true , basic error info present: true
[!] Result Code = VBOX_E_INVALID_OBJECT_STATE (0x80BB0007) - Current object state prohibits operation
[!] Text = Cannot unregister the machine 'Win2003Server' because it has 1 hard disks attached
[!] Component = Machine, Interface: IMachine, {ea6fb7ea-1993-4642-b113-f29eb39e0df0}
[!] Callee = IVirtualBox, {339abca2-f47a-4302-87f5-7bc324e6bbde}
Esto pasa cuando intentas borrar una máquina virtual que está asociada a un disco duro virtual. La verdad que los desarrolladores de VirtualBox podrían poner un modificador --force para forzar el borrado incluso de los discos duros asociados, pero mientras lo hacen y no hay que hacerlo poco a poco.
Primero tendrás que quitar la relación entre máquina virtual y disco duro, es decir, dejar la máquina virtual sin disco duros asociados. En mi caso solo tenía un disco duro, pero podría darse el caso de tener más de un disco asociado a la máquina virtual.
# VBoxManage modifyvm Win2003Server -hda none
VirtualBox Command Line Management Interface Version 2.1.4
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.
Una vez desconectado el disco de la máquina virtual, podrás borrar la máquina sin problemas. Pero recuerda que aún tienes el disco duro registrado en el sistema de máquinas virtuales VirtualBox.
# VBoxManage unregistervm Win2003Server -delete
VirtualBox Command Line Management Interface Version 2.1.4
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.
miércoles, 25 de febrero de 2009
Liberar espacio en VDIs de VirtualBox
Ya hemos visto como instalar VirtualBox y como crear máquinas virtuales, estas máquinas virtuales las instalábamos en discos virtuales (con extensión .vdi) que creamos con un tamaño máximo (VBoxManage createvdi -filename Disco1.vdi -size 30000 -register).
Podemos observar que el tamaño del fichero que contiene el disco virtual va creciendo conforma vamos instalando cosas en la máquina virtual. Pero ¿qué pasa cuando borro cosas de mi máquina virtual? lamentablemente el fichero .vdi continua ocupando el mismo espacio. Esto puede ser perjudicial para nuestro sistema, ya que teníamos previsto que pudiera llegar a 30GB pero no es molesto trabajar con ficheros tan grandes. Sobre todo si tenemos que hacer copias de seguridad de las máquinas virtuales.
Aquí tengo una solución para máquinas virtuales Microsoft Windows. En mi caso es un Windows 2003 Server, en el que puedo ver desde el sistema virtualizado que solo tiene ocupado 5GB, pero desde el sistema hospedador llega a 8.3GB.
Para solucionar este problema de espacio necesitamos descargar nullfile-1.2.exe, según he encontrado en está web, para Linux hay que descargar zerospace.c y compilarlo. Pero personalmente aún no lo he probado.
Para utilizar nullfile-1.2.exe, recomiendan desfragmentar un par de veces el disco virtualizado desde la máquina virtual y después ejecutarlo desde la máquina virtual. Cuando lo ejecutas se lanza un proceso que tarda algunos minutos, supongo que dependerá del tamaño del disco.
Una vez que ha terminado la ejecución apagas la máquina virtual y desde la máquina hospedadora ejecutas VBoxManage modifyvdi < disco virtual (.vdi) > compact, y este es el resultado.
Como podéis ver el tamaño de mi fichero .vdi ha sido reducido considerablemente. He pasado de tener un fichero de 8.3GB a uno de 4.4GB. Ahora mis backup son mucho menos pesado, así que tardo menos tiempo en hacerlos.
Podemos observar que el tamaño del fichero que contiene el disco virtual va creciendo conforma vamos instalando cosas en la máquina virtual. Pero ¿qué pasa cuando borro cosas de mi máquina virtual? lamentablemente el fichero .vdi continua ocupando el mismo espacio. Esto puede ser perjudicial para nuestro sistema, ya que teníamos previsto que pudiera llegar a 30GB pero no es molesto trabajar con ficheros tan grandes. Sobre todo si tenemos que hacer copias de seguridad de las máquinas virtuales.
Aquí tengo una solución para máquinas virtuales Microsoft Windows. En mi caso es un Windows 2003 Server, en el que puedo ver desde el sistema virtualizado que solo tiene ocupado 5GB, pero desde el sistema hospedador llega a 8.3GB.
/hdc# ls -lh
total 8,3G
-rw------- 1 root root 8,4G 2009-02-25 10:44 win2003server.vdi
Para solucionar este problema de espacio necesitamos descargar nullfile-1.2.exe, según he encontrado en está web, para Linux hay que descargar zerospace.c y compilarlo. Pero personalmente aún no lo he probado.
Para utilizar nullfile-1.2.exe, recomiendan desfragmentar un par de veces el disco virtualizado desde la máquina virtual y después ejecutarlo desde la máquina virtual. Cuando lo ejecutas se lanza un proceso que tarda algunos minutos, supongo que dependerá del tamaño del disco.
Una vez que ha terminado la ejecución apagas la máquina virtual y desde la máquina hospedadora ejecutas VBoxManage modifyvdi < disco virtual (.vdi) > compact, y este es el resultado.
/hdc# VBoxManage modifyvdi /hdc/win2003server.vdi compact
VirtualBox Command Line Management Interface Version 1.6.6
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.
Shrinking '/hdc/win2003server.vdi': 0%...........10%..........20%..... ....70%..........80%..........90%..........100%
/hdc# ls -lh
total 4,4G
-rw------- 1 root root 1,6K 2009-02-25 11:18 2009-02-25-10-12-21.036-VBoxManage-3493.log
-rw------- 1 root root 4,4G 2009-02-25 11:18 win2003server.vdi
Como podéis ver el tamaño de mi fichero .vdi ha sido reducido considerablemente. He pasado de tener un fichero de 8.3GB a uno de 4.4GB. Ahora mis backup son mucho menos pesado, así que tardo menos tiempo en hacerlos.
martes, 30 de diciembre de 2008
Error al arrancar máquinas virtuales

Dicen que una imagen vale más que mil palabras, así que por eso cuelgo esta imagen. Muestra un error que nos devuelve VirtualBox al intentar arrancar una máquina virtual.
Esto nos pasa cuando hemos actualizado el kernel del sistema. Así que tendremos que ejecutar sudo /etc/init.d/vboxdrv setup, al ejecutarlo verás que recompila un módulo de VirtualBox en el kernel.
* Stopping VirtualBox kernel module * done.Una vez que se ha recompilado el módulo y se ha iniciado el servicio vboxdrv, vuelve a intentar arrancar la máquina virtual y verás que funciona sin problemas.
* Recompiling VirtualBox kernel module * done.
* Starting VirtualBox kernel module * done.
jueves, 27 de noviembre de 2008
vdi is already registered
Es posible que algún día necesitemos restaurar una copia de una máquina virtual que teníamos instala. O simplemente pretendemos copiar una máquina virtual para tener dos y no tener que esperar el tiempo de instalación.
Para hacer esto tenemos que registrar el fichero.vdi en el servidor de VirtualBox. Para hacer esto haremos:
Para hacer esto tenemos que registrar el fichero.vdi en el servidor de VirtualBox. Para hacer esto haremos:
VBoxManage registerimage disk fichero.vdi -type normalSi este fichero.vdi ya ha estado funcionando en este servidor de VirtualBox no mostrará el siguiente error.
VirtualBox Command Line Management Interface Version 1.6.6Para solucionar esto podemos clonar el fichero.vdi, de forma que le asignará un nuevo identificador y podremos registrar el fichero.vdi resultante.
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.
[!] FAILED calling virtualBox->RegisterHardDisk(hardDisk) at line 6478!
[!] Primary RC = NS_ERROR_INVALID_ARG (0x80070057) - Invalid argument value
[!] Full error info present: true , basic error info present: true
[!] Result Code = NS_ERROR_INVALID_ARG (0x80070057) - Invalid argument value
[!] Text = A hard disk with UUID {xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} or with the same properties ('fichero.vdi') is already registered
[!] Component = VirtualBox, Interface: IVirtualBox, {xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx}
[!] Callee = IVirtualBox, {xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx}
VBoxManage clonevdi DiscoAClonar.vdi DiscoResultante.vdiUna vez terminado el proceso de clonación podremos registrar el nuevo fichero.vdi.
VirtualBox Command Line Management Interface Version 1.6.6
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
VBoxManage registerimage disk DiscoResultante.vdi -type normal
viernes, 14 de noviembre de 2008
Administración de máquinas virtuales
Encender máquinas virtuales
Para encender una máquina virtual desde línea de comandos en un servidor sin entorno gráfico.VBoxManage startvm winxp -type vrdp
Apagar máquinas virtuales
Para apagar las máquinas virtuales tenemos varias opciones, he probado con una máquina virtual Debian y la opción acpipowerbutton hace como si en una máquina física apretásemos una vez el botón de encendido. Esto envía una señal al sistema para que detenga todos los procesos y ser apague correctamente.VBoxManage controlvm Debian acpipowerbuttonOtra opción para apagar una máquina virtual es poweroff, yo llamo a esto "el botonazo", básicamente esto lo que hace es "cortarle la corriente eléctrica" a la máquina virtual y no deja que el sistema se apague correctamente.
VBoxManage controlvm winxp poweroffEsto me llevó a buscar algún método para apagar una máquina Window$ que no responde a una petición acpipowerbutton y sin tener que usar el llamado "botonazo".
Pues encontré una solución muy buena. Con esta instrucción podemos apagar un servidor Window$ sin necesidad de estar conectado, simplemente ejecutando el comando desde el servidor de máquinas virtuales. Donde pongo "xxx.xxx.xxx.xxx" hay que poner la IP de la máquina Window$ que pretendemos apagar. Donde pongo "-U Administrador%1234", Administrador es el usuario con permisos para apagar la máquina y 1234 es la clave del usuario Administrador.
net rpc SHUTDOWN -t 0 -C "Apagado desde el servidor de maquinas vituales" -f -I xxx.xxx.xxx.xxx -U Administrador%1234
Registro de discos duros
Hay que tener mucho cuidado con el tipo de registro que hacemos de un disco duro virtual, porque si lo hacemos inmutable no se modificará su estado. Es decir, cuando instalemos algo y apaguemos y volvamos a encender la máquina virtual, todo se quedará como al principio.Esto puede ser muy útil cuando tenemos una máquina virtual en la que queremos hacer alguna prueba de configuración pero queremos probar pudiendo volver al estado anterior.
VBoxManage registerimage disk winxp.vdi -type immutable
VBoxManage registerimage disk winxp.vdi -type normal
Montar una imagen ISO
Ya que tenemos una unidad virtual de DVD, podríamos montarla con una imagen ISO. Es sencillo, simplemente tenemos que decirle cual es la máquina virtual y donde está la ISO. Cuando volvamos a encender la máquina virtual veremos que dentro del lector de DVD tenemos los datos que contienen la ISO.VBoxManage modifyvm winxp -dvd /home/usuario/misISOs/PoInT_v7.iso
jueves, 13 de noviembre de 2008
Creación de máquina virtual desde linea de comandos
Podréis encontrar en muchos sitios web como crear máquinas virtuales desde el asistente gráfico que incorpora VirtualBox. Dejo algunos enlaces para el que prefiera crearlas desde entorno gráfico.
crear-maquinas-virtuales-en-debian-etch-con-virtualbox
crear-una-maquina-virtual-virtual-box
crear-maquina-virtual-para-instalar
Yo personalmente prefiero administrar siempre los servidores desde linea de comandos, así que publico como crear máquinas virtuales desde la linea de comandos.
Lamentablemente necesitaba virtualizar una máquina window$ así que son los comandos que usaré para publicar este post.
Lo primero será crear la máquina virtual dándole un nombre y registrándola en nuestro VirtualBox.
Una vez creada iremos lanzando modificaciones para tener una configuración más concreta de nuestra máquina virtual.
Yo ya tenía una imagen de un window$ XP, así que vamos a reciclarla en esta máquina. Y así nos ahoramos el tiempo de instalación.
Lo primero que hay que hacer para asociar un disco virtual a una máquina virtual es registrar el disco en nuestro VirtualBox.
Después asociamos el disco a la máquina virtual.
Le asignamos a la máquina virtual 1GB de memoria RAM que cogerá de la máquina servidora.
A mí personalmente no me gusta dejar el puerto de VRDP por defecto, así que lo modifico para que esta máquina virtual escuche en otro puerto distinto. Además si pretendemos tener más de una máquina virtual en el mismo servidor, no podremos iniciarlas a la vez si el puerto VRDP es el mismo.
Configuramos la tarjeta de red con NAT sobre la máquina servidora.
Una vez hecho todo esto ya tendríamos la máquina preparada para correr. Y podríamos iniciarla ejecutando:
Si queremos entrar dentro de la consola de nuestra máquina servidora usamos el comando rdesktop, donde pongo las xxx.xxx.xxx.xxx tendrás que poner la IP de tu servidor de VirtualBox.
Ya puedes usar tu máquina Window$ corriendo en un servidor GNU/Linux con VirtualBox.
Todo esto está muy bien, pero será más cómodo la esa máquina virtual tenga su propia IP dentro de nuestra Red y que la máquina servidora sea transparente. Para esto tendremos que hacer algunas modificaciones en nuestro sistema y en nuestra máquina virtual.
Lo primero que haremos será modificar nuestro fichero /etc/network/interfaces. Tendremos la configuración una nueva tarjeta "virtual" que hará un puente entre nuestra tarjeta de red que utilicemos.
Después de reiniciar las interfaces (/etc/init.d/networting restart) hacemos un ifconfig y veremos las dos tarjetas, la virtual con si propia IP asignada por el DHCP y la eth0 también con su propia IP.
Ahora vamos a crear una nueva tarjeta de red de VirtualBox que estará enlazada con la br0 que hemos creado. Para ello tenemos que parar un servicio de VirtualBox que administra las conexiones de red de las máquinas virtuales. Crear la tarjeta VirtualBox y después volver a encender el administrador de redes VirtualBox.
Las tarjetas de red de VirtualBox están asociadas a un usuario, yo corro los servicios de VirtualBox con root, si preferís correrlos con otro usuario, tendréis que darles permisos al fichero /dev/net/tun.
Ahora al hacer ifconfig veremos además de nuestra lo, eth0 y br0 la nueva tarjeta vbox0.
Solo nos falta asignar esta vbox0 para que la use directamente nuestra máquina virtual.
vbox0 no puedes configurarla desde el servidor de máquinas virtuales, la configuración de IP y puerta de enlace tendrás que hacerla dentro de la máquina virtual.
Es posible que necesitemos tener un disco secundario para usar como almacen dentro de nuestra máquina virtual. Son un par de pasos muy sencillos.
Creamos el fichero .vdi con un tamaño máximo (30GB) y lo registramos dentro de nuestro servidor VirtualBox. Y después asociamos ese disco a la máquina virtual que prefiramos. Una vez hecho esto iniciamos la máquina virtual y será dentro de la máquina virtual donde tendremos que crearle una partición y formatearla.
crear-maquinas-virtuales-en-debian-etch-con-virtualbox
crear-una-maquina-virtual-virtual-box
crear-maquina-virtual-para-instalar
Yo personalmente prefiero administrar siempre los servidores desde linea de comandos, así que publico como crear máquinas virtuales desde la linea de comandos.
Lamentablemente necesitaba virtualizar una máquina window$ así que son los comandos que usaré para publicar este post.
Lo primero será crear la máquina virtual dándole un nombre y registrándola en nuestro VirtualBox.
VBoxManage createvm -name winxp -register
Una vez creada iremos lanzando modificaciones para tener una configuración más concreta de nuestra máquina virtual.
Yo ya tenía una imagen de un window$ XP, así que vamos a reciclarla en esta máquina. Y así nos ahoramos el tiempo de instalación.
Lo primero que hay que hacer para asociar un disco virtual a una máquina virtual es registrar el disco en nuestro VirtualBox.
VBoxManage registerimage disk winxp.vdi -type normal
Después asociamos el disco a la máquina virtual.
VBoxManage modifyvm winxp -hda winxp.vdi
Le asignamos a la máquina virtual 1GB de memoria RAM que cogerá de la máquina servidora.
VBoxManage modifyvm winxp -memory 1024
A mí personalmente no me gusta dejar el puerto de VRDP por defecto, así que lo modifico para que esta máquina virtual escuche en otro puerto distinto. Además si pretendemos tener más de una máquina virtual en el mismo servidor, no podremos iniciarlas a la vez si el puerto VRDP es el mismo.
VBoxManage modifyvm winxp -vrdpport 3390
Configuramos la tarjeta de red con NAT sobre la máquina servidora.
VBoxManage modifyvm winxp -nic1 nat -cableconnected1 on
Una vez hecho todo esto ya tendríamos la máquina preparada para correr. Y podríamos iniciarla ejecutando:
VBoxManage startvm winxp -type vrdp
Si queremos entrar dentro de la consola de nuestra máquina servidora usamos el comando rdesktop, donde pongo las xxx.xxx.xxx.xxx tendrás que poner la IP de tu servidor de VirtualBox.
rdesktop -a 16 xxx.xxx.xxx.xxx:3390
Ya puedes usar tu máquina Window$ corriendo en un servidor GNU/Linux con VirtualBox.
Todo esto está muy bien, pero será más cómodo la esa máquina virtual tenga su propia IP dentro de nuestra Red y que la máquina servidora sea transparente. Para esto tendremos que hacer algunas modificaciones en nuestro sistema y en nuestra máquina virtual.
Lo primero que haremos será modificar nuestro fichero /etc/network/interfaces. Tendremos la configuración una nueva tarjeta "virtual" que hará un puente entre nuestra tarjeta de red que utilicemos.
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto br0
iface br0 inet dhcp
bridge_ports eth0
Después de reiniciar las interfaces (/etc/init.d/networting restart) hacemos un ifconfig y veremos las dos tarjetas, la virtual con si propia IP asignada por el DHCP y la eth0 también con su propia IP.
usuario@maquina:~$ ifconfig
br0 Link encap:Ethernet direcciónHW XX:XX:XX:XX:XX:XX
inet dirección:xxx.xxx.xxx.xxx Difusión:xxx.xxx.xxx.xxx Máscara:xxx.xxx.xxx.xxx
dirección inet6: fe80::20a:5eff:fe5f:e275/64 Alcance:Vínculo
ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1
RX packets:7328 errors:0 dropped:0 overruns:0 frame:0
TX packets:6345 errors:0 dropped:0 overruns:0 carrier:0
colisiones:0 txqueuelen:0
RX bytes:5590681 (5.3 MB) TX bytes:882468 (861.7 KB)
eth0 Link encap:Ethernet direcciónHW XX:XX:XX:XX:XX:XX
ARRIBA DIFUSIÓN MULTICAST MTU:1500 Métrica:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
colisiones:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Bucle local
inet dirección:127.0.0.1 Máscara:255.0.0.0
dirección inet6: ::1/128 Alcance:Anfitrión
ARRIBA LOOPBACK CORRIENDO MTU:16436 Métrica:1
RX packets:3287 errors:0 dropped:0 overruns:0 frame:0
TX packets:3287 errors:0 dropped:0 overruns:0 carrier:0
colisiones:0 txqueuelen:0
RX bytes:155517 (151.8 KB) TX bytes:155517 (151.8 KB)
Ahora vamos a crear una nueva tarjeta de red de VirtualBox que estará enlazada con la br0 que hemos creado. Para ello tenemos que parar un servicio de VirtualBox que administra las conexiones de red de las máquinas virtuales. Crear la tarjeta VirtualBox y después volver a encender el administrador de redes VirtualBox.
Las tarjetas de red de VirtualBox están asociadas a un usuario, yo corro los servicios de VirtualBox con root, si preferís correrlos con otro usuario, tendréis que darles permisos al fichero /dev/net/tun.
/etc/init.d/vboxnet stop
VBoxAddIF vbox0 root br0
/etc/init.d/vboxnet start
Ahora al hacer ifconfig veremos además de nuestra lo, eth0 y br0 la nueva tarjeta vbox0.
Solo nos falta asignar esta vbox0 para que la use directamente nuestra máquina virtual.
VBoxManage modifyvm winxp -nic1 hostif -cableconnected1 on -hostifdev1 vbox0
vbox0 no puedes configurarla desde el servidor de máquinas virtuales, la configuración de IP y puerta de enlace tendrás que hacerla dentro de la máquina virtual.
Es posible que necesitemos tener un disco secundario para usar como almacen dentro de nuestra máquina virtual. Son un par de pasos muy sencillos.
Creamos el fichero .vdi con un tamaño máximo (30GB) y lo registramos dentro de nuestro servidor VirtualBox. Y después asociamos ese disco a la máquina virtual que prefiramos. Una vez hecho esto iniciamos la máquina virtual y será dentro de la máquina virtual donde tendremos que crearle una partición y formatearla.
VBoxManage createvdi -filename Almacen.vdi -size 30000 -register
VBoxManage modifyvm winxp -hdb Almacen.vdi
jueves, 6 de noviembre de 2008
Instalación de VirtualBox en Debian / Ubuntu
Simplemente tendremos que incluir la siguiente linea en el /etc/apt/sources.list.
Posíblemente tengamos un error porque no tenemos guardada una clave publica del repositorio. Para solucionarlo ejecutaremos:
deb http://download.virtualbox.org/virtualbox/debian etch non-freeUna vez incluida hacemos aptitude update para actualizar la lista de paquetes.
Posíblemente tengamos un error porque no tenemos guardada una clave publica del repositorio. Para solucionarlo ejecutaremos:
wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | sudo apt-key add -Y por último instalaremos el paquete virtualbox
aptitude update
aptitude install virtualboxY ya tenemos instalado en nuestro sistema Debian VirtualBox.
Suscribirse a:
Entradas (Atom)
DynDns OVH Sincronización de IP pública dinámica
Si tienes un servidor en casa o detrás de una conexión con IP dinámica, sabes que tarde o temprano tu dirección IP pública cambia y tu dom...
-
Sabemos como registrar discos duros virtuales que vienen de otros servidores de virtualización, también hemos creado discos duros desde cero...
-
En esta nueva entrada vamos a realizar la instalación de un DUC (Dynamic Update Client) . En concreto se trata de un cliente para la a...
