Migraciones a KVM: Instancias desde VirtualBox

Hoy, por fin, vamos a explicar cómo pasar vuestras antiguas máquinas de VirtualBox a KVM. En teoría es un proceso muy simple, he de decir que las instancias de linux son mucho más fáciles de trasladar que las de windows, pero con mi explicación no tendréis problemas con ninguno de los dos tipos.

Antes de empezar he de decir que he actualizado la versión de Ghost, tenía intención de migrar también el look del blog pero la adaptación de mis cambios a la nueva versión del tema Casper no me convenció mucho. Me lo apunto para darle una vuelta más y actualizar también la apariencia externa, no sólo lo que pasa bajo nuestros pies.

Volvamos a lo nuestro, el proceso inicial lo obtuve en la entrada de este blog. Con estos datos pude empezar la migración de todas las máquinas de la empresa y conseguir un mejor rendimiento general. El primer paso es migrar las imágenes de disco de nuestra máquina alojada en VirtualBox:

# VBoxManage clonehd <ruta_absoluta>/imagen_hdd.vdi <ruta_absoluta>/nueva_imagen_hdd.img --format raw

Debéis tener en cuenta que las rutas en ambos casos deben ser absolutas, si no lo hacéis así, VirtualBox se quejará con unos errores indescifrables. Con esta operación tendríamos el almacenamiento de nuestra imagen virtual en formato raw. KVM también puede utilizar este tipo de imágenes, pero la más aconsejable es la del tipo qcow2 que consigue mejor rendimiento y alguna ventaja más. Para ello sólo deberemos ejecutar el siguiente comando:

# qemu-img convert -f raw nueva_imagen_hdd.img -O qcow2 nueva_imagen_hdd.qcow2

Es posible que no tengáis instalada esta herramienta en concreto, pero no os preocupéis, eso tiene fácil solución:

# apt-get install qemu-utils

Una vez que tengamos la imagen convertida ya podremos añadirla a cualquier instancia de KVM que queramos. Mi consejo es que anotéis los recursos que tenía destinada la imagen original y probéis a dedicarle los mismos en KVM, así podréis comparar las métricas obtenidas, antes y después del cambio, con nuestro maravilloso Zabbix.

He de recordaros que tener levantado el servicio de VirtualBox es incompatible con el de KVM. Si váis a utilizar el mismo anfitrión lo que yo haría sería desinstalar VirtualBox y dejar configurado KVM únicamente, si no os gusta siempre podréis volver al anterior sin haber borrado las imágenes de las máquinas virtuales que tengáis.

Como íbamos diciendo, si la instancia original tenía más de un disco duro asociado deberéis repetir la operación de los discos las veces que haga falta. Además las imágenes generadas las deberéis guardar en cualquier directorio al que libvirtd tenga acceso, como explicamos en el post en el que mostrábamos cómo configurar KVM inicialmente. La única diferencia con aquel proceso radica en que en lugar de elegir un método de instalación importaremos una imagen de disco existente.

En este punto deberemos diferenciar los dos grandes bloques que nombramos al principio del post, máquinas windows y máquinas linux. El primer bloque exige un poco más de trabajo así que vamos a empezar por las fáciles. Nuestro objetivo es aprovechar al máximo el rendimiento de KVM, para ello necesitaremos que el hardware que le añadimos a nuestras máquinas virtuales utilicen los drivers VirtIO. En todas las migraciones que he realizado los servidores linux se han comportado sin problemas, en su arranque han detectado el nuevo hardware y se han puesto a funcionar como si nada.

Algún linux antiguo, no recuerdo que versión de kernel, se atragantó un poco con este tema por lo que los discos tuve que dejarlos con la interfaz SATA para poder seguir utilizándolas en KVM. Tampoco creo que la merma en el rendimiento fuera notable, además una máquina con un kernel tan antiguo, siendo sinceros, no se debería utilizar ya para el uso diario.

En este terreno os diría que lo mejor es probar, si la máquina arranca bien perfecto, si no arranca no os preocupéis, vovéis a cambiar el driver a SATA y seguro que funciona. Aquí os muestro una imagen en la que os destaco los apartados en los que debéis activar la configuración del driver VirtIO para probar:

Como véis os he destacado el apartado de disco aunque debemos probar a cambiar también el dispositivo de red y el de vídeo. Respecto a la interfaz de red podréis conservar la MAC heredada de VirtualBox si tenéis alguna configuración en el router asociada a ella, o bien elegir la nueva que os proporcione libvirtd. Si con estos cambios la imagen arranca, enhorabuena, ya tenéis una imagen antigua reencarnada en un entorno mucho mejor, siempre de acuerdo a mis métricas. Me encantaría obtener feedback de los experimentos que realicéis vosotros para comparar resultados, los comentarios están abiertos para vosotros.

