QEMU: La guía definitiva para virtualizar y emular sistemas en Linux

Introducción

QEMU (Quick Emulator) se ha convertido en una herramienta esencial para desarrolladores, administradores de sistemas y entusiastas que necesitan ejecutar diferentes arquitecturas o sistemas operativos dentro de un entorno Linux. Su capacidad para emular hardware completo y, al mismo tiempo, aprovechar la aceleración mediante KVM, lo posiciona como una solución versátil tanto para pruebas ligeras como para cargas de trabajo productivas.

¿Qué es QEMU?

QEMU es un emulador y virtualizador de código abierto que puede reproducir el comportamiento de diversos procesadores (ARM, x86, PowerPC, MIPS, etc.) y dispositivos periféricos. A diferencia de los hipervisores tradicionales, QEMU no depende de una capa de abstracción de hardware específica; en su lugar, traduce las instrucciones del código invitado al anfitrión en tiempo real. Cuando se combina con KVM (Kernel-based Virtual Machine), QEMU delega la ejecución de la CPU al módulo del kernel, logrando un rendimiento cercano al nativo.

Instalación en distribuciones populares

En la mayoría de las distribuciones Linux, QEMU se encuentra en los repositorios oficiales. En Ubuntu o Debian, basta con ejecutar:

sudo apt update && sudo apt install qemu qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils

En Fedora, el comando equivalente es:

sudo dnf install @virtualization

Para Arch Linux, se utiliza:

sudo pacman -S qemu virt-manager dnsmasq vde2 ebtables iptables

Tras la instalación, es recomendable agregar tu usuario al grupo kvm y libvirt para evitar el uso de sudo en cada comando:

sudo usermod -aG kvm libvirt $USER
newgrp kvm
newgrp libvirt

Modo de emulación vs. aceleración KVM

QEMU puede operar en dos modos principales:

  • Modo de emulación puro (TCG): Traduce cada instrucción del código invitado mediante el Tiny Code Generator. Es útil cuando se necesita emular una arquitectura diferente a la del host (por ejemplo, ejecutar ARM en un equipo x86_64). El rendimiento es menor, pero la flexibilidad es máxima.
  • Modo acelerado con KVM: Cuando la arquitectura del invitado coincide con la del host y el procesador soporta extensiones de virtualización (Intel VT‑x o AMD‑V), QEMU delega la ejecución de la CPU al módulo KVM del kernel. Esto reduce significativamente la sobrecarga y permite alcanzar un rendimiento casi nativo.

Para verificar si KVM está disponible, ejecuta:

kvm-ok

Si el resultado indica que KVM acceleration can be used, estás listo para aprovechar la aceleración.

Crear y lanzar una máquina virtual básica

El proceso típico implica crear una imagen de disco, descargar una ISO de instalación y ejecutar QEMU con los parámetros adecuados. A continuación, un ejemplo para instalar Ubuntu 22.04 en una VM x86_64 con aceleración KVM:

# Crear un disco virtual de 20 GB en formato qcow2
qemu-img create -f qcow2 ubuntu22.04.qcow2 20G

# Iniciar la instalación
qemu-system-x86_64 \
  -enable-kvm \
  -m 4096 \
  -smp 4 \
  -cpu host \
  -drive file=ubuntu22.04.qcow2,format=qcow2,if=virtio \
  -cdrom ubuntu-22.04-live-server-amd64.iso \
  -boot d \
  -netdev user,id=net0,hostfwd=tcp::2222-:22 \
  -device virtio-net-pci,netdev=net0 \
  -vga virtio

Los flags más importantes son:

  • -enable-kvm: activa la aceleración.
  • -m: cantidad de RAM en MB.
  • -smp: número de núcleos de CPU virtuales.
  • -drive ... if=virtio: utiliza el controlador virtio para mejor rendimiento de disco.
  • -netdev user,...: configura una red NAT con reenvío de puertos (ej. SSH en el puerto 2222 del host).

Una vez finalizada la instalación, puedes arrancar la VM sin la ISO:

qemu-system-x86_64 -enable-kvm -m 4096 -smp 4 -cpu host -drive file=ubuntu22.04.qcow2,format=qcow2,if=virtio -netdev user,id=net0,hostfwd=tcp::2222-:22 -device virtio-net-pci,netdev=net0 -vga virtio

Opciones avanzadas de red y almacenamiento

Para entornos de producción o pruebas más complejas, QEMU ofrece múltiples tipos de redes y backends de almacenamiento:

  • Redes tipo bridge: Permiten que la VM aparezca como otro dispositivo en la misma red física, ideal para servicios que deben ser accesibles desde otras máquinas.
  • Redes tipo vhost-user: Ofrecen alto rendimiento mediante la transferencia de paquetes directamente entre QEMU y un proceso de espacio de usuario (usado frecuentemente con DPDK).
  • Almacenamiento en formato raw o qcow2: Mientras que raw brinda máxima velocidad, qcow2 agrega funcionalidades como snapshots, compresión y cifrado.
  • Discos clonados y snapshots: Con qemu-img create -b base.qcow2 -f qcow2 delta.qcow2 se pueden crear imágenes diferenciales que facilitan pruebas rápidas y rollbacks.

Un ejemplo de VM conectada a un bridge llamado br0:

qemu-system-x86_64 -enable-kvm -m 4096 -smp 2 -drive file=win10.qcow2,if=virtio -netdev bridge,id=net0,br=br0 -device virtio-net-pci,netdev=net0

Depuración y monitoreo

QEMU incluye un monitor integrado accesible mediante Ctrl+Alt+2 (en la consola gráfica) o mediante un socket TCP/UNIX. Desde el monitor puedes inspeccionar el estado de la CPU, registrar información de dispositivos y enviar comandos en tiempo real. Algunos comandos útiles son:

  • info cpus: muestra el estado de cada vCPU.
  • info snapshots: lista los snapshots existentes.
  • system_powerdown: apaga la VM de forma ordenada.
  • quit: sale del monitor y detiene la VM.

Para un monitoreo más detallado, puedes habilitar el registro de eventos con -d int,guest_errors,unimp o usar herramientas externas como virsh (si libvirt está involucrado) o perf para analizar el uso de la CPU del host.

Conclusiones

QEMU sigue siendo una pieza fundamental en el ecosistema de virtualización de Linux gracias a su flexibilidad, su capacidad de emular múltiples arquitecturas y su integración estrecha con KVM para lograr un rendimiento cercano al nativo. Ya sea que necesites probar un kernel experimental, ejecutar una aplicación legacy en una arquitectura distinta o montar un laboratorio de redes complejo, QEMU ofrece las herramientas necesarias para hacerlo de forma segura y eficiente. Con la práctica adecuada de sus opciones de red, almacenamiento y depuración, podrás adaptar la solución a prácticamente cualquier escenario de desarrollo o producción.

Esta obra está bajo una Licencia Creative Commons Atribución 4.0 Internacional para Francesc Roig francesc@vivaldi.net .

EspañolesEspañolEspañol