El shell virtual, o virsh, es una utilidad de línea de comandos flexible para administrar máquinas virtuales (VM) controladas por libvirt, que es un conjunto de herramientas y una API para administrar plataformas de virtualización. Es la herramienta de administración predeterminada para máquinas virtuales basadas en kernel (KVM) de Linux y también es compatible con Xen, VMware y otras plataformas.
El virsh
El comando le permite administrar máquinas virtuales de forma interactiva o por lotes. También es útil para controlar máquinas virtuales desde el shell de Linux y se integra con scripts o herramientas de automatización. Usando virsh
, puede conectarse rápidamente a un servidor mediante shell seguro (SSH) y realizar operaciones en sus máquinas virtuales sin acceso a una interfaz gráfica.
Cuando ejecutas virsh
sin ninguna opción, intenta conectarse a un hipervisor local. Para Linux, la conexión predeterminada apunta a un sistema QEMU local para administrar máquinas KVM locales. También puede conectarse a un hipervisor remoto usando la opción -c
o --connect
y especificar el identificador uniforme de recursos (URI) del hipervisor remoto mediante la sintaxis de libvirt. Para obtener más información, consulte la especificación URI de libvirt.
Por defecto, virsh
proporciona cientos de subcomandos y opciones que le permiten administrar todos los aspectos de su plataforma de virtualización o máquinas virtuales. En este artículo, compartiré los ocho virsh
subcomandos que uso más a menudo. Debido a la naturaleza del trabajo diario, la mayoría de estos subcomandos se aplican directamente a las máquinas virtuales (o dominios en terminología libvirt) pero virsh
también tiene comandos para administrar la plataforma en sí, como agregar grupos de almacenamiento, redes y más.
lista de virus
virsh list
es un comando básico que enumera todos los dominios en ejecución (VM). También puede enumerar todas las máquinas virtuales configuradas agregando --all
opción. Esto es útil si desea ver todas las máquinas virtuales configuradas en el hipervisor de destino que puede usar en comandos posteriores. Por ejemplo, para enumerar todas las máquinas virtuales disponibles en un hipervisor KVM de Linux local:
# virsh list --all
Id Name State
------------------------------
3 rh8-vm01 running
- crc shut off
- rh8-tower01 shut off
Puede utilizar el ID o el nombre de dominio como entrada para los comandos posteriores.
iniciar/reiniciar/apagar virsh
Aunque son diferentes, he agrupado el start
, reboot
y shutdown
subcomandos porque realizan la misma operación básica de administrar el estado de energía de la VM.
Para apagar la máquina virtual rh8-vm01
(de la list
comando anterior):
# virsh shutdown rh8-vm01
Domain 'rh8-vm01' is being shutdown
# virsh list
Id Name State
--------------------
Puede iniciarlo de nuevo usando el start
subcomando:
# virsh start rh8-vm01
Domain 'rh8-vm01' started
# virsh list
Id Name State
--------------------------
4 rh8-vm01 running
Mediante el uso de estos subcomandos, puede iniciar, reiniciar o apagar rápidamente una máquina virtual sin tener que iniciar una aplicación gráfica pesada.
[ También podría estar interesado en aprender a editar sshd_config usando un script Bash. ]
virsh dumpxml
El dumpxml
El subcomando vuelca la configuración XML para un dominio determinado. Puede usarlo para exportar la configuración a un archivo para realizar cambios en una VM existente o usarlo como plantilla para crear otra VM con una configuración similar. Por defecto, vuelca la configuración a STDOUT , así que rediríjalo a un archivo usando operadores de redirección de shell >
para guardar en un archivo:
# virsh dumpxml rh8-vm01
<domain type='kvm' id='4'>
<name>rh8-vm01</name>
<uuid>53b92c48-fce3-4464-95bf-6f442e988c94</uuid>
<metadata>
<libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
<libosinfo:os id="http://redhat.com/rhel/8.4"/>
</libosinfo:libosinfo>
</metadata>
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
<vcpu placement='static'>2</vcpu>
... TRUNCATED OUTPUT ...
</domain>
Puede utilizar la salida XML en secuencias de comandos y herramientas de automatización para automatizar la creación de máquinas virtuales.
virsh domifaddr
El domifaddr
El subcomando enumera todas las direcciones IP configuradas para todas las interfaces virtuales en una máquina virtual determinada. Es útil si la VM usa direcciones IP dinámicas, ya que le permite ver la dirección IP asignada y conectarse a la VM:
# virsh domifaddr rh8-vm01
Name MAC address Protocol Address
-------------------------------------------------------------------------------
vnet6 52:54:00:c8:17:6e ipv4 192.168.122.19/24
vnet7 52:54:00:04:4d:ac ipv4 192.168.64.210/24
De forma predeterminada, enumera la dirección IP arrendada por un servidor DHCP. Si el hipervisor no proporciona esta información, también puede usar la opción --source agent
para consultar el sistema operativo invitado (SO) directamente a través del agente de virtualización. Esto requiere un agente de virtualización instalado en el sistema operativo huésped.
edición virtual
El edit
El subcomando abre la configuración XML actual en su $EDITOR
predeterminado , lo que le permite realizar modificaciones en vivo en una máquina virtual:
# virsh edit rh8-vm01
<domain type='kvm'>
<name>rh8-vm01</name>
<uuid>53b92c48-fce3-4464-95bf-6f442e988c94</uuid>
<metadata>
... TRUNCATED OUTPUT ...
</domain>
Después de realizar sus modificaciones, guarde el archivo para aplicarlas. Es posible que algunas modificaciones solo surtan efecto después de reiniciar.
edición de red de virsh
La net-edit
El subcomando le permite realizar modificaciones en vivo a una configuración de red virtual. Es útil para cambiar las opciones de una red virtual, como asociar una dirección MAC dada a una dirección IP usando libvirt
estándar. Configuración DHCP. Es un comando más avanzado que uso regularmente. Me gusta el edit
subcomando, abre el archivo de configuración en su $EDITOR
predeterminado por hacer cambios. Guarde el archivo para aplicar los cambios:
# virsh net-edit --network hostonly
<network>
<name>hostonly</name>
<uuid>eddd03ff-5825-42ef-bc99-968bddf773c2</uuid>
<bridge name='virbr1' stp='on' delay='0'/>
<mac address='52:54:00:67:75:b1'/>
<domain name='hostonly'/>
<ip address='192.168.64.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.64.128' end='192.168.64.254'/>
</dhcp>
</ip>
</network>
También puede usar otros subcomandos relacionados con la red que comiencen con net-
para administrar diferentes aspectos de las redes virtuales del hipervisor.
[ Descargar ahora:una guía para administradores de sistemas sobre secuencias de comandos Bash. ]
¿Qué sigue?
virsh es una utilidad poderosa y flexible que le permite administrar todos los aspectos de la virtualización de Linux y otras plataformas. Para obtener más información al respecto, consulte las páginas del manual o consulte su documentación en línea.