Gestión de máquinas virtuales KVM mediante virsh

En esta sección se explican de manera rápida los comandos de gestión de las máquinas virtuales KVM que pueden ser invocados a través de la interfaz de administración remota virsh.

La conexión al servidor KVM de máquinas virtuales utilizando la interfaz de administración de línea de comando virsh puede realizarse de manera local como se muestra a continuación.

$ virsh -c qemu:///system

O de manera remota a través de la red de datos. En este caso es necesario especificar la dirección IP o nombre FQDN del servidor de máquinas virtuales. Es preferible utilizar adicionalmente el servicio de SSH para garantizar la seguridad de la información transmitida.

$ virsh -c qemu+ssh://SERVIDOR/system

Los comandos de la interfaz de administración virsh pueden ejecutarse directamente en ella como se muestran a continuación en esta sección, para esto se debe realizar una conexión previa con la consola.

Por ejemplo:

$ virsh -c qemu+ssh://SERVIDOR/system

    virsh # start DOMINIO

Una forma mas rápida es obviando el paso de la conexión como se muestra a continuación. Esta modalidad es útil si sólo se desea ejecutar un unico comando en la consola virsh.

$ virsh -c qemu+ssh://SERVIDOR/system start DOMINIO

Este procedimiento permite listar las máquinas virtuales que se encuentren activas en el servidor.

virsh # list

El modificador --inactive permite listar únicamente las máquinas virtuales apagadas.

virsh # list --inactive

El modificador --all permite listar las máquinas registradas en el servidor independiente de su estado de ejecución.

virsh # list --all

Para iniciar la ejecución de una máquina virtual se debe utilizar la opción start y el nombre de la misma (dominio).

virsh # start DOMINIO

La opción shutdown envía un mensaje de apagado (limpio) al sistema operativo. Es el método preferido para apagar las máquinas virtuales sin correr riesgos de pérdidas o corrupción de las mismas.

virsh # shutdown DOMINIO

En caso de requerirse un apagado urgente (forzado) puede utilizarse la opción destroy que equivale a desconectar el cable de alimentación eléctrico de la máquina.

virsh # destroy DOMINIO

Para configurar a una máquina virtual para que se inicie automáticamente tan pronto como el servicio KVM se encuentre disponible es necesario utilizar la opción autostart.

virsh # autostart DOMINIO

Para reiniciar una máquina virtual actualmente en ejecución puede utilizarse la combinación de opciones shutdown/start o puede utilizarse la opción resumida reboot.

virsh # reboot DOMINIO

Es posible registrar a una nueva máquina virtual si de esta se cuenta con el archivo de especificación (comúnmente bajo /etc/libvirt/qemu/) y con las imágenes de sus discos duros (según corresponda). Para hacer esto es necesario utilizar la opción define.

virsh # define DOMINIO

Por defecto se espera que el achivo XML con la especificación de la máquina virtual tenga igual nombre que el dominio con la extensión .xml. Si desea utilizarse un nombre diferente al del archivo puede utilizarse el modificador --file para especificar su ruta.

Para obtener la especificación actual (opciones de configuración utilizadas) de una máquina virtual registrada en el servidor se debe utilizar la opción dumpxml.

virsh # dumpxml DOMINIO

Para remover el registro de una máquina virtual en el servidor se debe utilizar la opción undefine, esta eliminar el archivo de especificación de la máquina virtual ubicado por defecto bajo /etc/libvirt/qemu/.

virsh # undefine DOMINIO

Este procedimiento no remueve las imágenes de los discos duros asociados a la máquina virtual eliminada. Si se desea hacer esto automáticamente se deberá incluír el modificador --remove-all-storage.

Para suspender temporalmente a una máquina virtual en ejecución se debe utilizar la opción suspend.

virsh # suspend DOMINIO

Para despertar a una máquina virtual que se encuentra temporalmente suspendida se debe utilizar la opción resume.

virsh # resume DOMINIO

Es posible guardar el estado actual (snapshot) de una máquina virtual para poder volver a trabajar con él posteriormente. Para almacenar este estado es necesario utilizar la opción save especificando una ubicación para su información.

virsh # save DOMINIO /ruta/para/SNAPSHOT

Es posible restaurar el estado (snapshot) de una máquina virtual guardado previamente para continuar con su uso. Para recuperar este estado es necesario utilizar la opción restore especificando la ruta en donde este fue almacenado.

virsh # restore /ruta/para/SNAPSHOT

Para montar un sistema de archivos del servidor de máquinas virtuales (incluyendo imágenes ISO) en una máquina virtual se debe utilizar la opción attach-disk especificando su ruta de orígen (anfitrión) y su punto de montaje (invitado).

virsh # attach-disk DOMINIO /ruta/imagen.iso /media/MONTAJE

Para desmontar un sistema de archivos externo de una máquina virtual se debe utilizar la opción detach-disk especificando el dispositivo a desmontarse.

