Desde que instalé FreeBSD 10 en mi workstation le tuve que decir adiós a QEMU/KVM y "welcome back" a VirtualBox. Saber que me iba a quedar sin QEMU/KVM fue una de las decisiones más dificiles al momento de despedirme de CentOS 7. Pero hoy, luego de conocer la noticia de que CentOS deja de ser una distribución estable para pasar a ser rolling (una distro desktop en mis servers, claro que sí, ¡cómo mo!) y además de la incorporación del virus systemd, no me arrepiento en lo más mínimo. QEMU/KVM es una gran tecnología de virtualización, pero lamentablemente está desarrollada por Red Hat. Y desde que utiliza cgroups, Libvirt sólo funciona con el kernel Linux (no encontré forma de deshabilitar el uso de cgroups, a pesar de que probé diferentes configuraciones). Por otro lado, no me sorprendería para nada que en breve pase a depender de systemd.

Mi pragmatismo característico me llevó a despedirme rápidamente de QEMU/KVM (y también de Dropbox porque el cliente no funciona en FreeBSD) y pasar a la siguiente tecnología disponible, en este caso: el viejo y querido VirtualBox.



FreeBSD puede funcionar como host de máquinas virtuales utilizando las tecnologías VirtualBox y bhyve.

VirtualBox es un paquete de virtualización activamente desarrollado por Oracle bajo licencia open source. Se escunetra disponible para la mayoría de los sistemas operativos incluyendo Windows, Mac OS, Linux y FreeBSD. Es capaz de correr guests Windows y *NIX.

El hipervisor bhyve, liberado bajo licencia BSD, es parte del sistema base de FreeBSD a partir de la versión 10. Este hipervisor soporta guests FreeBSD, OpenBSD y GNU/Linux. Actualmente sólo soporta una consola serie y no emula una consola gráfica. Como se trata de un hipervisor nuevo, que apunta a correr guests modernos, no realiza traducción de instrucciones (emulación) ni mapeo de memoria manual, sino que depende de las características de virtualización de las CPU actuales.

Cómo instalar VirtualBox en FreeBSD

# pkg install virtualbox-ose

(¿Y dicen que Ubuntu es fácil?)

La documentación referente a VirtualBox en FreeBSD se puede encontrar en el handbook: FreeBSD Handbook - 22.3. FreeBSD as a Host with VirtualBox.

VBoxManage

Desde la interfaz gráfica de VirtualBox no es posible mapear un disco o partición directamente a un guest (lo que se conoce a veces como passthrough), por lo que se debe recurrir a la herramienta de gestión del hipervisor de línea de comandos VBoxManage. Esta es una de muchas características avanzadas no disponibles desde la interfaz gráfica de VirtualBox. Lo que demuestra la importancia de conocer las opciones de línea de comandos de todas las aplicaciones y herramientas, incluso de aquellas que poseen una interfaz gráfica.

La interfaz de control de VirtualBox de línea de comandos VBoxManage permite realizar todas las operaciones y funciones provistas por la interfaz gráfica, más muchas otras características avanzadas.

Lamentablemente el paquete no incluye una página de manual, pero es posible obtener ayuda mediante:

# VBoxManage --help

Aunque la herramienta VBoxManage se encuentra completamente documentada en el capítulo 8 del manual de VirtualBox:

Oracle VM VirtualBox® User Manual - Chapter 8. VBoxManage

Los comandos provistos por esta herramienta funcionan de forma similar tanto en Windows como GNU/Linux, FreeBSD, etc.

Cómo mapear un disco físico o partición a un guest VirtualBox

Supongamos que necesitamos que el guest "SliTaz" acceda directamente a la partición física /dev/ada0s3.

El mapeo directo de discos y particiones físicas (o raw hard disk access, como lo llama VirtualBox) es implementado como parte del soporte del formato de imagen VMDK. Por lo tanto, es necesario crear un archivo de imagen VMDK especial el cual define dónde los datos serán almacenados. Luego es posible utilizar este VMDK desde cualquier máquina virtual, como cualquier otra imagen de disco.

La creación de este VMDK especial sólo es posible desde la herramienta de línea de comandos VBoxManage, pero su posterior adición o mapeo a un guest es posible tanto desde línea de comandos como desde la interfaz gráfica, pues se trata de un VMDK como cualquier otro.

