# QEMU/Imágenes

Una vez que QEMU se ha instalado, debería estar listo para ejecutar un sistema operativo guest (invitado) desde una imagen de disco. Esta imagen es un fichero que representa los datos en un disco duro. Desde la perspectiva del sistema operativo guest, es realmente un disco duro, y puede crear su propio sistema de ficheros en el disco virtual.
Se pueden descargar algunas imágenes de sistemas operativos guest desde la página web de QEMU, incluyendo una imagen sencilla de 8 MB de una distribución Linux (que está pensada fundamentalmente para pruebas; nótese que le falta el driver e1000 y por tanto no puede realizarse trabajo en red fuera del sistema). Para ejecutarla, hay que descargarla y descomprimir la imagen en una carpeta y ejecutar el comando de QEMU.
Hay que cambiar linux-0.2.img por el nombre del fichero de imagen del sistema operativo guest. Si el sistema guest dispone de interfaz gráfica y se quiere usar el ratón en él, hay que hacer doble-clic en la ventana y QEMU capturará el ratón. Para que QEMU libere el ratón de nuevo, hay que dejar pulsadas las teclas Control y Alt simultáneamente y entonces el ratón será liberado a nuestro sistema de escritorio.
Aurélien Jarno de Debian ha preparado un número de ficheros de imágenes de QEMU conteniendo Debian pre-empaquetado para distintas arquitecturas, incluyendo ARM, Sparc, PowerPC, x86_64, y i386. Se pueden encontrar en http://people.debian.org/~aurel32/qemu/
Para algunos de los núcleos de prueba que hay, por ejemplo la imagen de prueba de Sparc, podemos tener el error "No NFS Server available giving up" o algún otro mensaje acerca de la necesidad de insertar un "Root Floppy" o incluso un mensaje indicando que hay que corregir la opción root. Si se da el caso, hay que especificar "root=dev/ram" como una opción a añadir al núcleo desde la línea de comandos. Esto permitirá al sistema invitado funcionar. Este caso se da específicamente para los ficheros para Sparc de prueba disponibles en http://wiki.qemu.org/Testing y probablemente se de para otros igualmente. Si se está usando el gestor de programas para Windows, solo hay que añadir "root=/dev/ram/" en la pestaña de opciones avanzadas. Además, hay que apagar el video y el sonido y si se está usando qemu-system-sparcw.exe hay que cambiar el nombre del fichero a qemu-system-sparc.exe porque alguien lo renombró.

## Tipos de imágenes

QEMU soporta varios tipos de imágenes. El tipo "nativo" y más flexible es qcow2, que soporta copiar al escribir, encriptación, compresión e instantáneas de VM.
QEMU actualmente soporta estos tipos de imágenes o formatos:

### raw

    (por defecto) el formato raw es una imagen binaria sencilla de la imagen del disco y es muy portátil. En sistemas de ficheros que soportan archivos dispersos, imágenes en este formato sólo usaran el espacio realmente usado por los datos guardados en ellos.

### cloop

    formato compressed loop, principalmente usado para leer Knoppix y formatos de imagen similares de CD autónomos (Live)

### cow

    formato copy-on-write, copiar al escribir, se le da soporte sólo por razones de compatibilidad y no está disponible en QEMU para Windows

### qcow

    el antiguo formato de QEMU de copy-on-write, se le da soporte por razones de compatibilidad, reemplazado por qcow2

### qcow2

    formato QEMU copy-on-write con un rango de características especiales, incluyendo la capacidad de tomar múltiples instantáneas, imágenes más pequeñas de sistemas de ficheros que no soportan archivos dispersos, encripción AES opcional y compresión zlib opcional

### vmdk

    Formato de imagen de VMware 3 & 4, o 6 para intercambiar imágenes con estos productos

### vdi

    Formato de imagen compatible con VirtualBox 1.1 para intercambiar imágenes con VirtualBox.

## Crear una imagen

