Virtualización: El corazón de Tux ahora es nativamente infiel

No se confundan, esto no tiene absolutamente nada que ver con el día de los enamorados. Tiene que ver con una cosa muy distinta llamada virtualización. Aunque bueno, nadie te impide que te enamores de Linux, ¿no?

— ¿Virtualizaqué?

Ah, de veras. Esa palabrota. Partamos por donde se debe.

Aunque suena casi más complejo que una ecuación de Kepler, virtualización no es más que la posibilidad de abrir instancias de otros sistemas operativos dentro de un mismo PC. Como bootear Windows u otras distribuciones de Linux dentro de Ubuntu, tal como si estuvieran en una "máquina virtual" dentro del tarro, pero aisladas del sistema operativo en ejecución. Ergo, virtualización.

Ejemplo:

Este último tiempo han aparecido varios artículos sobre la virtualización, sobre lo importante que es la interoperatibilidad y la convergencia y toda la ensalada. En pocas palabras, muchos creen que la tendencia es que todos los sistemas operativos incluyan en sus núcleos una solución de virtualización, y no dejarlo en manos de programas externos. Porque ahí sí que se desparrama todo. Que Xen, que Parallels Desktop, que VirtualPC, que VMWare, que tantos más, y por ahí también, que KVM.

Todos distintos, pero todos programas de virtualización. Y dentro de todos, hay uno que nos interesa más que el resto, y lamentablemente es el que tiene el peor nombre de todos: KVM.

KVM significa Kernel Virtual Machine y, como su nombre lo dice, es un "virtualizador" que fue incluído en el propio kernel de Linux desde su versión 2.6.20. Es decir, de ahora en adelante podremos abrir instancias de otros SO's nativamente en Linux, sin la necesidad de instalar ninguna lesera externa. Dicen por ahí que Leopard también va a traer algo así, pero por ahora son sólo rumores. El pingüino, en cambio, ya lo tiene y es una realidad.

De hecho, tan realidad es, que Ubuntu Feisty ya incluye a KVM (dato: ahora está usando la versión 2.6.20.8 del corazón de Linux). Así que preparémosnos que en Abril vamos a ten… un momento. ¿Acaso no actualicé mi notebook a Feisty hace unos días? ¿Acaso no tengo KVM incluído en el kernel y listo para andar?

Antes que todo despejemos algunas dudas.

Aunque a primera vista suena muy similar, virtualización no es lo mismo que emulación. La diferencia es que, mientras la virtualización "encapsula" una máquina virtual y le da acceso cuasi directo al hardware del equipo, la emulación crea un entorno de hardware completo, que puede no tener ninguna relación con el hardware donde se está ejecutando. ¿Más simple? La virtualización usa la misma arquitectura, y lo que hace es conectar la instancia virtual al hardware del equipo. El emulador parte de cero y crea todo un ambiente nuevo, en el que hasta el procesador puede ser "de mentira", e incluso de una arquitectura distinta al del hardware original.

O sea, un PC x86 con Linux puede virtualizar Windows, pero un Mac PowerPC no podría hacerlo. Eso tendría que ser emulado (así lo lograba VirtualPC, por ejemplo), lo que también significa leeentitud. La virtualización es mucho más rápida ya que es básicamente una abstracción del hardware. Pero suficiente, no nos pongamos keplerianos.

$ egrep '^flags.*(vmx|svm)' /proc/cpuinfo

Sí, lo sé. Kepleriano. Es sólo un comando para ver si mi CPU soporta virtualización, como lo requiere KVM. Si responde con un montón de siglas y acrónimos, todo bien. Mi Core Duo lo soporta.

$ sudo apt-get install kvm

Todo bien. Apt me dice que kvm recomienda instalar también qemu-img (aunque no me obliga). En el wiki del Ubuntu hay un artículo donde explican cómo correr KVM, y lo hacen con qemu-img, que sirve para crear imágenes virtuales de disco. Pero como probablemente voy a correr un LiveCD, no lo necesito.

Ahora hay que cargar el módulo kvm-intel en el kernel (o kvm-amd si en tu caso usas AMD):

$ sudo modprobe kvm-intel FATAL: Error inserting kvm_intel (/lib/modules/2.6.20-6-generic/kernel/drivers/kvm/kvm-intel.ko): Operation not supported

Maldita sea. ¿Qué dice dmesg?

$ dmesg | grep kvm kvm: disabled by bios

Ahá. Reinicio y me meto al BIOS de mi Dell 6400. Efectivamente la opción de virtualización está desactivada. Booteo y el módulo carga sin problemas. Ahora sí llegó la hora.

Miro a mi alrededor y dentro del montón de cosas tiradas y revueltas, encuentro un disco antiguo de Elive (0.3). Como es un LiveCD, no tiene sentido que cree una imagen de disco, así que llamo a KVM directamente y sin opciones extra (si quisiera anexar una imagen virtual, es cosa de agregar la ruta al final del comando).

$ kvm -boot d -cdrom /dev/cdrom

¿Qué significa todo este garabato? "Ejecuta kvm booteando desde el cdrom (-boot -d) y abre el CD que está en /dev/cdrom. Listo… o mejor dicho, Boom!

kvm-booting-elive.jpg

Todo va bien. Impresionado por lo rápido que bootea. Llego al escritorio. Llego rápido.

kmv-enlightenment-firefox-desktop.jpg

¿Qué funciona? A excepción del mouse (!), todo. Hay red, hay sonido, la resolución es relativamente buena… y nuevamente, funciona bastante rápido. En ese pantallazo, Flash está mostrando un video en YouTube y cero problemas.

Notable. Viva KVM.

Entiendo que la anexión de KVM al kernel es bastante reciente, así que por esta vez voy a perdonarles lo del mouse (que es algo sinceramente imperdonable), pero espero que para Abril el bug esté solucionado. De todas formas, me impresionó lo bien que KVM manejó los dispositivos del hardware y "se los entregó" a Elive. Nunca esperé que la red y el sonido funcionaran automágicamente.

Algo que sí le haría bien KVM sería una interfaz gráfica. Así sería mucho más fácil manejar las imágenes de disco y cargar .ISOs sin tener que escribir comandos keplerianos. A eso súmenle la estabilidad que le irá dando el tiempo y los usuarios, y me parece que KVM será un exitazo.

Eso sí, hay otra cosa que quise probar pero no funcionó. Algo que sin duda le haría bien a KVM y a todo el mundo. ¿Faltará mucho? No sé, algo me dice que Kepler no entendería ni jota de lo que estamos hablando aquí.

kvm-mac-os-x.jpg

menciones

    comentarios