Para crear el archivo de imagen de disco VMDK llamado "/home/emi/datos.vmdk" que represente a la partición /dev/ada0s3, ejecutar:

# VBoxManage internalcommands createrawvmdk -filename /home/emi/datos.vmdk -rawdisk /dev/ada0s3

Cabe aclarar que esta imagen VMDK no contendrá ningún dato, ya que los datos se accederán desde la partición /dev/ada0s3. Sólo se trata de un cascarón o capa de abstracción a la misma. Por lo tanto no requiere espacio en disco.

Por supuesto, el filesystem en el disco o partición en cuestión no debe estar montado en el host, de lo contrario se puede corromper y ocasionar serias pérdidas de datos.

Luego, es posible agregar el nuevo disco "datos.vmdk" en cualquier máquina virtual desde la interfaz gráfica (sudo VirtualBox), o desde línea de comandos utilizando el comando "storageattach".

En el ejemplo utilizo un host FreeBSD, aunque este comando es exactamente igual para hosts GNU/Linux.

Veamos un ejemplo

Utilizando el comando "list vms" es posible listar las máquinas virtuales. Por ejemplo, el usuario root posee únicamente la máquina virtual "SliTaz":

root@hal9000:~ # VBoxManage list vms
"SliTaz" {b07be842-1361-4a10-93f7-9182e368689c}

Deseo que este guest pueda acceder directamente a la partición /dev/ada0s3 de 68 GB:

root@hal9000:~ # gpart show ada0 
=>       63  976773105  ada0  MBR  (466G)
         63  141998472     3  freebsd  (68G)
  141998535  127926225     1  freebsd  [active]  (61G)
  269924760  706848408     2  freebsd  (337G)

root@hal9000:~ # fdisk-linux -l /dev/ada0 | grep s3
/dev/ada0s3             1      8805  70999236   a5  FreeBSD

Por lo tanto voy a crear el archivo de imagen de disco VMDK "/home/emi/datos.vmdk":

root@hal9000:~ # VBoxManage internalcommands createrawvmdk -filename /home/emi/datos.vmdk -rawdisk /dev/ada0s3
RAW host disk access VMDK file /home/emi/datos.vmdk created successfully.

Se observa que el archivo VMDK creado ocupa menos de 1 KB:

root@hal9000:~ # ls -l /home/emi/datos.vmdk
-rw-------  1 root  wheel  540 Dec  9 14:11 /home/emi/datos.vmdk

Ahora es posible agregar este disco en la máquina virtual "SliTaz", pero primero es necesario determinar qué controladores IDE posee y qué puertos/dispositivos hay disponibles:

root@hal9000:~ # VBoxManage showvminfo SliTaz | grep IDE
Storage Controller Name (0):            IDE
IDE (1, 0): /home/emi/slitaz-4.0.iso (UUID: 26ebacc5-db59-46bb-afc0-d006773df603) (temp eject)

Se observa que el puerto 1, dispositivo 0 (Secundary Master) está ocupado. Por lo tanto lo puedo agregar en el puerto 0, dispositivo 0 (Primary Master) ejecutando:

root@hal9000:~ # VBoxManage storageattach SliTaz --storagectl "IDE" --port 0 --device 0 --type hdd --medium /home/emi/datos.vmdk 

Cabe remarcar que "SliTaz" se refiere a dicho guest perteneciente al usuario actual (en este caso root).

Comprobar ejecutando nuevamente VBoxManage showvminfo:

root@hal9000:~ # VBoxManage showvminfo SliTaz | grep IDE
Storage Controller Name (0):            IDE
IDE (0, 0): /home/emi/datos.vmdk (UUID: cd3c1820-1e04-46c8-8f56-f584d86d0529)
IDE (1, 0): /home/emi/slitaz-4.0.iso (UUID: 26ebacc5-db59-46bb-afc0-d006773df603) (temp eject)

Al iniciar/reiniciar el guest, se podrá acceder a la partición /dev/ada0s3 desde el mismo como si fuese un disco más, por ejemplo: /dev/hda1 si es un guest Linux.

Referencias

FreeBSD Handbook - 22.3. FreeBSD as a Host with VirtualBox

Oracle VM VirtualBox® User Manual - 9.9.1. Using a raw host hard disk from a guest


Tal vez pueda interesarte


Compartí este artículo