Como migrar de VirtualBox a Qemu/kvm

Performance utilizando kvm:

El uso de los recursos intermedios entre la máquina virtual y el hardware queda reducido a su mínima expresión al usar qemu en lugar de VirtualBox, debido a que qemu está diseñado para utilizar los módulos de kernel de kvm de manera directa. Es muy notable la mejora de performance. Incluso se pueden configurar pass-through de aceleradores de Video si contamos con una placa gráfica potente. (Esto está fuera del alcance de este instructivo

Arquitectura de la solución qemu/kvm/virt-manager

Quemu puede utilizarse sin un manejador gráfico, lanzando la máquina virtual desde una consola sin necesidad de ninguna otra cosa. Sin embargo es preciso acordarse una gran cantidad de parámetros. Para facilitar el uso existe la aplicación gráfica «Gestor de máquinas virtuales» que nos facilita todo esto (virt-manager)

Diagrama simplificado

Instalación en debian

Para instalar en debian es muy sencillo, ya que forma parte de los paquetes nativos:

:~$ sudo apt update && sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

Con esto ya tenemos instalado todo lo necesario para virtualizar con qemu/kvm

Configuración de un bridge con nuestra placa de red (wifi o ethernet)

Qemu corre en entorno de usuario, con lo cual desde el «Gestor de máquinas virtuales» (virt-manager) no va a ser posible crear un bridge directamente. Para ello, si estamos utilizando Network-Manager, el gestór de red por defecto de debian, podremos utilizar la herramienta nmcli para crear un bridge asociado a la interfase de red que nos da conectividad. Este bridge luego podrá ser utilizado por la máquina virtual.

Un «bridge» creado de esta manera funciona como si se tratase de un bridge de hardware, que distribuye tráfico entre varias interfaces de red, sin embargo aquí será un bridge de software, completamente gestionado por el kernel. Un bridge es básicamente como un switch, y en general se utiliza para traficar entre redes heterogéneas. En nuestro caso tendremos por un lado la vlan de las máquinas virtuales, la vlan normal de nuestra máquina para salir a internet, etc.

Importante: Esto implica que a partir de la creación del bridge, todo el tráfico será routeado al bridge y el bridge se ocupará de distribuirlo entre la placa de red y los dispositivos que utilicen el bridge.

Primero buscaremos el nombre de la placa de red que usamos para navegar y su mac-address. La mac-address es la dirección física de la placa de red, que es utilizada por los switches/bridges para direccionar el tráfico dentro de una lan. En este caso, para asegurarnos que si tenemos algún DHCP que asignaba determinada ip de manera fija a nuestra placa de red, clonaremos en el bridge la mac address de la placa física. Para ello primero averiguaremos cuál es nuestra placa de red para crear luego el bridge

:~$ sudo ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:23:7c:84 brd ff:ff:ff:ff:ff:ff
    inet 10.10.100.117/24 brd 10.10.100.255 scope global dynamic noprefixroute enp1s0
       valid_lft 42877sec preferred_lft 42877sec
    inet6 fd99:17f5:6dbf::49d/128 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fd99:17f5:6dbf:0:d3e4:3889:c542:51c8/64 scope global temporary dynamic 
       valid_lft 604729sec preferred_lft 86236sec
    inet6 fd99:17f5:6dbf:0:5054:ff:fe23:7c84/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe23:7c84/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Acá podemos observar que el nombre del dispositivo físico es «enp1s0» y la mac address «52:54:00:23:7c:84«. De esta manera utilizaremos estos datos para crear el bridge:

:~$ sudo nmcli connection add type bridge con-name br0 ifname br0
:~$ sudo nmcli connection add type bridge-slave ifname enp1s0 master br0
:~$ sudo nmcli connection modify br0 802-3-ethernet.cloned-mac-address 52:54:00:23:7c:84
:~$ sudo nmcli connection up br0

Con estos simples pasos ya tendremos el bridge creado, en el network manager tendremos que elegirlo como conexión predeterminada.

Como se ve, una vez que hemos seleccionado desde el control de Network Manager el bridge la ip ha sido reasignada al bridge, quedando la interface física como esclava del bridge:

:~$ sudo ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 52:54:00:23:7c:84 brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:23:7c:84 brd ff:ff:ff:ff:ff:ff
    inet 10.10.100.117/24 brd 10.10.100.255 scope global dynamic noprefixroute br0
       valid_lft 43133sec preferred_lft 43133sec
    inet6 fd99:17f5:6dbf::cdc/128 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fd99:17f5:6dbf:0:5e84:6be6:914e:51d0/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::630e:8141:1532:5a18/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Si vemos la tabla de ruteo:

~$:sudo ip route

default via 10.10.100.10 dev br0 proto dhcp src 10.10.100.117 metric 425 
10.10.100.0/24 dev br0 proto kernel scope link src 10.10.100.117 metric 425 

Con esto ya estamos listos para migrar nuestras máquinas virtuales y poder utilizar un bridge, lo que nos permitirá no solo salir desde la máquina virtual a internet, sino también acceder desde nuestro equipo host a la máquina virtual por ip. La máquina virtual recibirá una ip de la red LAN a la que estamos conectados.

Migración de discos de VirtualBox a qemu/kvm

Para migrar los discos tendremos que buscar la carpeta de nuestra máquina virtual de Virtualbox. Normalmente se encuentran en directorios dentro de un directorio en nuestro home: ~/VirtualBox VMs/

:~ $ cd ~/VirtualBox VMs/MiMaquinavirtual
:~ $ ls -lthr

-rw------- 1 mariano mariano 7,5K ago 27 07:26 MiMaquinavirtual.vbox-prev
-rw------- 1 mariano mariano 4,7G ago 27 07:26 MiMaquinavirtual.vdi
-rw------- 1 mariano mariano  18M ago 27 07:26 MiMaquinavirtual_1.vdi
-rw------- 1 mariano mariano 6,5K ago 27 07:26 MiMaquinavirtual.vbox

Este es el contenido tí?ico de una máquina virtual a la que le hemos creado 2 discos. En este comando vamos a convertir los discos de formato vdi (VirtualBox) al tipo qcow2 que es el estandar de qemu. Crearemos una carpeta distinta para nuestras máquinas qemu por una cuestión de orden (No es mandatorio)

:~$ mkdir -p ~/mismaquinasqemu/NuevaMaquina

Y ahora convertiremos los discos colocándolos en la carpeta correspondiente (qemu-img convert -f vdi -O qcow2 <discovirtualbox.vdi> <discoqemu.qcow2>)

:~$ for f in *.vdi; do qemu-img convert -f vdi -O qcow2 ${f} ~/mismaquinasqemu/NuevaMaquina/${f%.vdi}.qcow2; done

Creación importación de la máquina virtual con «Gestor de máquinas virtuales»

Ahora vamos a abrir el gestor de máquinas virtuales (virt-manager) instalado previamente. Presionamos el ícono «Crear nueva máquina virtual» y nos levanta este asistente:

Seleccionamos «Importar imagen de disco existente» y damos Forward. Las siguientes pantallas nos llevaran a buscar los discos virtuales que recién transformamos en el disco local.

Presionamos «Explorar» y luego «Explorar localmente»

Y luego buscamos el disco principal de la maquina y seleccionamos el sistema operativo. Esta selección del sistema operativo va a definir los mejores parámetros de qemu para el OS seleccionado.

Definimos la cantidad de memoria y cpu que les vamos a dar y luego Forward

En la siguiente pantalla vamos a darle un nombre a nuestra máquina, si tenemos que agregar otros discos que tenía configurada la máquina virtual en VIrtualBox vamos a seleccionar «Personalizar configuración antes deinstalar» para poder agregarlos. Asimismo vamos a seleccionar la red, en donde por defecto nos traerá el bridge que acabamos de generar más arriba.

Al dar «Finalizar» entraremos en el detalle de la máquina virtual en donde presionaremos «Añadir hardware» para agregar todos los discos que tenía la máquina original

En Añadir Hardware aparece seleccionada la primera opción «Almacenamiento» en donde seleccionamos «Seleccionar o crear almacenaje personalizado» para buscar los otros discos

Luego de agregar todos los discos necesarios, presionamos el botón de arriba a la izquierda «Iniciar la Instalación»

y listo. Ya tenemos nuestra máquina virtual creada y booteando:

Comentarios cerrados.