Product SiteDocumentation Site

Capítulo 15. Administración de huéspedes virtuales con virsh

virsh es una herramienta de línea de comando para administrar a los huéspedes y al hipervisor.
La herramienta virsh se crea en la API de administración libvirt y funciona como una alternativa para el comando xm y el Administrador de huésped gráfico (virt-manager). virsh puede ser utilizado en modo de sólo lectura por usuarios sin privilegios. Se puede utilizar virsh para ejecutar scripts para las máquinas de huésped.
referencia rápida del comando virsh
La siguientes tablas son una rápida referencia para todas las opciones de línea de comandos de virsh.
Comando Description
help Imprime información de ayuda básica.
list Lista todos los huéspedes.
dumpxml Entrega el archivo de configuración XML para el huésped.
create Crea un huésped desde un archivo de configuración XML e inicia el nuevo huésped.
start Inicia un huésped inactivo.
destroy Obliga a un huésped a detenerse.
define Entrega un archivo de configuración XML para un huésped.
domid Muestra el ID de huésped.
domuuid Muestra el UUID de huésped.
dominfo Muestra información de huésped.
domname Muestra nombre de huésped.
domstate Muestra el estado de un huésped.
quit Sale de la terminal interactiva.
reboot Reinicia un huésped.
restore Restaura una sesión guardada anteriormente en un archivo.
resume Reanuda un huésped en pausa.
save Guarda el estado de un huésped en un archivo
shutdown Apaga un huésped de forma apropiada.
suspend Pone en pausa a un huésped.
undefine Borra todos los archivos asociados con un huésped.
migrate Migra un huésped a otros host.
Tabla 15.1. Comandos de administración de huésped

Los siguientes comandos de virsh se utilizan para administrar recursos del hipervisor:
Comando Description
setmem Establece la memoria asignada para un huésped.
setmaxmem Establece el límite máximo de memoria para el hipervisor.
setvcpus cambia el número de CPU virtuales asignadas a un huésped.
vcpuinfo Muestra información de CPU virtual sobre un huésped.
vcpupin Controla la afinidad de CPU virtual de un huésped.
domblkstat Muestra las estadísticas de dispositivo de bloque para un huésped en ejecución.
domifstat Muestra estadísticas de interfaz de red para un huésped en ejecución.
attach-device Conecta un dispositivo a un huésped, mediante la definición de un dispositivo en un archivo XML.
attach-disk Conecta un nuevo dispositivo de disco para un huésped.
attach-interface Conecta una nueva interfaz de red para un huésped.
detach-device Desconecta un dispositivo de un huésped, adquiere la misma clase de descripciones del comando attach-device.
detach-disk Desconecta un dispositivo de disco desde un huésped.
detach-interface Desconecta una interfaz de red de un huésped.
Tabla 15.2. Opciones de administración de recursos

Estas son las opciones misceláneas de virsh:
Comando Description
version Muestra la versión de virsh
nodeinfo Entrega información acerca del hipervisor
Tabla 15.3. Opciones misceláneas

Conexión al hipervisor
Conectar a la sesión del hipervisor con virsh:
# virsh connect {hostname OR URL}
Donde <name> es el nombre de la máquina del hiperviso. Para iniciar una conexión de sólo-lectura, añada el comando anterior a -readonly.
Creación de un volcado de máquina virtual XML (archivo de configuración)
Salida de un archivo de configuración XML de huésped con virsh:
# virsh dumpxml {domain-id, domain-name or domain-uuid}
Este comando muestra el archivo de configuración XML del huésped en un formato de salida standard (stdout). Se pueden guardar los datos si entuba la salida del comando a un archivo. Un ejemplo de entubado de la salida a un archivo llamado huésped.xml:
# virsh dumpxml ID_Huésped > huésped.xml
Este archivo huésped.xml puede volver a crear el huésped (Edición de un archivo de configuración de huésped.). Puede editar este archivo de configuración XML para configurar dispositivos adicionales o para utilizar huéspedes adicionales. Consulte la Sección 18.1, “Uso de los archivos de configuración XML con virsh” for more information on modifying files created with virsh dumpxml.
Un ejemplo de salida de virsh dumpxml:
# virsh dumpxml r5b2-mySQL01
<domain type='xen' id='13'>
    <name>r5b2-mySQL01</name>
    <uuid>4a4c59a7ee3fc78196e4288f2862f011</uuid>
    <bootloader>/usr/bin/pygrub</bootloader>
    <os>
        <type>linux</type>
        <kernel>/var/lib/libvirt/vmlinuz.2dgnU_</kernel>
        <initrd>/var/lib/libvirt/initrd.UQafMw</initrd>
        <cmdline>ro root=/dev/VolGroup00/LogVol00 rhgb quiet</cmdline>
    </os>
    <memory>512000</memory>
    <vcpu>1</vcpu>
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>restart</on_crash>
    <devices>
        <interface type='bridge'>
            <source bridge='xenbr0'/>
            <mac address='00:16:3e:49:1d:11'/>
            <script path='vif-bridge'/>
        </interface>
        <graphics type='vnc' port='5900'/>
        <console tty='/dev/pts/4'/>
    </devices>
