Configuración de los medios de almacenamiento local para las VMs en Xen

Xen, en conjunto con el kernel XenLinux ofrecen varias alternativas para el medios de almacenamiento de las máquinas virtuales, también conocidos como discos duros virtuales, el medio de almacenamiento para las maquinas virtuales Xen se le conoce como Dispositivo de Bloque Virtual (Virtual Block Device), los VBD pueden ser cualquier tipo de dispositivo de bloque soportado por el kernel Linux, como discos o particiones nativas, archivos de imagen raw, volúmenes lógicos LVM entre otros.

Los tipos de VBD soportados en Xen son:

En las siguientes secciones veremos como crear diferentes medios de almacenamiento para las maquinas virtuales usando los tres tipos de almacenamiento local arriba mencionados.

Creando discos virtuales basados en archivos

Los archivos de imagen para discos duros es el medio de almacenamiento más flexible ya que permite respaldar de forma fácil las maquinas virtuales, además que permite mover los discos de las maquinas virtuales a otros sistemas como si fueran archivos ordinarios.

Se recomienda que dedique una particion para almacenar los archivos de imagen, para este documento dedicamos una partición con las siguientes caracteristicas:

  • Partición Linux nativa /dev/sda6 de 60G.

  • Sistema de archivos ext3 montada con opción noatime.

  • El punto de montaje es /xen/storage/0.

Si decide usar el manejador file para imagenes de archivos usando el driver loopback se encontrará con que, por default, la mayoría de distribuciones Linux solo permiten la creación de 8 dispositivos loop lo cual lo limitará al número de discos virtuales que podrá asignar a las maquinas virtuales.

Si usa un kernel en donde el driver loopback se compilo como módulo (CONFIG_BLK_DEV_LOOP=m) y desea permitir la creación de más de 8 dispositivos loop agregue la opción max_loop al módulo loop, usando los archivos en el directorio /etc/modprobe.d/ , por ejemplo:

# echo "options loop max_loop=64" > /etc/modprobe.d/loop

Si el soprte del driver loopback se compilo como built-in (CONFIG_BLK_DEV_LOOP=y) y desea permitir la creación de más de 8 dispositivos loop agregue el parámetro max_loop a la línea del que carga el kernel XenLinux en el archivo de configuración de grub /boot/grub/menu.lst, por ejemplo:

module          /vmlinuz-2.6.18.8-xen root=/dev/sda3 ro console=tty0 max_loop=64

Para crear un archivo de imagen de tipo full use el comando dd, por ejemplo, para crear archivo de imagen de 4GB:

# dd if=/dev/zero of=/xen/storage/0/images/domuX-root.img bs=1024k count=4096

El archivo resultante no tendrá ningún contenido pero si está ocupando el espacio físico, este es la forma recomendada ya que da mejor rendimiento que el tipo sparse.

Los archivos de imagen loop de tipo sparse inicialmente no ocupan espacio, pero si lo reflejan a un simple ls, estos archivos se van redimiensionando conforme se escribe en ellos, si tiene problemas de espacio y quiere aprovechar al máximo el espacio en disco use el tipo sparse pero recuerde que estará sacrificando rendimiento ya que este tipo causa una carga extra en el Dom0, para crear un archivo de imagen de tipo sparse con dd use:

# dd if=/dev/zero of=/xen/storage/0/images/domuX-root.img bs=1024k seek=4096 count=0

Es posible crear un sistema de archivos ext3 sobre un archivo de imagen de bloque, por ejemplo:

# mkfs.ext3 /xen/storage/0/images/domuX-root.img

También puede crear un sistema de archivo swap en un archivo de imagen, por ejemplo:

# mkswap /xen/storage/0/images/domuX-swap.img

Para mayor información de como agregar un disco duro a una maquina virtual vaya a la sección Como agregar discos duros virtuales a maquinas virtuales Xen.

Una de las desventajas de usar discos duros virtuales basados en imágenes es que agregan una carga extra al sistema host, ya que el archivo de imagen esta almacenado en un sistema de archivos del Domain0 lo cual implica que el OS del Dom0 debe realizar operaciones para actualizar la meta información de los archivos y datos, si desea mejor rendimiento se recomienda que use particiones nativas o volúmenes lógicos LVM con el modo de acceso raw, así se evita la carga extra.