virsh # detach-disk DOMINIO DISPOSITIVO

Antes de clonar una máquina virtual (como imagen), se necesita tener apagado la actual por cualquier cosa.

Para verificarlo, entramos a la consola y escribimos:

virsh list --all

Y esto saldrá por pantalla:

Id Name State
----------------------------------
- debianPrueba shut off

Esto indica que la máquina que queremos clonar está apagada.

virt-clone -o debianPrueba -n copiadebianPrueba -f /var/lib/libvirt/images/copiadebianPrueba.img

Una vez creada el clon de la nueva máquina virtual se tiene que realizar algunos cambios dentro de la nueva máquina virtual (la clonada):

Ayuda:

Para prender la nueva máquina virtual, escribimos en la consola:

virsh start copiadebianPrueba

Para acceder a la nueva máquina virtual, escribimos en la consola:

virt-viewer --connect=qemu:///system copiadebianPrueba

Posteriormente:

Editar la nueva MAC address. Para conseguir la nueva MAC Address tenemos que crear el xml de la nueva máquina virtual. Para hacerlo escribimos en la consola:

virsh dumpxml copiadebianPrueba > /tmp/copiadebianPrueba.xml. Ahí dentro se tiene la nueva MAC. 

Ahora en la nueva máquina virtual escribimos en la consola

vim /etc/udev/rules.d/70-persistent-net.rules. 

Te va a aparecer dos lineas. La primera se tiene que eliminar y la segunda linea se tiene que controlar la MAC address es la misma que el que esta en el archivo xml que recién creamos. También se tiene que verificar que la interfaz corresponde a la misma que está configurada

vim /etc/sysconfig/network

Cambiar el hostname.

1.- Entramos al gestor de maquinas virtuales KVM
2.- Nos conectamos al hypervisor de Errekalde
3.- Seleccionamos la máquina a clonar
4.- Con el botón derecho damos al botón de clonar
5.- Nos saldrá una nueva ventana en la que deberemos especificar nombre para la máquina nueva, el entorno de red con una nueva MAC, y la imagen a clonar
6.- Aceptamos y se pondrá en marcha el proceso de clonación
7.- Una vez la tengamos clonada, hay que modificar datos de conexión en la nueva:

Hostname, MAC e IP

Algunas veces al clonar servidores Linux nos podemos encontrar con este tipo de errores:

ifup eth0

Activando interfaz eth0: El dispositivo eth0 no parece estar presente, retrasando la inicialización.

En este caso estamos tratando con un CentOS 6.4 x64. Este error es debido a que al clonar el servidor o importarlo, el entorno de virtualización nos ha asignado una MAC diferente a la que teníamos anteriormente. CentOS detecta la nueva MAC como si se tratase de un nuevo dispositivo, y nos lo añade al UDEV. El UDEV nos permite trabajar de forma más eficaz con equipos con muchos dispositivos (en lugar de tener una lista interminable en el /dev).

Tenemos pues que seguir estos sencillos pasos:

– Primero accedemos al fichero de configuración de Udev :

vi /etc/udev/rules.d/70-persistent-net.rules

# PCI device 0x8086:0x100f (e1000) SUBSYSTEM==“net”, ACTION==“add”, DRIVERS==“?*”, ATTR{address}==“00:0c:29:42:29:eb”, ATTR{type}==“1”, KERNEL==“eth*”, NAME=“eth0”

# PCI device 0x8086:0x100f (e1000) SUBSYSTEM==“net”, ACTION==“add”, DRIVERS==“?*”, ATTR{address}==“00:0c:29:5a:bb:48”, ATTR{type}==“1”, KERNEL==“eth*”, NAME=“eth2”

Como podemos ver en este ejemplo disponemos de dos tarjetas, la eth0 corresponde al servidor original, mientras que la eth2 se ha creado al iniciar el clon y disponer de una nueva MAC. Simplemente comentaremos la eth0 (o eliminamos la línea) y pondremos que la eth2 es en realidad la eth0. Quedaria algo asi:

# PCI device 0x8086:0x100f (e1000) #SUBSYSTEM==“net”, ACTION==“add”, DRIVERS==“?*”, ATTR{address}==“00:0c:29:42:29:eb”, ATTR{type}==“1”, KERNEL==“eth*”, NAME=“eth0”

# PCI device 0x8086:0x100f (e1000) SUBSYSTEM==“net”, ACTION==“add”, DRIVERS==“?*”, ATTR{address}==“00:0c:29:5a:bb:48”, ATTR{type}==“1”, KERNEL==“eth*”, NAME=“eth0”

- A continuación debemos editar nuestro fichero de configuración de la eth0, ya que en este fichero constará aun como MAC la de la primera tarjeta:

vi /etc/sysconfig/network-scripts/ifcfg-eth0

- Una vez realizados los cambios simplemente reiniciamos el servicio.

service network restart