</domain>
Creación de un huésped desde el archivo de configuración
Los huéspedes pueden ser creados desde los archivos de configuración XML. Se pueden copiar los XML existentes de los huéspedes creados anteriormente, o utilizar la opción dumpxml (consulte Creación de un volcado de máquina virtual XML (archivo de configuración)). Para crear un huésped desde un archivo XML con virsh:
# virsh create configuration_file.xml
Edición de un archivo de configuración de huésped.
En lugar de utilizar la opción dumpxml (consulte Creación de un volcado de máquina virtual XML (archivo de configuración)), los huéspedes pueden ser editados o bien cuando estén en ejecución, o bien cuando estén desconectados. El comando virsh edit proporciona esta funcionalidad. Por ejemplo, para editar el huésped llamado softwaretesting:
# virsh edit softwaretesting
Éste abre un editor de texto. El editor de texto predeterminado es el parámetro de shell $EDITOR (configure vi por defecto).
Suspender un huésped
Suspende un huésped con virsh:
# virsh suspend {domain-id, domain-name or domain-uuid}
Cuando un dominio está suspendido, consume memoria RAM del sistema, pero no recursos de procesador. Mientras el dominio esté suspendido, no estarán disponibles ni los discos, ni entrada y salida de red. Esta operación es inmediata y el huésped puede ser reiniciado con la opción resume (Reanudar un huésped).
Reanudar un huésped
Restaure un huésped suspendido con virsh mediante la opción resume:
# virsh resume {domain-id, domain-name or domain-uuid}
Esta operación es inmediata y los parámetros de huésped son preservados para operaciones suspend y resume.
Guardar un huésped
Guarde el estado actual de un huésped en un archivo mediante el comando virsh:
# virsh save {domain-name, domain-id or domain-uuid} filename
Este comando detiene el huésped determinado y guarda los datos en un archivo, lo cual puede durar algún tiempo dependiendo de la cantidad de memoria que el huésped esté utilizando. Puede restablecer el estado del huésped con la opción restore (Restaurar un huésped). 'Guardar' funciona en forma similar a realizar una pausa: en vez de simplemente poner en pausa a un huésped, el estado actual del huésped es guardado.
Restaurar un huésped
Restaura un invitado guardado previamente con el comando virsh save (Guardar un huésped) mediante virsh:
# virsh restore filename
Este comando restaura el huésped guardado, lo cual puede tomar algún tiempo. El nombre y UUID del huésped son preservados pero se les asigna un nuevo ID.
Apagar un huésped
Apaga un huésped mediante el comando virsh:
# virsh shutdown {domain-id, domain-name or domain-uuid}
Puede controlar el comportamiento del reinicio del huésped si modifica el parámetro on_shutdown en el archivo de configuración del huésped
Reiniciar un huésped
Reiniciar un huésped mediante el comando virsh:
#virsh reboot {domain-id, domain-name or domain-uuid}
Puede controlar el comportamiento de un huésped si modifica el parámetro on_reboot en el archivo de configuración del huésped.
Forzar al huésped a detenerse
Obliga a un huésped a detenerse con el comando virsh:
# virsh destroy {domain-id, domain-name or domain-uuid}
Este comando apaga y detiene en forma abrupta el huésped determinado. Si utiliza virsh destroy, pueden llegar a corromperse los sistemas de archivo del huésped. Utilice la opción destroy sólo si el huésped no responde. Para huéspedes para-virtualizados, utilice en su lugar la opción shutdown (Apagar un huésped).
Obtener el ID de dominio de un huésped
Para obtener el ID de dominio de un huésped:
# virsh domid {domain-name or domain-uuid}
Obtener el nombre de dominio de un huésped
Para obtener el nombre de dominio de un huésped:
# virsh domname {domain-id or domain-uuid}
Obtener el UUID para un huésped
Para obtener el Identificador único universal (UUID) para un huésped:
# virsh domuuid {domain-id or domain-name}
Un ejemplo de la salida de virsh domuuid:
# virsh domuuid r5b2-mySQL01
4a4c59a7-ee3f-c781-96e4-288f2862f011
Mostrar la información de huésped
Mediante virsh con el ID de dominio de huésped, nombre de domino o UUID se puede ver la información sobre un huésped específico:
# virsh dominfo {domain-id, domain-name or domain-uuid}
Este es un ejemplo de salida de virsh dominfo:
# virsh dominfo r5b2-mySQL01
id:             13
name:           r5b2-mysql01
uuid:           4a4c59a7-ee3f-c781-96e4-288f2862f011
os type:              linux
state:          blocked
cpu(s):         1
cpu time:             11.0s
max memory:     512000 kb
used memory:    512000 kb
Mostrar información del host
Para ver información sobre el huésped:
# virsh nodeinfo
Un ejemplo de salida de virsh nodeinfo:
# virsh nodeinfo
CPU model                    x86_64
CPU (s)                      8
CPU frequency                2895 Mhz
CPU socket(s)                2      
Core(s) per socket           2
Threads per core:            2
Numa cell(s)                 1
Memory size:                 1046528 kb
Se muestra la información del nodo y de la máquina que soporta el proceso de virtualización.
Mostrar los huéspedes
Para ver la lista de huéspedes y su estado actual con virsh:
# virsh list
Otras opciones incluyen:
La opción --inactive para listar los huéspedes inactivos (es decir, los huéspedes que han sido definidos pero que no están activos) y
La opción --all lista todos los huéspedes. Por ejemplo:
# virsh list --all
 Id Name                 State