Para configurar su propia imagen de un sistema operativo huésped, primero debe crear una imagen de disco vacía. QEMU dispone del comando qemu-img para crear y manipular imágenes de disco, y soporta una variedad de formatos. Si no se especifica ninguno, se usará ficheros raw. El formato "nativo" de QEMU es qcow2, y ofrece gran flexibilidad. A continuación crearemos una imagen de 3 GB con formato qcow2 para instalar en ella Windows XP:
La manera más fácil de instalar un sistema operativo invitado es crear una imagen ISO de un CD/DVD de arranque e indicarle a QEMU que la arranque. Muchos sistemas operativos gratuitos se pueden descargar desde Internet como imágenes ISO arrancables, y se pueden usar directamente sin tener que grabarlas a un disco.
A continuación arrancaremos desde una imagen ISO de un disco de arranque de Windows XP licenciado apropiadamente. Además le daremos 256MB de RAM, pero no usaremos el módulo del núcleo kqemu todavía porque da problemas durante la instalación de Windows XP.
Para arrancar desde un CD o DVD real, diremos a QEMU donde encontrarlo. En los sistemas Linux, habitualmente puede usar un nombre de dispositivo lógico como /dev/cdrom o /dev/dvd, o el nombre físico del dispositivo, por ejemplo /dev/sr0
QEMU arrancará desde la imagen ISO o el CD/DVD y ejecutará el programa de instalación. Si dispone de dos pantallas, mueva la pantalla de QEMU a la que tenga libre, donde pueda tener a la vista el instalador, aunque mejor que siga con otra cosa, ¡tardará un rato!
Una vez que el sistema operativo invitado se ha instalado satisfactoriamente, puede apagar el sistema operativo invitado (por ejemplo en Windows XP, pulsar en Inicio y después Apagar). Una vez que se ha apagado, inicie QEMU de nuevo con el modulo del núcleo kqemu para darle más velocidad.
Si está ejecutando un Linux x86-64 (esto es 64-bit), necesitará ejecutar la versión x86-64 de QEMU para poder utilizar kqemu:

## Usar múltiples imágenes

QEMU puede utilizar hasta cuatro ficheros de imagen para representar múltiples discos virtuales en el sistema guest. Esto puede ser muy útil, como en los siguientes ejemplos:
* un disco virtual para mantener el fichero de paginación o intercambio puede ser compartido entre varios guest de QEMU
* un disco de datos común donde todos los datos se almacenan, accesible desde cada invitado de QEMU pero aislado del host
* dar espacio adicional a los invitados de QEMU sin necesidad de reconfigurar la imagen principal
* separar operaciones de entradas/salida que compiten entre sí colocando las imágenes de QEMU en diferentes discos físicos
* emular un entorno de varios discos físicos para pruebas / aprendizaje
Tenga en cuenta que sólo una instancia de QEMU puede acceder a una imagen a la vez - ¡compartida no significa compartida simultáneamente!
Para usar imágenes adicionales en QEMU, especifíquelas en la línea de comandos, con las opciones -hda, -hdb, -hdc, -hdd.
Nota: QEMU no soporta a la vez las opciones -hdc y -cdrom, ya que ambas representan el primer dispositivo del segundo canal IDE.

## Copiar al escribir

La parte "cow" de qcow2 es un acrónimo de copiar al escribir (copy on write), un pequeño truco que permite configurar una imagen una vez y usarla muchas veces sin cambiarla. Esto es ideal para desarrollar y probar software, lo que generalmente requiere un entorno conocido y estable para comenzar. Se puede crear un entorno conocido y estable en una imagen y después crear varias imágenes desechables de copiar al escribir para trabajar en ellas.
Para comenzar un nuevo entorno desechable basado en una imagen buena conocida, hay que invocar el comando qemu-img con la opción -b y decir en qué imagen basar la copia. Cuando se ejecuta QEMU usando un entorno desechable, todas las escrituras sobre el disco virtual irán a la imagen desechable, no a la copia en la que está basada.
La opción -b no está soportada en qemu-img, al menos no en la versión 0.12.5. En su lugar se usa la opción backing_file, tal y como se muestra aquí:
NOTA: no olvide copiar cualquier dato importante fuera del entorno desechable antes de borrarlo. Cuando se desarrolla y prueba software en un entorno virtual de copiar al escribir, es una buena idea usar software de control de versiones como Subversion o CVS en un servidor externo al entorno virtual. No sólo es fácil mantener copias del trabajo fuera del entorno virtual, es además muy fácil configurar un nuevo entorno virtual para control de versiones.

## Montar una imagen en el host

