Renombrar un dominio KVM

No hay una forma directa para renombrar un dominio (una máquina virtual) de KVM. Lo que se puede hacer es lo siguiente:

virsh dumpxml viejavm > dump.xml

Editamos el archivo dump.xml y cambiamos el nombre viejo por el nuevo que queremos.

Borramos el viejo dominio y cargamos el nuevo:

virsh undefine viejavm
virsh define dump.xml

Fuente: https://www.redhat.com/archives/libvirt-users/2010-October/msg00072.html

Añadir un nuevo disco a una máquina virtualizada con KVM

NOTA: sólo válido para discos con bus virtio

Como indicaba en otro post, hago backups de las máquinas virtuales con pigz. Para que los backups sean de poco tamaño, lo mejor es tener un volumen lógico de poco tamaño para los archivos del sistema de la máquina virtual y luego añadir otro LV de gran tamaño y montarlo dentro de la VM.

Si ya tenemos la VM y queremos añadir un nuevo disco para tener más capacidad y que no afecte al backup, crearemos un nuevo volumen lógico de 100GB para usarlo dentro de la VM:

lvcreate -L100G -ndebian-mnt vg0

Crearemos un archivo XML indicando los parámetros que serán pasados con virsh a la VM:

vi /tmp/disconuevo.xml
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source dev='/dev/vg0/debian-mnt'/>
<target dev='vdb' bus='virtio'/>
</disk>

Ahora, incluso con la VM corriendo, se puede añadir este disco en caliente:

virsh attach-device --persistent Dominio /tmp/disconuevo.xml

--persistent hace que se modifique el Dominio permanentemente con este nuevo disco.

Fuente: http://serverfault.com/questions/457250/kvm-and-libvirt-how-do-i-hotplug-a-new-virtio-disk

Crear backup de un LVM snapshot con pigz

Un LVM snapshot crea una “imagen” de cualquier volumen lógico que tengamos. Esta “imagen” es como si tuviera todos los datos del volumen lógico cuando se creó el snapshot. NOTA: los snapshots no están destinados a ser usados directamente como backups, porque repercuten negativamente en el rendimiento del disco (cada modificación en el LV, tiene que actualizarse el snapshots)

Esto es bueno para hacer backups de, por ejemplo, una máquina virtualizada con KVM y que use como disco (block) un volumen lógico dentro de la máquina host. Lo que se hace es crear el LVM snapshot (que tarda un par de segundos como mucho) y ya se tiene una “instantánea” de la máquina virtualizada con KVM lista para poder hacer backup.

Para comprimir usaremos pigz, que es una modificación de gzip pero que aprovecha todos los cores/threads de la máquina para comprimir más rápido. Hice pruebas y donde gzip tardaba unos 15 minutos, pigz lo hacía en unos 4 minutos.

Comando para crear un snapshot Debian-snapshot, de un volumen lógico debian y de tamaño máximo de cambio con respecto al volumen original de 1GB:

lvcreate --snapshot -L1G -nDebian-snapshot /dev/vg0/debian

Se puede comprobar que está bien creado con lvs

Ahora, con el snapshot creado, lo comprimimos con pigz:

</dev/vg0/Debian-snapshot pigz -c > /path/to/backup/debian.gz

Ahora ya tenemos el archivo comprimido y podemos hacer con él lo que queramos: cifrarlo con gnupg, enviarlo a un equipo remoto, etc.

Finalmente, hay que borrar el snapshot para que no perjudique al rendimiento del disco:

lvremove -f /dev/vg0/Debian-snapshot

Expandir una imagen de disco de un KVM guest con virt-resize

Necesitamos que la imagen del disco del KVM guest esté en un volumen lógico (LV).

Supongamos que queremos expandir a 100GB la siguiente imagen:

root:~# virt-df -h /dev/vg0/debian
Filesystem                                Size       Used  Available  Use%
debian:/dev/sda1                           28G       4.2G        22G   16%

El tamañan actual de /dev/sda1 es 28GB y queremos pasarlo a 100GB.

Primero apagamos la máquina virtual. Luego hacemos backup de la imagen (lvrename es como un mv):

lvrename /dev/vg0/debian /dev/vg0/debian.backup

Creamos el nuevo disco:

lvcreate -L100G -ndebian vg0

Ahora redimensionamos /dev/sda1 con virt-resize:

virt-resize /dev/vg0/debian.backup /dev/vg0/debian --expand /dev/sda1

Ya tenemos la imagen que contiene la máquina virtual con un tamaño de 100GB. Lo que hace falta ahora es expandir también el filesystem de la máquina virtual para que aproveche todo el espacio. Para esto usaremos la aplicación guestfish (disponible en Debian Wheezy y Sid), aunque sólo es válido para particiones con ext2, ext3 y ext4:

guestfish -a /dev/vg0/debian

Esto lanzará un command line donde pondremos lo siguiente (ojo ahora al device, puede que ya no sea /dev/sda1 y sea /dev/vda1, por ejemplo):

run
resize2fs /dev/vda1
exit

Si todo ha ido bien, ya tendremos la máquina virtual con 100GB de disco. Si arranca sin problemas, podremos borrar el backup que hicimos al principio:

lvchange -an /dev/vg0/debian.backup
lvremove /dev/vg0/debian.backup

Fuente: http://askaralikhan.blogspot.com.es/2011/07/expanding-kvm-guest-disk-image-using.html

Crear un nuevo pool en KVM con LVM

Para evitar el siguiente error por culpa de los nombres:

error: Failed to start pool vg0guest
error: internal error Child process (/sbin/vgchange -aly vg0guest) status unexpected: exit status 5

Hay que especificar el nombre del LV:

virsh pool-define-as vg0guest logical --source-name vg0 --target /dev/vg0

Fuente: http://serverfault.com/questions/352641/how-can-i-use-the-hosts-lvm-vg-as-a-kvm-pool