----------------------------------
  0 Domain-0             running
  1 Domain202            paused
  2 Domain010            inactive
  3 Domain9600           crashed
La salida desde virsh list se categoriza como uno de los seis estados (listados abajo).
Mostrar información de la CPU virtual
Para ver la información de la CPU virtual desde un huésped con virsh:
# virsh vcpuinfo {domain-id, domain-name or domain-uuid}
Un ejemplo de salida de virsh vcpuinfo:
# virsh vcpuinfo r5b2-mySQL01
VCPU:           0
CPU:            0
State:          blocked
CPU time:       0.0s
CPU Affinity:   yy
Configurar la afinidad de la CPU virtual
Para configurar la afinidad de la CPU virtual con las CPU físicas:
# virsh vcpupin {domain-id, domain-name or domain-uuid} vcpu, cpulist
Donde vcpu es el número de VCPU virtual y cpulist lista el número de CPU.
Configurar la cuenta de CPU virtual
Para modificar el número de CPU asignadas a un huésped con virsh:
# virsh setvcpus {domain-name, domain-id or domain-uuid} count
El nuevo valor count no puede exceder la cuenta de la cantidad que se especificó durante la creación del huésped.
Configurar la asignación de memoria
Para modificar la asignación de memoria de huésped con virsh:
# virsh setmem {domain-id or domain-name} count
Debe especificar la cuenta en kilobytes. La nueva cantidad no puede exceder la cantidad especificada durante la creación del huésped. Los valores por debajo de 64 MB probablemente no funcionarán con la mayor parte de sistemas operativos de huésped. La cantidad máxima de memoria no afectará el uso actual al huésped activo a menos que el nuevo valor sea menor, el cual disminuirá el uso de memoria disponible.
Mostrar información de dispositivo de bloque de huésped
Utilice virsh domblkstat para ver las estadísticas del dispositivo de bloque para un huésped en ejecución.
# virsh domblkstat GuestName block-device
Mostrar información del dispositivo de red de huésped
Use virsh domifstat para ver las estadísticas de interfaz de red para un huésped en ejecución.
# virsh domifstat GuestName interface-device 
Migrar huéspedes con virsh
Un huésped puede ser migrado a otro host con virsh. Para migrar el dominio a otro host, añada --live para migración en vivo. El comando migrate acepta parámetros en el siguiente formato:
# virsh migrate --live GuestName DestinationURL
El parámetro --live es opcional. Añada el parámetro --live para migraciones en vivo.
The GuestName parameter represents the name of the guest which you want to migrate.
The DestinationURL parameter is the URL or hostname of the destination system. The destination system must run the same version of Fedora, be using the same hypervisor and have libvirt running.
Once the command is entered you will be prompted for the root password of the destination system.
Administrar redes virtuales
Esta sección cubre el manejo de redes virtuales con el comando virsh. Para listar las redes virtuales:
# virsh net-list
Este comando genera un mensaje de salida similar al siguiente:
# virsh net-list
Name                 State      Autostart
-----------------------------------------
default              active     yes      
vnet1                     active     yes      
vnet2                     active     yes
Para ver la información de red específica de una red virtual utilice:
# virsh net-dumpxml NetworkName
Este comando muestra la información sobre la red virtual especificada en formato XML:
# virsh net-dumpxml vnet1
<network>
  <name>vnet1</name>
  <uuid>98361b46-1581-acb7-1643-85a412626e70</uuid>
  <forward dev='eth0'/>
  <bridge name='vnet0' stp='on' forwardDelay='0' />
  <ip address='192.168.100.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.100.128' end='192.168.100.254' />
    </dhcp>
  </ip>
</network>
Otros comandos de virsh para administrar redes virtuales son: