Virtualización con QEMU

Captura de pantalla de QEMU

QEMU es un emulador de procesadores y de algunos periféricos, capaz de emular por ejemplo placas base con procesador ARM dentro de un tu propio PC. Además de emular, también es capaz de virtualizar dentro de ciertos sistemas operativos, obteniendo mucho más rendimiento.

Un uso práctico es generar un ordenador virtual (dentro de tu propio PC) que se comporte como un ordenador real. En este ordenador huésped se pueden hacer todo tipo de pruebas sin poner en peligro al ordenador anfitrión.

QEMU puede arrancar un sistema i386 y solicitar un sistema operativo vía PXE (es decir, desde otro ordenador a través de la red), usar una unidad de almacenamiento virtual o un disco duro físico.

Crear un disco de QEMU (una imagen)

Para crear una imagen de QEMU se necesita un simple comando, en el que se indica el tipo de imagen, la capacidad y el nombre del archivo.

El tipo RAW ("en bruto", sin procesar) almacena la información de forma exactamente igual que un disco duro real. Gracias a ello se puede clonar toda la información a un disco duro físico, el cual funcionará en hardware real.

QEMU puede crear imagenes de diferentes tipos, entre ellos:

  • raw
  • cloop
  • cow
  • qcow
  • qcow2
  • vmdk (VMware)
  • vdi (VirtualBox)

En este caso se creará una imagen de 10GB con formato RAW llamada virtual_bodhi.img para posteriormente instalar Bodhi Linux.

qemu-img create -f raw virtual_bodhi.img 10G

Este comando (qemu-img) está disponible en openSUSE, pero tal vez en otras distribuciones o sistemas operativos tenga otro nombre.

La opción create sirve para crear una imagen. Con la -f se especifica el tipo de imagen, en este caso una imagen raw. Después se especifica el nombre de la imagen. Por último el tamaño de la imagen virtual, en este caso 10GB.

Iniciar QEMU con una imagen ISO

Captura de pantalla de QEMU iniciando Bodhi Linux

Para virtualizar un sistema i386 hay que ejecutar el comando qemu-system-i386.

Un procesador Intel 386 es la base de los procesadores de 32 bits y por lo tanto compatible con casi cualquier ordenador actual de 32 bits.

Debido a que los procesadores de 32 bits ya están obsoletos, QEMU puede simular uno para poder hacer funcionar software antiguo en un sitema con hardware moderno.

Este es el comando para openSUSE, pero en otras distribuciones o sistemas operativos puede tener otro nombre.

qemu-system-i386 -hda virtual_bodhi.img -cdrom bodhi.iso -m 2G

El argumento -hda sirve para especificar el primer disco duro (y en este caso al único) que tendrá la máquina virtual, en este caso virtual_bodhi.img. Después, con -cdrom se especifica la imagen del CD o DVD desde el que se instalará el sistema operativo, en este caso bodhi.iso.

Por último, el argumento -m especifica la cantidad de memoria disponible en la máquina virtual. En este caso, 2G significa 2 GigaBytes de memoria RAM. Si no se cambia, QEMU iniciará la máquina virtual con 128MB de RAM, insuficiente para la mayoría de sistemas operativos actuales.

Iniciar QEMU desde el CD, disco o red

Si QEMU descubrire que no hay nada instalado en el disco duro, iniciará el sistema operativo desde el "CD-ROM" (la imagen .iso). Si hay un sistema operativo instalado en el disco, QEMU no volverá a iniciar desde el CD-ROM. Para forzar a que vuelva a iniciar desde el CD-ROM se puede añadir el argumento -boot.

-boot d

Las variantes son:

  • c - Inicia el sistema desde el primer disco duro
  • d - Inicia el sistema desde el primer CD-ROM
  • n - Inicia el sistema desde la primera interfaz de red

Virtualización con QEMU usando KVM

QEMU puede utilizar KVM (Kernel-based Virtual Machine) pero solamente con la arquitectura del ordenador anfitrión. Esto significa que si el ordenador usa arquitectura i386, no podrá usar KVM para emular un procesador arm.

Esto permite que no sólo se emule una máquina, sino que además, el procesador del ordenador anfitrión realice operaciones directamente, ahorrando mucho trabajo. El resultado es un grandísimo aumento de rendimiento, con resultados similares a la velocidad del ordenador anfitrión si no estuviese emulando nada.

Para ello se utilizan los mismos comandos que con QEMU normal, pero cambiando el nombre de qemu que especifica la arquitectura (por ejemplo qemu-system-i386) por qemu-kvm.

qemu-kvm -hda virtual_bodhi.img -cdrom bodhi.iso -m 2G

Iniciar una máquina virtual desde un disco duro real

Al igual que se puede iniciar una máquina virtual desde una imagen de disco, QEMU permite iniciar desde un disco duro físico, una unidad SSD o un dispositivo de almacenamiento en el sistema.

Simplemente hay que especificarlo como -hda y el sistema debería iniciarse.

qemu-system-i386 -hda /dev/sdb -m 2G

Emular tarjeta de red y usar un puente

La máquina virtual puede tener conexión a internet de varias formas (NAT, Puente, etc) pero no todas son realmente útiles. Si no se especifica nada, el ordenador anfitrión se comportará como un router y el ordenador virtual no tendrá una dirección IP real.

La forma más realista de conexión es emular una tarjeta de red Realtek RTL8139 (cuyos drivers están incluidos hasta en Windows XP) en la máquina virtual. Esto provoca que tenga conectividad absoluta y se comporte de forma independiente al ordenador anfitrión.

Esta tarjeta virtual se conecta a un puente de red en el ordenador anfitrión. En este caso supongo que hay un puente llamado br0.

Primero hay que darle permisos a QEMU para usar el puente de red. Para ello hay que editar el archivo bridge de la configuración de QEMU, normalmente /etc/qemu/bridge.conf
y añadir la línea:

allow br0

Si el puente se llama de otra manera hay que sustituir br0 por el nombre del puente.

Una vez configurado el puente, para ejecutar la máquina virtual hay que añadir dos argumentos cuando se ejecute QEMU, uno especificando que emule una tarjeta de red y otro especificando a dónde conectarla:

-net nic,model=rtl8139 -net bridge,br=br0

Con -net se especifica que se van a aportar datos de la red. Con -net nic,model=rtl8139 se especifica que la tarjeta de red (NIC, Network Interface Card en inglés) emulada sea una Realtek 8139. Luego se especifica con -net bridge,br=br0 que en la máquina anfitrión la red se gestione como un puente en el que intervenga lo más mínimo y que se conecte al puente llamado br0.

Es posible que se necesite ejecutar con permisos de superusuario o root para poder acceder al puente de red.

Fecha de creación: 22/12/2015 16:49:36 | Última modificación: 11/6/2019 1:49:37 | Hora del servidor: 28/3/2024 23:31:58