QEMU se puede ejecutar desde linea de comando o gran variedad de entornos gráficos, ya sean con LibVirt o no, dentro de los entornos gráficos con LibVirt utilizaremos «Virt-Manager» como comentamos en la primera parte de «Usando QEMU/KVM con LibVirt» con el podremos gestionar no solo maquinas con conexión QEMU/KVM (qemu:///system) sino otros tipos de conexiónes a hipervisores ya sean locales o remotos.
«virt-manager» es una aplicación en Python que utilizar el API de LibVirt para darnos una interfaz grafica, por eso también comentaremos algunos de las opciones de Virsh que es el comado LibVirt
Acciones que podemos realizar
- Crear una conexión al hipervisor correspondiente (Archivo→Añadir Conexión) ya sea local o en remoto, en nuestro caso KVM/QEMU pero como ya comentamos disponemos de varios hipervisores.
- En nuestro caso sera QEMU (qemu://)
- lxc:// para contenedores LXC
- vbox:// conecta a VirtualBox con su API
- vmware://
- Crear maquina virtual(Archivo→Nueva maquina virtual) en alguna de las conexiones creadas, hipervisores configurados, anteriormente.
- Detalles de la conexión (Editar→Detalles conexión) en el que podremos configurar las redes y almacenamientos de nuestras maquinas y discos virtuales.
Podremos ejecutarlas como root “///system” o como usuario local “///session”, con los permisos del usuario local, aunque lo normal es que las lancemos como “///system” para disponer de todas las capacidades de redes virtuales, puentes, etc. y así no tener limitaciones por los permisos.
Una vez tengamos la maquina virtual creada, más adelante describimos como realizar esto, podremos realizar distintas acciones sobre las maquinas creadas, con solo pulsar el botón derecho y elegir la acción:
- Ejecutar, Apagar, forzar apagado, reiniciar.
- Eliminar la maquina virtual, no preguntara si también queremos borrar ficheros de disco de esta.
- Pausar y reanudar.
- Clonar, Migrar
Desde linea de comandos (comando virsh) podremos realizar también estas acciones y otras como:
- list – -all listado de las maquinas virtuales que tenemos configuradas.
- dominfo <maquina> Información de la maquina que pasamos como parámetro
- start | shutdown | destroy | reboot <maquinas> Iniciar, apagar, forzar el apagado y reiniciar una maquina concreta
- undefine <maquina> Borrar una maquina.
- dumpxml <maquina> Nos realiza un volcado del fichero de configuración XML (no es necesario acudir al directorio donde se almacenan) y que nos permitirá modificarlo y volverlo a subir para así crear maquinas con configuración similar por ejemplo.
- create <fichero XML con definición>
- suspend | resume <Maquina> Paramos la ejecución de una maquina, guardando sus estados, para despues volver a reiniciarla desde el mismo punto en que se paro. Otros comandos de Virsh similares que nos permiten guardar los estados en un fichero para su posterior restauración son: save y restore.
- snapshot-create Crea una instantanea
- snapshot-list <Maquina> Listado de las instantaneas del la maquina indicada.
- snapshot-restore <Maquina> <Instantanea> Restaura una instantanea.
- Snapshot-delete <Maquina> <Instantanea> Borrado de la instantanea una vez que ya no la necesitemos
Creando una maquina virtual desde Virt-Manager
Para crear una maquina virtual nos iremos a (Archivo→Nueva maquina virtual) en este momento se iniciara una serie de preguntas que deberemos ir contestando antes de empezar la configuración real del sistema operativo que hayamos decidido instarla.
Lo primero que nos preguntara es el medio de instalación desde el que se iniciara la instalación de nuestra maquina virtual.
El más típico es utilizar una imagen ISO con el sistema operativo deseado pero disponemos de otras opciones:
- ISO o CDROM Es mas típico, si tenemos un USB con la instalación lo más cómodo sera convertir ese USB a un fichero .ISO
- Instalación desde la red.
- Un disco existente, podemos tener imagenes existente en diferentes formatos (que podremos convertir como se vera más adelante con «qemu-img convert»
- .raw Formato crudo
- .vmdk Formato de VMWare
- .vdi Formato de VirtualBox
- .iso DVD/CDs
- .qcow2 Nuevo formato de QEMU con características avanzadas y es el que normalmente usaremos para la nueva creación de maquinas.
- otros como:.cow, .qcow.
También podremos elegir la arquitectura, normalmente no la modificaremos, para los casos que no se correspondan con la arquitectura de nuestro anfitrión y en estos caso QEMU trabajara en modo emulación. Un ejemplo de trabajo en emulación es ejecutar una maquina invitada de tipo «ARM» en un anfitrion «Intel.»
Después y en el caso de ser una instalación por red definiremos los parámetros correspondientes de red para acceder a esa imagen.
Sino detecta el sistema operativo, elegiremos nosotros uno manualmente para que de esta forma nos de una sugerencia de la memoria y CPU que necesita, al igual que el tamaño de disco, y que podremos cambiar en las ventanas que nos irán apareciendo.
El disco podremos crea una imagen en el directorio por defecto o de forma personalizada, que nos podrá elegir el sitio donde se guardara nuestra imagen, accediendo a los repositorios de almacenamiento que tenemos definidos (fisicos o bloques) y de los que hablaremos más adelante.
Una vez seleccionado el disco nos dará un resumen de lo elegido y deberemos definir el nombre de la maquina virtual, el por defecto se basa en el tipo de sistema operativo que hayamos definido, y también el tipo de red que en la primera instalación lo mejor es dejar el tipo por defecto «NAT» que nos permite acceder a internet para descarga de actualizaciones por defecto y una vez se complete la instalación ya podremos meter la maquina virtual en la red que nos interese.
Ademas nos da la opción de personalizar el hardware, en la mayoría de los caso lo dejaremos por defecto lo que nos trae hasta que se realice la instalación, salvo que necesite de un disco especial para la instalación o por ejemplo en maquinas de imagenes existente conozcamos el hardware que deseamos añadir durante la instalación ya que después se podrá realizar perfectamente si este no impide la instalación inicial.
Y después iniciaremos la instalación de nuestro sistema operativo correspondiente como si de una maquina física se tratara.
Una vez instalado si acudiremos al hardware de nuestra maquina instalada para definir dispositivos adicionales, como pueden ser directorios a montar, interfaz de red y asignación a redes diferentes de la de por defecto utilizada, así como directorios que deseemos compartir con nuestro huesped.
Ademas en el Hardware definiremos canales Spice para disponer de la opción «Copy-Paste» entre las maquinas y en la propia maquina instalaremos drivers especiales de los dispositivos virtualizados, cuando se disponga de ellos, para un mejor rendimiento y funcionalidad.
Una vez que instalemos nuestra maquina invitada, que podrá ser windows o linux en la mayoría de los casos, nos interesara instalar en ella algunos controladores que mejoran la integración con nuestro anfitrión y proporciona otras opciones como copia&pegar por ejemplo, seria los equivalentes a la instalación de “guest-additions” que se realiza en VirtualBox.
Drivers SPICE (https://www.spice-space.org/download.html)
Drivers para invitados Windows
- https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
- viostor (drivers para el disco)
- Net/KVM (drivers para la tarjeta de red)
- virtio-win-guest-tools.exe
- https://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-latest.exe
- Mejora la integración de SPICE, controlador de video qxl, copy&paste, resolución automática.
- https://www.spice-space.org/download/windows/spice-webdavd/ Compartir carpetas con WebDav
Drivers para Linux
- En Linux (debian, Ubuntu,..) se dispone de paquetes en la propia distribución.
- qemu-guest-agent Facilita la comunicación entre la maquina invitada y el anfitrión (mediante el canal virtio-serial org.qemu.guest_agent.0)
- spice-vdagent Agente spice que nos permitirá mejor control del mouse, ajuste automatico de la resolución, Copy&Paste entre el invitado y el anfitrión.
- xserver-xorg-video-qxl (Controlador pantalla QXL)
Conceptos básicos de la visualización y ciclo de vida
Una vez que tenemos instalada nuestra maquina y antes de continuar nos interesa conocer algunos conceptos básicos así como el ciclo de vida de una maquina virtual.
- Nodo es la maquina física, nuestro anfitrión, donde se ejecuta nuestro hipervisor.
- Dominio instancias de maquinas virtuales, maquina invitada, que se ejecutan en nuestro dominio.
Las maquinas virtuales (dominios) se definen en un fichero XML(su formato lo podemos ver en https://libvirt.org/formatdomain.html) que podemos localizar en “/etc/libvirt/qemu” y que definirá el hardware (memoria, cpus, tarjetas de red, dispositivos de almacenamiento) y las redes a las que se conecta cada uno de los dispositivos de red NIC que definamos, también carpetas compartidas que podamos tener, etc.
Podemos ver el XML y editarlo ejecutando
virsh dumpxml <maquina> // Vuelca el XML
virsh edit <maquina> // Edita el XML
Los estados por los que puede pasar una maquina virtual son:
- Indefinido : El dominio aún no se ha definido o creado.
- Detenido : El dominio se ha definido, pero no se está ejecutando.
- En ejecución : El dominio se ha creado e iniciado, por lo tanto se esta ejecutando en el hipervisor.
- En pausa : Se ha suspendido la ejecución del dominio, almacenandose su estado hasta que se reanude. Saldremos del el realizando un resume.
- Salvado: Es similar al estado de pausa, pero el estado se guarda en un almacenamiento persistente, realizando una instantánea de la maquina. Saldremos de el realizando un restore.
Si nuestras maquinas virtuales las tenemos en un almacenamiento compartido por varios anfitriones y gracias a los estados, podremos realizar migraciones de estas entre anfitriones. Este tema no lo trataremos pero es una característica muy utilizada en entornos empresariales