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 volumen LVM

Primero debemos inicializar una partición: pvcreate /dev/sdb1

Después crear un volume group: vgcreate vg0 /dev/sdb1

Ahora ya podemos crear un volumen: lvcreate -L10G -nnombre vg0

Esto creará un device en /dev/mapper/vg0-nombre (también accesible como /dev/vg0/nombre) de 10GB.

Si queremos usar este volumen para montarlo en, por ejemplo /mnt/nombre con ext4 como filesystem, haremos lo siguiente:

mkdir -p /mnt/nombre
mke2fs -j -t ext4 /dev/vg0/nombre
mount /dev/vg0/nombre /mnt/nombre

Fuente: http://kirriwa.net/john/doc/lvm+raid1.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

Iniciar un KVM guest con un LiveCD u otra ISO

Una vez que tenemos una máquina virtual (VM) instalada en KVM, ya no queda montada la ISO inicial con la que hemos instalado la VM.

Con virt-manager se puede hacer de forma visual, pero si queremos hacerlo con virsh edit dominio tendremos que modificar lo siguiente:

<os>
<type arch='x86_64' machine='pc-1.1'>hvm</type>
<boot dev='cdrom'/>
<boot dev='hd'/>
</os>

Hemos añadido el CDRom como primer boot device.

Ahora definimos donde se encuentra la ISO que queremos iniciar:

<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/path/to/my/file.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='1' target='0' unit='0'/>
</disk>

Hay que cambiar el disk type y añadir la sección source con el path a la ISO.

Si después queremos iniciar con el disco duro de la VM, tendremos que cambiar el orden de la sección os, poniendo primero el disco duro.

Fuente: http://mycfg.net/articles/booting-from-a-cdrom-in-a-kvm-guest-with-libvirt.html