Para ver como asignar/export un archivo de imagen a una maquina virtual vaya a la sección Archivos de configuración Xen para maquinas virtuales DomU para ver el formato del parámetro de configuración de dispositivos de bloque a los DomU.

En las siguientes secciones veremos como crear particiones nativas usando el comando fdisk, cfdisk o parted.

Creando archivos de imagen ISO para medios de instalación

Si desea crear un archivo de imagen ISO de un medio de instalación para facilitar la creación de maquinas virtuales puede hacer uso del comando dd, por ejemplo, el dispositivo para el CD/DVD es: /dev/scd0, crearemos el archivo de imagen /xen/storage/isos/:

# dd if=/dev/scd0 of=/xen/storage/isos/ubuntu-10.04-server-amd64.iso

Para verificar que efectivamente es un archivo ISO use el comando file, por ejemplo:

# file /xen/storage/isos/ubuntu-10.04-server-amd64.iso
/xen/storage/isos/ubuntu-10.04-server-amd64.iso: # ISO 9660 CD-ROM filesystem data 'Ubuntu-Server 8.04.4 amd64      ' (bootable)

Para montar la imagen ISO y acceder a su contenido, asocie el archivo a un dispositivo loopback usando el comando losetup, por ejemplo:

# losetup -f /xen/storage/isos/ubuntu-10.04-server-amd64.iso
[Nota] Nota

La opción -f busca un dispositivo loop libre y lo asocia al archivo de imagen.

[Nota] Nota

Si desea mapear el archivo de imagen ISO a un dispositivo loop en especifico use -r /dev/loopX.

Para ver el nombre del dispositivo loop al que fué mapeado el archivo use:

# losetup -a
/dev/loop0: [0805]:269281 (/xen/storage/isos/ubuntu-10.04-server-amd64.iso)
[Nota] Nota

Este es el mismo modo en el que Xen monta los discos duros virtuales basados en archivos de imagen usando el manejador file.

Ahora puede montar el archivo iso como si fuera un dispositivo de bloque normal:

# mount /dev/loop0 /media/cdrom

Para desmontar el dispositivo use:

# umount /dev/loop0

También debe eliminar el mapeo del archivo al dispositivo loop:

# losetup -d /dev/loop0

No olvide desmontar el ISO cuando ya no lo necesite para liberar recursos.

Para ver como asignar/export un archivo de imagen ISO a una maquina virtual vaya a la sección Archivos de configuración Xen para maquinas virtuales DomU para ver el formato del parámetro de configuración de dispositivos de bloque a los DomU.

Creando discos virtuales basados en particiones Linux nativas

Para asignar particiones linux nativas a como discos duros a las maquinas virtuales cree las particiones con la herramienta fdisk, por ejemplo:

# fdisk /dev/sdb

Crear partición linux native de tipo 83, y partición linux swap tipo 82.

También puede usar el comando cfdisk el cual es más gráfico, por ejemplo:

# cfdisk /dev/sdb

Otra alternativa es usar el programa parted, por ejemplo:

# parted /dev/sdb
[Nota] Nota

Si modifico la tabla de particiones en el mismo disco duro en el que esta la partición raíz tendrá que re iniciar el sistema o ejecutar el comando partprobe para que el kernel re lea la tabla de particiones y así cree los archivos de dispositivo de bloque en el directorio /dev, por ejemplo:

# partprobe /dev/sda

Verifique que los archivos de dispositivo esten en el directorio /dev.

Para crear un sistema de archivos ext3 en una nueva partición use el comando mkfs.ext3, por ejemplo:

# mkfs.ext3 /dev/sdb1
[Importante] Importante

Si va dedicar una partición linux nativa al directorio /boot de un DomU PV Linux se recomienda que use un sistema de archivos ext2 para evitar problemas con versiones no soportadas de boot loaders como grub, pygrub y pv-grub.