A veces es útil poder de montar una imagen de disco bajo el sistema host. Por ejemplo, si el guest no tiene soporte de red, la única manera de transferir ficheros hacia y desde el guest será a través de dispositivos de almacenamiento a los que pueda acceder.
Linux y otros host parecidos a Unix pueden montar imágenes creadas con formato raw usando un dispositivo de bucle de retorno. Habiéndose conectado como root (o usando sudo), montar un bucle de retorno con un desplazamiento de 32,256.
Por ejemplo, para copiar algunos ficheros hacia una imagen de disco duro de FreeDOS:
NOTA: nunca montar una imagen de QEMU mientras QEMU la está usando (salvo que se use la opción -snapshot), o es probable que se corrompa el sistema de ficheros de la imagen.
NOTA: si se tiene una imagen sin particiones se debe omitir la parte de offset=32256. Este es, por ejemplo, el caso si se quiere montar linux-0.2.img (que se puede encontrar en la página web de qemu en el momento de escribir esto)
Para otros tipos de imágenes de qemu, se puede usar qemu-nbd
Usando fdisk se puede obtener información relativa a las diferentes particiones en nbd0.
Particiones del tipo LVM no pueden montarse usando 'mount'. En ese caso la imagen podría montarse usando:
Cambie <LogicalVolumeName> por el nombre del volumen lógico presente en el grupo de volúmenes. Por último, después de usarse es importarte desmontar la imagen y deshacer los pasos (dependiendo de cómo se montó la imagen):
"nbd" significa dispositivo de bloque de red (Network Block Device). Aquí se está usando de forma local, pero también se puede exportar la imagen para que otros anfitriones puedan usar /mount. Vea qemu-nbd(8), nbd-client(8) para más detalles.
Lo mismo se puede hacer con imágenes en formato raw, pero es mucho menos eficiente que el método en bucle descrito anteriormente.
Otra alternativa para imágenes en formato vmdk y raw es usar vdfuse (http://forums.virtualbox.org/viewtopic.php?f=26&t=33355) que permite acceder a cualquier imagen soportada por VirtualBox.

## Copiar una imagen en un dispositivo físico

Se puede querer copiar una imagen de disco a un dispositivo físico. Un ejemplo puede ser, si se está haciendo un cluster, podría ser más fácil tener todo listo en qemu, a continuación grabar la última imagen de disco a todos los discos duros. Por supuesto, la imagen necesitará contener toda la configuración necesaria y los drivers para que el nuevo sistema arranque correctamente.
La imagen de disco deberá estar en formato raw.
Después solo hay que hacer dd al disco duro.
O dejar que qemu-img grabe directamente al disco con un comando:
Por supuesto, ¡hay que tener cuidado de que se escribe en el disco correcto!

## Conseguir información

El programa qemu-img puede decirnos el formato, tamaño virtual, tamaño físico e instantáneas que tiene una imagen.

## Convertir formatos de imagen

El programa qemu-img puede usarse para convertir imágenes de un formato a otro, o añadir compresión o encripción a una imagen. Hay que especificar los ficheros de origen y destino para la imagen, y seleccionar entre las siguientes opciones:
* -f fmt – opcional, especificar el formato del fichero de entrada (QEMU habitualmente puede detectarlo)
* -O fmt – especificar el formato del fichero de salida
* -e – usar encripción en el fichero de salida (se pedirá una contraseña)
* -c – usar compresión en el fichero de salida (no se puede usar junto con encripción)
* -6 – cuando se convierte a formato vmdk (VMware), lo hace compatible con VMware 6

### Intercambiando imágenes con VirtualBox

qemu también soporta el formato vdi, así que se puede convertir en las dos direcciones:
qemu puede usar el formato vdi como imagen de arranque así como imagen básica; debido a que VirtualBox también soporta este tipo de imagen, denominándola como imagen diferencial, se podría usar una única copia base (de solo lectura) compartiéndola de forma simultánea.
En cualquier caso, se puede usar el formato raw (o un dispositivo nbd):
Para convertir una imagen de QEMU para poder usarla con VirtualBox, primero hay que convertirla a formato raw, después usar la utilidad de conversión de VirtualBox para convertirla y compactarla a su formato nativo. Téngase en cuenta que el comando de compactación requiere la ruta completa a la imagen de VirtualBox, no solo el nombre del fichero.
(1) o intentar :
o
Alternativamente, puede usar qemu-nbd para que la imagen este disponible en format raw al igual que como dispositivo nbd, lo que VBoxManage puede luego convertir.
Para convertir de formato VDI a raw, puede usarse VBoxManage de nuevo:
o
Para usar una imagen VDI desde kvm sin convertirla, vdfuse debe ser usado otra vez..