Trace: ftp qemu

QEMU

Este artículo pretende dar una pequeña introducción a el software de emulación y virtualización QEMU sobre GNU/Linux, en específico de Debian GNU/Linux.

¿Que es QEMU?

QEMU es un software libre que permite emular y virtualizar.

Un emulador permite que su computadora ejecute sistemas operativos y software que han sido escritos para otro tipo de computadora. Por ejemplo podría ejecutar el sistema operativo del teléfono celular en su computadora portátil.

Un virtualizador permite que su computadora ejecute de una manera eficiente sistemas operativos y software que han sido escritos para computadoras similares, por ejemplo podría ejecutar tres versiones de GNU/Linux al mismo tiempo en la computadora de su escritorio.

El sistema operativo que corre sobre su computadora se llama Host o Anfritrión, mientras que el sistema operativo emulado o virtualizado se llama Guest o Huésped. Así pues tenemos que un sistema operativo Host puede emular o virtualizar varios sistemas operativos Guest.

El rendimiento obtenido por la virtualización es mejor que el de la emulación, esto se debe a que el sistema operativo Guest habla que el CPU y demás recursos de su computadora, entonces el Host permite que el Guest se comunique directamente con el CPU y demás recursos. En términos mas técnicos, al virtualizar en un procesador x86_64 debo utilizar únicamente sistemas operativos Guest que corran en procesadores x86_64.

Cuando se emula no necesariamente el sistema operativo Guest habla el mismo idioma que el CPU y demás recursos de su computadora, entonces el sistema operativo Host debe traducir las cosas que el Guest dice para que el CPU y los recursos entiendan que desea hacer, esta traducción requiere esfuerzo según el idioma del Guest. En términos mas técnicos, cuando se emula un sistema operativo para ARM, como el que usan los teléfonos, en un procesador x86_64, como el que usan las computadoras portátiles, el sistema operativo debe traducir de ARM a x86_64, consumiendo mucho procesamiento para preparar la traducción.

¿Que puede virtualizar?

QEMU requiere de un módulo adicional llamado KVM, el cual permite hacer la comunicación entre el Guest y el CPU y los recursos de la computadora, mediante KVM se pueden virtualizar las siguientes plataformas:

  • x86
  • powerpc
  • s390

¿Que puede emular?

Con cada versión de QEMU se amplían las plataformas emuladas, hasta la versión 2.6 son:

  • x86
  • arm
  • mips
  • powerpc
  • sparc
  • xtensa
  • alpha
  • cris
  • m68k
  • sh4
  • lm32
  • microblaze
  • moxie
  • openrisc
  • tricore
  • unicore

Instalación

En sistemas operativos basados en Debian GNU/Linux puede instalarlo de la siguiente manera:

apt-get install qemu qemu-system

Hola Mundo de la emulación

Para efectos prácticos vamos a emular un sistema operativo x86 en nuestra computadora x86. Lo vamos a hacer mediante la consola de texto, la razón es que no he encontrado un GUI para QEMU que soporte todas las arquitecturas, por lo general se limitan a x86.

Vamos a correr el live-cd de Debian, puede descargarlo de aquí, la imagen debian-live-8.X.0-amd64-standard.iso es la mas pequeña, pero no tiene entorno gráfico, la imagen debian-live-8.X.0-amd64-xfce-desktop.iso es la mas pequeña con entorno gráfico.

qemu-system-i386

Al ejecutar ese comando una ventana emergente mostrar una computadora intentando iniciar el sistema operativo:

De manera predeterminada QEMU selecciona una serie de componentes que permiten iniciar la emulación, en nuestro caso seleccionó una tarjeta de video, una unidad lectora de DVD/CD, un BIOS, una interfaz de red, entre otros.

QEMU permite personalizar los componentes de la emulación, tal y como cuando escoge las especificaciones de su computadora portátil.

Iniciar un sistema operativo

Para ilustrar el ejemplo vamos a ejecutar el live-cd de Debian con el siguiente comando, notese que vamos a cambiar la arquitectura de la emulación a 64bits:

qemu-system-x86_64 -cdrom debian-live-8.5.0-amd64-standard.iso

Con ello podrá iniciar el sistema operativo Debian GNU/Linux:

Configuración básica de QEMU

Si esta usando el Live CD podrá notar que la emulación muy lenta y que tal vez requiera de memoria RAM o mas CPUs. En la imagen siguiente se puede notar un error en el kernel por falta de memoria:

Modifique el comando para agregarle 2G de memoria RAM a la emulación:

qemu-system-x86_64 -cdrom debian-live-8.5.0-amd64-standard.iso -m 2048

Ahora sí el sistema iniciará correctamente:

Con el sistema emulado y corriendo vamos a revisar algunas cosas, por ejemplo que CPU piensa el sistema operativo que esta usando:

Tarjeta de video y de red:

Vamos a configurar el CPU, podemos ver una lista de posibles emulaciones del CPU con el siguiente comando:

qemu-system-x86_64 -cpu ?

Así que si desea usar la emulación nativa de QEMU ejecute el siguiente comando:

qemu-system-x86_64 -cpu qemu64 -m 2048 -cdrom debian-live-8.5.0-amd64-standard.iso

Si desea agregar mas cores de CPU a la emulación utilice el parámetro -smp, en el siguiente ejemplo se van a asignar cuatro cores:

qemu-system-x86_64 -cpu qemu64 -smp 4 -m 2048 -cdrom debian-live-8.5.0-amd64-standard.iso

En la siguiente imagen se muestra un extracto de la salida de la comprobación de información del CPU que ilustra los cuatro cores:

Para configurar la tarjeta de video agregue el parámetro -vga, cuidado porque no se despliega una lista de las posibles opciones, no obstante estas son algunas:

  • cirrus: es la tarjeta de video mas sencilla y todos los sistemas operativos modernos tienen un driver
  • std: características similares a la anterior pero soporta mayores resoluciones de video
  • vmware: es una tarjeta de video con mayores capacidades, requiere de instalar los drivers de vmware
  • qxl: es una tarjeta de video con mayores capacidades que la std y cirrus utilizando el protocolo SPICE, una tecnología de acceso remoto para máquinas virtuales

Así que para usar la tarjeta de video std utilice el siguiente comando:

qemu-system-x86_64 -cpu qemu64 -smp 4 -m 2048 -vga std -cdrom debian-live-8.5.0-amd64-standard.iso

Los parámetros de CPU y video que especificamos son los que vienen por defecto, no es necesario indicarlos, se hace a manera de exponerlo.

Para ver las posibles configuraciones de las tarjetas de red podemos usar el comando:

qemu-system-x86_64 -net nic,model=help

En el siguiente ejemplo se va utilizar el modelo rtl8139 de Realtek, el comando a utilizar es el siguiente:

qemu-system-x86_64 -net nic,model=rtl8139 -cpu qemu64 -smp 4 -m 2048 -vga std -cdrom debian-live-8.5.0-amd64-standard.iso

Revisamos el cambio del modelo de la tarjeta de red:

TODO

El parámetro -display

Referencias

qemu.txt · Last modified: 2016/06/15 12:57
Public Domain Except where otherwise noted, content on this wiki is licensed under the following license: Public Domain