Etiquetavm

Manipular volúmenes lógicos (LVM) en discos virtuales

Me refiero a discos virtuales a los que creamos usando dd. Cuando creamos un disco utilizando por ejemplo dd if=/dev/zero of=imagen.img y lo usamos para crear una máquina virtual, en este caso con Xen, luego le instalamos un sistema operativo que maneje ya sea CentOS, RHEL, Debian o cualquier otro que maneje LVM en la instalación, hay veces que necesitamos manipularlo ya sea para clonarlo, hacerle mantención o simplemente montarlo para ver los archivos. En mi caso, tuve que clonar la máquina virtual en caliente y quedó el FS corrupto, por lo que tuve que corregirlo, tambien sirve para hacer tareas de mantención como aumentar o disminuir el tamaño del disco o volúmenes lógicos.

Tengo mi disco original llamado “vm1.img” y la clono simplemente con un cp o bien con “dd if=vm1.img vm1_clon.img“, paso a paso, lo que tenemos que hacer es:

  1. Crear un dispositivo “loop” en base a nuestro disco virtual
  2. Mapear el dispositivo loop creado
  3. Revisar los dispositivos creados en /dev/mapper/
  4. Activar el volúmen y realizar las tareas necesarias

Las herramientas que usé son losetup, kpartx y vgchange.

Seguir leyendo

Xen: Migración de discos fisicos a discos virtuales (pt3)

quantum-bigfoot La migración de discos físicos a discos virtuales para poder montar una VM en Xen es, en teoría, fácil. Es simplemente hacer una copia con dd de las particiones que deseas. Hay que tener mucho cuidado, no debemos hacer una imágen del disco completo, sólo las particiones que deseamos, sin el sector 0 (mbr), ni tabla de particiones, etc. Tampoco recomiendo migrar la swap, es mejor crearla (en teoría demoraría menos).

Cuando se trata de máquinas de producción o servidores, lo que debemos hacer para no tener conflictos con las direcciones ip, hostnames, fstab o cualquier configuración especial que tenga esa máquina que de una u otra forma pueda generar conflictos, es montarla con loop y modificar las configuraciones directamente desde la imágen que creamos.
Los pasos a seguir (recomendados por mi) son:

  1. Determinar qué particiones son las que debemos migrar.
  2. Hace las imágenes correspondientes de cada partición.
  3. Configuración de la máquina virtual (crear el .cfg).
  4. Montar las particiones que podrían generar algún tipo de conflicto y modificar los archivos necesarios.
  5. Creación de la swap.
  6. Levantar la máquina.

Seguir leyendo

Xen: Creación y configuración de una máquina virtual (pt2)

Si la instalación y configuración de Xen resultó ser fácil, lo que mostraré a continuación es mucho más sencillo. Para instalar una máquina nueva (con Debian) debemos ejecutar el siguiente comando:

xen-create-image --hostname=xen1 --size=5Gb --swap=256Mb --ide \
--ip=192.168.0.101 --netmask=255.255.255.0 --gateway=192.168.0.1 --force \
--dir=/vm --memory=128Mb --arch=i386 --kernel=/boot/vmlinuz-2.6.26-2-xen-686 \
--debootstrap --dist=lenny --mirror=https://ftp.cl.debian.org/debian/ --passwd

Si destripamos los parámetros nos damos cuenta que le estamos asignando (en orden) el hostname, tamaño de disco duro, cantidad de swap, tipo de disco, dirección ip, netmask, gateway, el directorio donde instalarla, ram, arquitectura, kernel para usar, metodo de instalación, distribución, mirror para descargar y por último, que nos pregunte la pass de root cuando termine de instalar. Estos parametros se pueden cambiar según los requerimientos.

El archivo de configuración de las máquinas virtuales es algo como:

kernel = '/boot/vmlinuz-2.6.26-2-xen-686'
ramdisk = '/boot/initrd.img-2.6.26-2-xen-686'
maxmem = '256'
memory = '64'
root = '/dev/hda2 ro'
disk = [
'file:/vm/domains/xen01/swap.img,hda1,w',
'file:/vm/domains/xen01/disk.img,hda2,w',
]
name = 'xen01'
# Red
vif = [ 'ip=192.168.20.202,mac=00:16:3E:6F:E3:3B' ]
# Comportamiento
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'

Podemos modificar arbitrariamente las opciones segun lo que nosotros necesitemos, tambien existen más opciones que le podemos agregar, como la asignacion de X cpus, decirles que cpu usen, por ejemplo si tenemos 4 núcleos, asignarle el 1 y el 4.

vcpus = 2;
cpus = '0,3'

De esta forma le estamos asignando 2 núcleos virtuales y le estamos diciendo que use los nucleos 0 y 3.