Virsh , abreviatura de Vir tual Sh ell, es una interfaz de usuario de línea de comandos para administrar máquinas invitadas virtuales. Virsh le permite crear, enumerar, editar, iniciar, reiniciar, detener, suspender, reanudar, apagar y eliminar máquinas virtuales. Actualmente es compatible con KVM, LXC, Xen, QEMU, OpenVZ, VirtualBox y VMware ESX. En esta guía, analizaremos cómo administrar KVM máquinas virtuales con interfaz de usuario de gestión Virsh en Linux.
Asegúrese de haber instalado la utilidad KVM y Virsh en su máquina Linux. Las siguientes guías explican cómo instalar KVM en sistemas basados en DEB y RPM.
- Instalar y configurar KVM en Ubuntu 20.04 servidor sin cabeza
- Instalar y configurar KVM en el servidor CentOS 8
- Instalar y configurar KVM en OpenSUSE Tumbleweed
1. Administre máquinas virtuales KVM con el comando Virsh
Si es nuevo en Virsh y KVM, es mejor comenzar leyendo el manual de ayuda. Le dará una idea básica de cómo usar Virsh.
1.1. Obtener ayuda
Ingrese el siguiente comando para ver la lista de comandos disponibles junto con una breve descripción:
$ virsh help
Verá una extensa lista de comandos virsh disponibles para administrar máquinas virtuales KVM desde la línea de comandos.
No tienes que memorizar todo. Simplemente lea la descripción de un comando que desee ejecutar y utilícelo.
Los comandos se agrupan en las siguientes secciones:
- Gestión de dominios,
- Supervisión de dominio,
- Host e Hipervisor,
- Punto de control,
- Interfaz,
- Filtro de red,
- Redes,
- Dispositivo de nodo,
- Secreto,
- Instantánea,
- Copia de seguridad,
- Conjunto de almacenamiento,
- Volumen de almacenamiento,
- Virsh mismo.
Cada sección contiene los comandos relacionados con un conjunto particular de tareas. Puede ver la sección de ayuda de un grupo, por ejemplo Redes , como a continuación:
$ virsh help Networking
Verá comandos relacionados con las tareas de red:
Networking (help keyword 'network'): net-autostart autostart a network net-create create a network from an XML file net-define define an inactive persistent virtual network or modify an existing persistent one from an XML file net-destroy destroy (stop) a network net-dhcp-leases print lease info for a given network net-dumpxml network information in XML net-edit edit XML configuration for a network net-event Network Events net-info network information net-list list networks net-name convert a network UUID to network name net-start start a (previously defined) inactive network net-undefine undefine a persistent network net-update update parts of an existing network's configuration net-uuid convert a network name to network UUID net-port-list list network ports net-port-create create a network port from an XML file net-port-dumpxml network port information in XML net-port-delete delete the specified network port
También puede mostrar la sección de ayuda de un comando específico. Por ejemplo, voy a mostrar la sección de ayuda de "net-name" comando:
$ virsh help net-name NAME net-name - convert a network UUID to network name SYNOPSIS net-name <network> OPTIONS [--network] <string> network uuid
1.2. Listar máquinas virtuales
Para ver la lista de máquinas virtuales invitadas en modo de ejecución o suspensión, ejecute el siguiente comando:
$ virsh list Id Name State --------------------
Como puede ver, no hay invitados en modo de ejecución o suspensión.
Puede usar el --inactive opción para listar invitados inactivos.
Para ver todas las máquinas invitadas, ejecute:
$ virsh list --all Id Name State -------------------------------- - centos8-uefi shut off - nginx_centos8 shut off
Como puede ver en el resultado anterior, tengo dos máquinas virtuales, a saber, "centos8-uefi" y "nginx_centos8". Ambos están apagados.
1.3. Iniciar Máquinas virtuales
Para iniciar una máquina virtual, por ejemplo "centos8-uefi", ejecute:
$ virsh start centos8-uefi
Verá una salida como la siguiente:
Domain centos8-uefi started
Para verificar si la VM se está ejecutando, use "list" comando:
$ virsh list Id Name State ------------------------------ 1 centos8-uefi running
1.4. Guardar máquinas virtuales
Para guardar el estado actual de una VM en ejecución, ejecute:
$ virsh save centos8-uefi centos8-save Domain centos8-uefi saved to centos8-save
Este comando detiene al invitado llamado "centos8-uefi" y guarda los datos en un archivo llamado "centos8-save". Esto tomará unos momentos dependiendo de la cantidad de memoria en uso por su máquina invitada.
1.5. Restaurar máquinas virtuales
Para restaurar el estado previamente guardado de una VM, simplemente especifique el nombre del archivo como se muestra a continuación:
$ virsh restore centos8-save Domain restored from centos8-save
Verifique si la VM se restauró usando el comando "list":
$ virsh list Id Name State ------------------------------ 4 centos8-uefi running
1.6. Reiniciar máquinas virtuales
Para reiniciar una máquina virtual en ejecución, ejecute:
$ virsh reboot centos8-uefi Domain centos8-uefi is being rebooted
1.7. Suspender/Pausar máquinas virtuales
Para suspender una máquina virtual en ejecución, haga lo siguiente:
$ virsh suspend centos8-uefi Domain centos8-uefi suspended
Verifíquelo con el comando "list":
$ virsh list Id Name State ----------------------------- 1 centos8-uefi paused
1.8. Reanudar máquinas virtuales
Para reanudar la máquina virtual en pausa, ejecute:
$ virsh resume centos8-uefi Domain centos8-uefi resumed
1.9. Detener máquinas virtuales activas
Para detener a la fuerza una VM activa y dejarla en estado inactivo, ejecute:
$ virsh destroy centos8-uefi Domain centos8-uefi destroyed
También puede detener la VM con gracia en lugar de forzarla como se muestra a continuación:
$ virsh destroy centos8-uefi --graceful Domain centos8-uefi destroyed
1.10. Apagar máquinas virtuales
Para apagar una máquina virtual en ejecución, haga lo siguiente:
$ virsh shutdown centos8-uefi Domain centos8-uefi is being shutdown
1.11. Recuperar volcado XML de máquinas virtuales
Para mostrar el archivo de configuración XML de una máquina virtual en la salida estándar, ejecute:
$ virsh dumpxml centos8-uefi
Este comando mostrará los detalles completos de configuración (software y hardware) de la máquina virtual:
También puede exportar el volcado XML a un archivo en lugar de simplemente mostrarlo en la salida estándar como se muestra a continuación:
$ virsh dumpxml centos8-uefi > centos8.xml
Este comando volcará el archivo XML "centos8-uefi" en un archivo llamado "centos8.xml" y lo guardará en el directorio de trabajo actual.
1.12. Crear máquinas virtuales con volcado XML
Puede crear una nueva máquina invitada virtual utilizando el XML existente de invitados creados anteriormente. Primero, cree un volcado XML como se muestra arriba y luego cree una nueva VM usando el archivo XML como se muestra a continuación:
$ virsh create centos8.xml Domain centos8-uefi created from centos8.xml
Este comando creará una nueva VM y la iniciará de inmediato. Puede verificarlo usando el comando:
1.13. Editar archivo de configuración XML de máquinas virtuales
Si desea realizar algún cambio en una máquina invitada, simplemente puede editar su archivo de configuración y realizar los cambios que desee. Los invitados se pueden editar mientras corren o mientras están desconectados.
$ virsh edit centos8-uefi
Este comando abrirá el archivo en su editor predeterminado que configuró con la variable $EDITOR.
1.14. Habilitar el acceso a la consola para máquinas virtuales
Después de crear máquinas invitadas KVM, puede acceder a ellas a través de SSH, cliente VNC, Virt-viewer, Virt-manager y consola web Cockpit, etc. Sin embargo, no puede acceder a ellas mediante el comando "virsh console". El comando de la consola se usa para conectar la consola serie virtual para el invitado. Para acceder a los invitados KVM usando el comando "consola virsh", debe habilitar el acceso a la consola serie en la máquina invitada. Consulte la siguiente guía para habilitar el acceso a la consola virsh:
- Cómo habilitar el acceso a la consola Virsh para invitados KVM
1.15. Cambiar el nombre de las máquinas virtuales
Si alguna vez quiso cambiar el nombre de una máquina virtual, consulte la siguiente guía.
- Cómo cambiar el nombre de la máquina virtual invitada KVM
1.16. Mostrar ID de dominio de máquinas virtuales
Para encontrar el ID de dominio de una máquina virtual invitada en ejecución, ejecute:
$ virsh domid centos8-uefi 2
Tenga en cuenta que el invitado debe estar ejecutándose para obtener su ID de dominio.
1.17. Mostrar el nombre de dominio de las máquinas virtuales
Para obtener el nombre de dominio de una máquina virtual en ejecución, ejecute:
$ virsh domname <domain-id or domain-uuid>
Ejemplo:
$ virsh domname 2 centos8-uefi
Aquí, 2 es la identificación del dominio.
1.18. Mostrar UUID de máquinas virtuales
Para encontrar el UUID de la máquina invitada, ejecute:
$ virsh domuuid <domain-name or domain-id>
Ejemplo:
$ virsh domuuid centos8-uefi
O,
$ virsh domuuid 2
Salida de muestra:
de4100c4-632e-4c09-8dcf-bbde29170268
1.19. Mostrar detalles de máquinas virtuales
Para mostrar la información de una máquina invitada, use el nombre de dominio, la identificación de dominio o el uuid de dominio como se muestra a continuación:
$ virsh dominfo centos8-uefi
O,
$ virsh dominfo 2
O,
$ virsh dominfo de4100c4-632e-4c09-8dcf-bbde29170268
Salida de muestra:
Id: -
Name: centos8-uefi
UUID: de4100c4-632e-4c09-8dcf-bbde29170268
OS Type: hvm
State: shut off
CPU(s): 2
Max memory: 2097152 KiB
Used memory: 2097152 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: apparmor
Security DOI: 0
1.20. Mostrar información del host KVM
Para obtener la información de su sistema host, ejecute:
$ virsh nodeinfo
Salida de muestra:
CPU model: x86_64
CPU(s): 4
CPU frequency: 1167 MHz
CPU socket(s): 1
Core(s) per socket: 2
Thread(s) per core: 2
NUMA cell(s): 1
Memory size: 8058840 KiB
1.21. Mostrar información de la CPU virtual
Para mostrar la información de la CPU virtual, ejecute:
$ virsh vcpuinfo <domain-id or domain-name or domain-uuid>
Ejemplo:
$ virsh vcpuinfo centos8-uefi
VCPU: 0
CPU: 3
State: running
CPU time: 5.6s
CPU Affinity: yyyy
VCPU: 1
CPU: 1
State: running
CPU time: 0.0s
CPU Affinity: yyyy
1.22. Encuentra la dirección IP de las máquinas virtuales
Encontrar la dirección IP de una máquina virtual no es gran cosa. Si tiene acceso a la consola de la máquina virtual, puede encontrar fácilmente su dirección IP usando el comando "ip". Sin embargo, también es posible identificar la dirección IP de una VM KVM sin tener que acceder a su consola. La siguiente guía explica cómo encontrar la dirección IP de una máquina virtual KVM.
- Cómo encontrar la dirección IP de una máquina virtual KVM
1.23. Eliminar máquinas virtuales
Si ya no desea una máquina virtual, simplemente elimínela como se muestra a continuación:
$ virsh destroy centos8-uefi
$ virsh undefine centos8-uefi
El primer comando detendrá a la fuerza la máquina virtual si ya se está ejecutando. Y el segundo comando lo anulará y lo eliminará por completo.
También puede utilizar las siguientes opciones para eliminar los volúmenes de almacenamiento y las instantáneas.
--managed-save remove domain managed state file
--storage remove associated storage volumes (comma separated list of targets or source paths) (see domblklist)
--remove-all-storage remove all associated storage volumes (use with caution)
--delete-storage-volume-snapshots delete snapshots associated with volume(s)
--wipe-storage wipe data on the removed volumes
--snapshots-metadata remove all domain snapshot metadata (vm must be inactive)
2. Administrar redes virtuales
Espero que haya aprendido a administrar máquinas virtuales KVM con el comando Virsh en Linux. Esta sección enumera los comandos importantes para administrar redes virtuales KVM en Linux utilizando la utilidad de línea de comandos virsh.
2.1. Listar redes virtuales
Para obtener una lista de las redes virtuales disponibles, ejecute:
$ virsh net-list
Name State Autostart Persistent
--------------------------------------------
default active yes yes
Como puede ver, solo tengo una red virtual que es la predeterminada.
2.2. Mostrar detalles de la red virtual
Para ver los detalles de una red virtual, ejecute:
$ virsh net-dumpxml default
Reemplace "predeterminado" con el nombre de su red en el comando anterior.
Salida de muestra:
<network connections='1'>
<name>default</name>
<uuid>ce25d978-e455-47a6-b545-51d01bcb9e6f</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:ee:35:49'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
2.3. Iniciar redes virtuales
Para iniciar una red inactiva, ejecute:
$ virsh net-start <Name-Of-Inactive-Network>
Para iniciar automáticamente una red:
$ virsh net-autostart <network-name>
2.4. Crear volcado XML de redes virtuales
Para crear el archivo de configuración XML de una red virtual existente, ejecute:
$ virsh net-dumpxml default > default.xml
El comando anterior creará la configuración XML de la red "predeterminada" y la guardará en un archivo llamado "default.xml" en el directorio actual.
Puede ver el archivo XML usando el comando cat:
$ cat default.xml
<network connections='1'>
<name>default</name>
<uuid>ce25d978-e455-47a6-b545-51d01bcb9e6f</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:ee:35:49'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
2.5. Crear nuevas redes virtuales a partir de un archivo XML
Para crear una nueva red virtual utilizando un archivo XML existente e iniciarlo de inmediato, ejecute:
$ virsh net-create <Name-of-XMLfile>
Si desea crear una red a partir de un archivo XML pero no desea iniciarla automáticamente, ejecute:
$ virsh net-define <Name-of-XMLfile>
2.6. Desactivar redes virtuales
Para desactivar una red activa, ejecute:
$ virsh net-destroy <network-name>
2.7. Eliminar redes virtuales
Para eliminar una red virtual, desactívela primero como se muestra arriba y luego ejecute:
$ virsh net-undefine <Name-Of-Inactive-Network>
Virsh tiene muchos comandos y opciones. Aprender a usar la herramienta de línea de comandos de Virsh a fondo es suficiente para configurar un entorno virtual completo en Linux. No necesita ninguna aplicación GUI.
Para obtener más detalles, consulte las páginas man de virsh.
$ man virsh
3. Administre invitados KVM gráficamente
Recordar todos los comandos virsh es casi imposible y también innecesario. Si le resulta difícil realizar todas las tareas de administración de KVM desde la línea de comandos, puede probar las herramientas gráficas de administración de KVM, como Virt-manager y Cockpit.
- Administre máquinas virtuales KVM mediante la consola web Cockpit
- Cómo administrar máquinas virtuales KVM con Virt-Manager
Conclusión
Si sabe cómo administrar máquinas virtuales KVM con la interfaz de usuario de administración de Virsh en Linux, está a mitad de camino para administrar un entorno de virtualización de nivel empresarial. Configurar KVM y administrar máquinas virtuales KVM usando el comando virsh es muy importante para todos los administradores de Linux.
Imagen destacada de Elias Sch. de Pixabay.