Introducción
La administración de máquinas virtuales no se limita a crear e iniciar un dominio. Con frecuencia, los administradores reciben una máquina virtual ya existente y deben modificar su definición persistente: aumentar la memoria, habilitar más CPU virtuales, conectar almacenamiento, activar el inicio automático y comprobar que el estado en ejecución coincide con la configuración solicitada.
En la terminología de libvirt, una máquina virtual es un dominio. Un dominio persistente conserva una definición guardada —en términos conceptuales, su plano de hardware— incluso cuando no hay ningún proceso de QEMU en ejecución. Al iniciar el dominio, se crea una instancia en ejecución a partir de esa definición; al detenerlo, se elimina la instancia activa, pero se conserva el plano. Mantener separadas la configuración persistente y el estado de ejecución es la idea central de este laboratorio.
En este laboratorio, ya existe un dominio de libvirt apagado llamado lfcs-config, definido con un disco de arranque pequeño, 64 MiB de memoria y una vCPU. Inspeccionarás esta configuración inicial y utilizarás comandos de administración de recursos de virsh para reconfigurarla. El entorno no expone /dev/kvm, por lo que QEMU utiliza emulación por software, y los discos no contienen un sistema operativo invitado. Aun así, el flujo de administración y la configuración persistente de libvirt son reales.
Inspeccionar la configuración del dominio existente
En este paso, establecerás la configuración persistente y el estado de ejecución del dominio lfcs-config existente antes de realizar cambios.
Accede al directorio del proyecto.
cd /home/labex/project
Muestra todos los dominios. La opción --all incluye los dominios detenidos, por lo que lfcs-config debería aparecer en el estado shut off.
sudo virsh list --all
Sin --all, normalmente virsh list muestra solo los dominios activos. Ver un nombre detenido en la lista ampliada confirma que libvirt todavía conoce su definición persistente, aunque la máquina virtual no esté consumiendo tiempo de CPU como invitado en ejecución.
Inspecciona el resumen del dominio.
sudo virsh dominfo lfcs-config
dominfo combina información sobre identidad, ciclo de vida, CPU, memoria, persistencia e inicio automático. En esta etapa, interprétala como una referencia inicial y no como el estado objetivo: la salida posterior solo debería cambiar en los campos que reconfigures deliberadamente.
Presta atención a los campos de configuración estables:
Name: lfcs-config
State: shut off
CPU(s): 1
Max memory: 65536 KiB
Used memory: 65536 KiB
Persistent: yes
Autostart: disable
Libvirt muestra aquí la memoria en KiB. Como 1 MiB equivale a 1024 KiB, 65536 KiB son 64 MiB. Persistent: yes indica que la definición se conserva después del apagado, mientras que Autostart: disable significa que libvirt no iniciará automáticamente este dominio cuando se inicie su servicio de virtualización.
Muestra los dispositivos de bloque conectados. vda es el disco raíz preparado y su origen es la imagen qcow2 existente.
sudo virsh domblklist lfcs-config --details
En esta tabla, Target es el nombre del dispositivo que se presenta al invitado, mientras que Source es la ruta del host donde se almacenan sus datos. El disco virtio llamado vda equivale a una unidad virtual conectada a la máquina virtual; el archivo de origen qcow2 es la imagen de respaldo de esa unidad en el host.
Esta referencia inicial permite distinguir lo que ya existe de los cambios de recursos que realizarás en los pasos siguientes.
Configurar la memoria persistente y las vCPU
En este paso, aumentarás la memoria máxima persistente del dominio, la asignación de memoria actual y el número de vCPU mientras permanece apagado.
Libvirt distingue entre el límite máximo de memoria y la memoria asignada durante el siguiente arranque. Establece primero el máximo persistente en 128 MiB. La opción --config modifica la definición guardada del dominio en lugar de un valor temporal de ejecución.
sudo virsh setmaxmem lfcs-config 128M --config
El límite debe ser lo bastante grande para contener la cantidad asignada. Considera max memory como la capacidad total de memoria de la máquina virtual y current memory como la cantidad solicitada para el uso normal. Como el dominio está apagado, cambiar la configuración con --config resulta predecible y tendrá efecto la próxima vez que se inicie.
Establece en 96 MiB la memoria asignada durante el siguiente arranque.
sudo virsh setmem lfcs-config 96M --config
El sufijo M indica a virsh que interprete el valor en mebibytes. La salida posterior de dominfo convertirá 128 MiB en 131072 KiB y 96 MiB en 98304 KiB; son las mismas cantidades expresadas en unidades diferentes.
Antes de que la asignación persistente actual pueda utilizar dos CPU, es necesario aumentar el número máximo de vCPU.
sudo virsh setvcpus lfcs-config 2 --config --maximum
Este primer comando de CPU cambia el límite superior de la definición guardada. Por sí solo, no asigna dos vCPU utilizables. Separar el máximo de la asignación activa permite que la definición de una máquina virtual reserve capacidad para futuras ampliaciones.
Establece dos vCPU para el próximo arranque.
sudo virsh setvcpus lfcs-config 2 --config
El segundo comando establece la asignación persistente dentro del nuevo límite. El orden es importante: solicitar dos vCPU asignadas cuando el máximo todavía es uno provocaría un error.
Inspecciona la definición persistente actualizada.
sudo virsh dominfo lfcs-config
Los campos relevantes deberían mostrar ahora:
CPU(s): 2
Max memory: 131072 KiB
Used memory: 98304 KiB
Crear y conectar un disco de datos persistente
En este paso, crearás una segunda imagen qcow2 y la conectarás como un disco virtio persistente llamado vdb.
Crea una imagen qcow2 dispersa de 64 MiB en el directorio de imágenes de libvirt.
sudo qemu-img create -f qcow2 /var/lib/libvirt/images/lfcs-config-data.qcow2 64M
El comando crea un contenedor de disco virtual, no un sistema de archivos ni un directorio montado. -f qcow2 selecciona el formato de imagen de copia en escritura de QEMU y 64M establece su capacidad virtual. Al principio, una imagen dispersa recién creada ocupa mucho menos almacenamiento del host que su tamaño virtual y crece a medida que el invitado escribe datos.
Permite que el proceso de QEMU de este entorno de formación abra la imagen temporal.
sudo chmod 666 /var/lib/libvirt/images/lfcs-config-data.qcow2
El modo 666 concede permisos de lectura y escritura a todas las clases de usuarios. Este permiso amplio mantiene el laboratorio independiente de la configuración específica de usuario y grupo de QEMU en el host, pero no constituye una recomendación para producción. En un host real, utiliza preferentemente la propiedad, el grupo, la etiqueta de SELinux o la política de AppArmor que requiera el servicio local de libvirt.
Conecta el archivo a lfcs-config. La opción --target vdb asigna el nombre del dispositivo de bloque del invitado, --subdriver qcow2 registra el formato de la imagen y --config modifica la definición persistente para el próximo arranque.
sudo virsh attach-disk lfcs-config \
/var/lib/libvirt/images/lfcs-config-data.qcow2 \
vdb --targetbus virtio --subdriver qcow2 --config
La ruta de origen pertenece al host; vdb es el nombre que vería el invitado. --targetbus virtio selecciona una interfaz de disco paravirtualizada, habitual para obtener un funcionamiento eficiente en invitados Linux. Como el dominio está apagado y el comando utiliza --config, libvirt registra el dispositivo en el plano guardado en lugar de intentar conectarlo en caliente.
Muestra la configuración persistente de los dispositivos de bloque.
sudo virsh domblklist lfcs-config --details
La salida debería contener ahora vda y vdb, con vdb apuntando a lfcs-config-data.qcow2.
En este punto, el archivo de imagen y la conexión al dominio son dos hechos independientes. Crear un archivo qcow2 por sí solo no lo conecta a una máquina virtual, y desconectar un disco más adelante tampoco elimina automáticamente su archivo de origen.
Habilitar el inicio automático y validar el estado de ejecución
En este paso, habilitarás el inicio automático del dominio, iniciarás ahora la máquina virtual y compararás sus recursos en ejecución con la configuración persistente.
Habilita el inicio automático para que libvirt marque este dominio para iniciarlo cuando se inicie el servicio de virtualización.
sudo virsh autostart lfcs-config
El inicio automático es una política guardada, no una solicitud para iniciar el dominio inmediatamente. Resulta útil para servicios de infraestructura que deben recuperarse automáticamente después de reiniciar el host o el servicio de libvirt.
Inicia el dominio con su definición persistente actualizada.
sudo virsh start lfcs-config
El inicio crea un proceso de QEMU a partir de la definición guardada que editaste: dos vCPU, los nuevos límites de memoria y ambos discos. El comando informa de que el dominio se ha iniciado; dominfo y domblklist proporcionan las pruebas de que su estado coincide con la configuración prevista.
Espera unos segundos para que QEMU entre en estado de ejecución.
sleep 3
Inspecciona el dominio. Debería estar en ejecución con dos vCPU, 128 MiB de memoria máxima y el inicio automático habilitado.
sudo virsh dominfo lfcs-config
En este dominio emulado por software, el campo Used memory durante la ejecución normalmente será de 128 MiB, aunque la solicitud persistente de currentMemory sea de 96 MiB. No hay un sistema operativo invitado ni un controlador balloon que coopere con libvirt para reducir la asignación de memoria en ejecución. Inspecciona el XML inactivo para confirmar que la configuración del próximo arranque sigue registrando 96 MiB:
sudo virsh dumpxml lfcs-config --inactive | grep -E '<memory|<currentMemory|<vcpu'
dumpxml --inactive solicita la definición guardada en lugar de la vista activa de QEMU. La tubería pasa ese XML a grep, que muestra únicamente los elementos de memoria y CPU. Esta comparación centrada evita confundir una diferencia esperada en la información de ejecución con un cambio de configuración fallido.
Los valores estables incluyen <memory unit='KiB'>131072</memory>, <currentMemory unit='KiB'>98304</currentMemory> y un valor de vCPU de 2. Esta comparación demuestra por qué la configuración persistente y la información de recursos en ejecución deben comprobarse por separado.
Muestra los discos del dominio activo.
sudo virsh domblklist lfcs-config --details
Deberían aparecer vda y vdb. Esto demuestra que la configuración guardada se aplicó cuando se inició QEMU.
Detener la máquina virtual y confirmar el estado persistente
En este paso, detendrás el proceso del invitado conservando el dominio configurado, el almacenamiento y la opción de inicio automático.
Como los discos de formación no contienen un sistema operativo, no es posible completar un apagado ordenado del invitado. Utiliza destroy para detener inmediatamente el proceso de QEMU. Esta acción cambia el estado de ejecución, pero no elimina la definición persistente del dominio.
sudo virsh destroy lfcs-config
A pesar de su nombre, virsh destroy se parece más a cortar la alimentación que a eliminar una máquina virtual. Aquí solo es apropiado porque el ejercicio no contiene un sistema operativo invitado ni datos importantes. En un invitado real en ejecución, es preferible utilizar virsh shutdown y permitir que el sistema operativo vacíe los datos pendientes y se detenga correctamente.
Confirma que el dominio está detenido.
sudo virsh domstate lfcs-config
La salida debería ser:
shut off
Inspecciona por última vez la configuración persistente.
sudo virsh dominfo lfcs-config
El estado esperado shut off describe únicamente el estado de ejecución. La CPU, la memoria, los discos conectados y el inicio automático permanecen en la definición persistente. Para eliminar esa definición sería necesaria otra operación, como virsh undefine; incluso al eliminar la definición de un dominio, no necesariamente se borran sus archivos de imagen de disco.
Muestra todos los dominios y su estado de inicio automático. El dominio lfcs-config, aunque detenido, debería seguir definido y marcado para iniciarse automáticamente.
sudo virsh list --all --autostart
La máquina virtual está ahora detenida, pero preparada para iniciarse más adelante con la configuración de recursos que has creado.
Resumen
Tomaste el control de un dominio de libvirt existente y modificaste su configuración persistente de recursos sin reescribir su XML. Aumentaste la memoria máxima y asignada, configuraste dos vCPU, creaste y conectaste un segundo disco qcow2, habilitaste el inicio automático, validaste la configuración en un dominio QEMU en ejecución y detuviste el proceso conservando la máquina virtual administrada. Esta es la diferencia práctica entre explorar simplemente el ciclo de vida de una máquina virtual y configurarla para alcanzar un estado objetivo concreto.