Para crear un sistema de archivos swap use mkswap:

# mkswap /dev/sdb2

Para ver como asignar/export una partición linux nativa a una maquina virtual vaya a la sección Archivos de configuración Xen para maquinas virtuales DomU para ver el formato del parámetro de configuración de dispositivos de bloque a los DomU.

Creando discos virtuales basados en volúmenes lógicos Linux LVM

Antes que nada asegurese de tener instaladas las herramientas para manipular los volúmenes lógicos LVM, instale el paquete lvm2:

# apt-get install lvm2

Es importante que actualice la imagen initrd con el soporte LVM, por ejemplo para actualizar la imagen initrd para el kernel 2.6.18.8-xen ejecute:

# update-initramfs -u -k 2.6.18.8-xen

Primero debe crear una partición en el disco duro para ser incluido en un volume group, use cfdisk para crear una partición tipo LVM (8e), por ejemplo:

# cfdisk /dev/sdc
[Nota] Nota

Haga lo mismo en cada disco que desee incluir.

Use el comando pvcreate para inicializar la partición recien creada, es decir, crearemos un volúmen físico (Physical Volume) LVM:

# pvcreate /dev/sdc1
[Importante] Importante

Nos se recomienda crear un physical volume en un disco duro completo, ejem: /dev/sda por los problemas de administración que conlleva.

Ahora use el comando vgcreate para crear un Volume Group conformado por los dos Physical Volumes recién inicializados:

# vgcreate VGXen01 /dev/sdc1

Use el comando vgdisplay para mostrar más detalles sobre el Volume Group VGXen01, por ejemplo:

# vgdisplay VGXen01

Con el comando lvcreate creamos los volúmenes lógicos dentro de un Volume Group, por ejemplo, para crear un volúmen lógico de 4GB para la partición raíz del DomU fs1.example.com use:

# lvcreate --size 4G --name fs1.example.com-root VGXen01
  Logical volume "fs1.example.com-root" created

También puede crear volúmenes lógicos para la partición swap:

# lvcreate --size 1G --name fs1.example.com-swap VGCen01
  Logical volume "fs1.example.com-root" created

Cree volúmenes lógicos para las particiones de datos del DomU fs1:

# lvcreate --size 100G --name fs1.example.com-home VGXen01
  Logical volume "fs1.example.com-home" created

Para crear un sistema de archivos ext3 en un volúmen lógico use:

# mkfs.ext3 /dev/VGXen01/fs1.example.com-root

Parar crear un sistema de archivos swap en un volúmen lógico use:

# mkswap /dev/VGXen01/newdomu-swap

Puede clonar un volúmen lógivo LV usando el comando dd, por ejemplo:

# dd if=/dev/VGXen01/xenbase-disk of=/dev/VGXen01/newdomu-disk

Es posible extender el tamaño de un LV siempre y cuando el Volume Group que lo aloja tenga espacio disponible, use el comando vgdisplay para verificar que tenga espacio y después:

# lvextend --size +10G /dev/VGXen01/fs1.example.com-home
[Importante] Importante

El sistema de archivos en /dev/VGXen01/fs1.example.com-home debe estasr desmontado para poder realizar la operación de forma segura, en especial cuando pertenece a una maquina virtual encendida.

Después de extender el volúmen lógico con lvextend use resize2fs para extender un sistema de archivos ext3, por ejemplo:

# e2fsck -f /dev/VGXen01/fs1.example.com-home
# resize2fs /dev/VGXen01/fs1.example.com-home
[Importante] Importante

Recuerde siempre revisar la consistencia del sistema de archivos con e2fsck antes de redimiensionar el sistema de archivos.

Para eliminar un volúmen lógico use el comando lvremove, por ejemplo:

# lvremove /dev/VGXen01/fs1.example.com-home

Para más información para la administración de volúmenes lógicos LVM se recomienda que lea el LVM HOWTO official.

Para ver como asignar/export una volúmen lógico LVM a una maquina virtual vaya a la sección Archivos de configuración Xen para maquinas virtuales DomU para ver el formato del parámetro de configuración de dispositivos de bloque a los DomU.