Ya os he mencionado que el proceso para una máquina windows es más complicado, vamos a enfangarnos un poco con los chicos de redmond. El objetivo es instalar los driver VirtIO en nuestra imagen de windows. Lo ideal sería poder instalar estos drivers antes de migrar para que al arrancar nuestra máquina con el nuevo hardware windows pudiera arrancar sin problemas. Esta idea la deseché directamente ya que hasta que windows no detecta un dispositivo con un hardware concreto no intenta instalar sus drivers. Ahora os contaré mi método, pero de nuevo, si tenéis uno mejor no dudéis en compartirlo, la comunidad os lo agradecerá.

Básicamente este método consiste en enseñarle la liebre al sistema operativo y hacer lo contrario de lo que se hace en los canódromos con los galgos, en nuestro caso la morderán del todo. Necesitaremos los drivers de VirtIO para windows en una imagen iso montada en nuestra iinstancia durante un par de arranques. Tened en cuenta que este enlace puede variar, lo mejor es acceder a la página del proyecto Fedora directamente.

Una vez descargada la iso en cualquier almacén visible desde nuestro KVM podremos montarlo como hardware en nuestra máquina virtual.

Un últimos apunte, si teníais las Guest Additions de VirtualBox instaladas en esas máquinas podéis pasar a desinstalarlas ya que lo único que hacen es estorbar. Respecto a esto también tengo que avisaros, no tengo probado el proceso inverso por lo que os aconsejo que no borréis las máquinas de VirtualBox por si os arrepentís, aunque si alguien nos describe cómo viajar en sentido contrario, los comentarios están abiertos.

Con todo esto preparado deberemos añadir un disco extra con VirtIO para que podamos instalar los drivers contenidos en nuestro CDROM.

En principio veréis cómo la máquina windows arranca perfectamente y cuando detecte esta pequeña partición nos pedirá que busquemos los drivers, seleccionamos la unidad correspondiente y le decimos que busque recursivamente por todo el árbol de directorios. Una vez instalada esta unidad ya podremos cambiar el driver del disco principal, pero está será en el siguiente reinicio.

Apagamos nuestra máquina virtual, eliminamos esta unidad y cambiamos el driver del disco princiapl, el de la tarjeta gráfica a QXL así como el de la interfaz de red para que sea también VirtIO. Arrancamos la imagen de nuevo y nos volverá a detectar hardware nuevo para el que utilizaremos nuestro CDROM mágico. Cuando todos los drivers estén instalados apagamos, eliminamos la iso con los drivers y lanzamos de nuevo nuestra instancia para poder hacerle pruebas de rendimiento y disfrutarla en un hardware más potente..

Para una integración completa con nuestro escritorio nos quedaría instalar un paquete en nuestro anfitrión y otro en nuestra instancia. Empezaremos por el de la máquina principal que nos servirá para el resto de instancias alojadas en ella. Como ya expliqué en el post sobre el manejo de las máquinas virtuales el visor por defecto para conectarnos a ellas desde el virt-manager es VNC, pero tenemos la opción de utilizar Spice que está desarrollado también por Red Hat. Para poder hacer uso de él necesitaremos ejecutar lo siguiente:

# apt-get install spice-client-gtk qemu-kvm-spice python-spice-client-gtk

Con estos paquetes nuestro entorno Gnome sabrá cómo realizar la conexión. Pido disculpas si para los usuarios de KDE, LXDE o similares, es necesaria la instalación de paquetes adicionales, pero no tengo modo de comprobarlo, soy fiel a Gnome. De nuevo se agradecen comentarios al respecto para enriquecer estos procedimientos.

Antes de cambiar el método de acceso a nuestra máquina virtual es aconsejable instalar dentro de ella el equivalente a las VirtualBox Guest Additions. Si tenemos una instancia con linux nos bastará con ejecutar el siguiente comando dentro de ella:

# apt-get install spice-vdagent

Para las máquinas invitadas de windows nos dirigiremos a la página del proyecto Spice y descargaremos el paquete Windows Guest Tools. Una vez instaladas en las instancias, cambiado el método de acceso a ellas y reiniciado todo, podremos comprobar como el portapapeles funciona perfectamente entre nuestro anfitrión y sus instancias.

La recomendación musical de hoy pasa por el gran Jarvis Cocker y su exitazo de los noventa Common People del disco Different Class de su grupo Pulp, todavía recuerdo sus bailecitos en el escenario, incluso mejores que los del vídeo, exige más de un visionado así como la asistencia a uno de sus conciertos.

Disfruten.