Pasar de XEN a KVM

Por ahora la cosa funciona, pero realmente la parí durante todo el día. Me cansé del XEN. Lo que más me jode es cargar un kernel especial y poner a las máquinas virtuales el kernel mapeado. A mi lo que me pasa con el XEN instalado bajo HARDY es que cuando tengo mucha actividad de disco rígido tengo un kernel panic. No es chiste, es muy incómodo.


{{1}}Posiblemente vuelva a intentar el xen si puedo hacer que las virtuales se carguen con el HVM, cosa que no pude hacer bien hasta ahora. Me encantaría poder migrar las máquinas virtuales de servidor a servidor sin apagarlas… en teoría con el XEN se puede, y con el vmware también, pero el vmware en Debian y parecidos es tan molesto cada vez que actualizo el kernel que me fue cansando un poco. El nuevo vmware 2.0 con esa consola que a veces anda y que a veces no me molesta demasiado, mala cosa. La consola anterior anduvo siempre perfectamente, para qué la cambiaron.

Otra cosa que siempre me gustó del XEN es poder crear y lanzar servidores linux desde la línea de comandos, casi automatizadamente y prenderlos, apagarlos y demases. Vuelvo a insistir: y cómo actualizo el kernel en el server sin hacer desastres en el kernel de las VM’s? En teoría todo debería seguir andando, pero francamente no me parece lo más adecuado cuando actualicé el servidor y no actualicé las máquinas virtuales. Ese agujero en donde debería estar el /boot me da como angustia. Prefiero una virtualización completa. Si no tuviera los kilombos que tengo quizás no tocaría nada, pero no me gusta congelarme en el tiempo con miedo a actualizar. No me gusta nada.

Así que empecé pasando una compu virtual y pasó bastante bien. Pero me tuvo todo el día, ahora sé que la secuencia no es tan complicada y es así:

Mis virtuales en XEN eran imágenes en archivos de bloque… o block devices, digamos, sin tabla de particiones, cosa que es el valor por defecto de XEN. Gracias al cielo que no se me ocurrió jugar con lvm, pero tampoco es tan complicado. Creo que existe una forma más cochina de hacer lo que me imagino pareciera ser así:

tabla de particiones + particion + particion

pero no me animé a pegotear (llegué hasta armar el archivo con el mbr, pero le aflojé) así que encaré para otro lado:

Crear un disco desde el qemu, crearle las particiones y montarlo. La forma más civilizada y muy copada es la siguiente:

Primero, instalé dos paquete escenciales para todas estas cosas:

apt-get install multipath-tools kpartx

Al principio pensaba que el kpartx era una aplicación KDE para manejar particiones, pero nada de eso.

Ahora a acrear el archivo:

qemu-img create myroot.img -f raw 1G

Un detalle muy importante: si ponemos esta orden sobre un archivo que existe, borramos el contenido original de la forma más irrecuperable posible: le ponemos ceros todo a lo largo del archivo.

Lo primero, ejcutamos kpartx sobre la imagen, aunque todavía no tenga particiones, esto monta el loop automáticamente.

root@phoenix:/data/virtuals# kpartx myroot.img
gpt: 0 slices

Como pueden ver, en mi caso tengo un dispositvo loop ya montado, así que todas las operaciones de este ejemplo serán sobre /dev/loop1

root@phoenix:/data/virtuals# losetup -a
/dev/loop0: [0821]:5555347 (/var/lib/localinstall/ubuntu-7.04-server-i386.iso)
/dev/loop1: [0900]:15302659 (myroot.img)

Ahora podemos formatear el dispositivo directamente.

root@phoenix:/data/virtuals# fdisk /dev/loop1
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xa735bd75.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-130, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-130, default 130):
Using default value 130

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 22: Invalid argument.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

No sé por qué me tiró este error al final, justo para el ejemplo… pero seguimos adelante. Durante la instalación, la creación de la imágen de disco me dejó sin espacio en el rígido, y hasta que me dí cuenta estuve un rato largo.

Ahora podemos ejecutar de nuevo el kpartx que ahora levanta 4 particiones, y genera un punto de montaje porque tiene solamente una partición definida.

root@phoenix:/data/virtuals# kpartx -a myroot.img
gpt: 0 slices
dos: 4 slices

Un listado al dispositivo /dev/mapper nos muestra nuestro nuevo punto de montaje, directo a la partición

root@phoenix:/data/virtuals# ls -l /dev/mapper
total 0
crw-rw---- 1 root root  10, 63 2009-03-05 02:26 control
brw-rw---- 1 root disk 253,  0 2009-03-05 04:20 loop1p1

Formateamos

root@phoenix:/data/virtuals# mkfs.ext3 /dev/mapper/loop1p1
mke2fs 1.40.8 (13-Mar-2008)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
65280 inodes, 261048 blocks
13052 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8160 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Muy impotante y piola: con la orden blkid obtenemos el uuid del disco a montar, y podemos modificar el /boot/grub/menu.lst para arrancar directamente como se debe.

blkid /dev/mapper/loop1p1

Y ahora podemos montar el archivo que está precioso:

root@phoenix:/data/virtuals# mount /dev/mapper/loop1p1 /mnt/m1
root@phoenix:/data/virtuals# ls /mnt/m1
lost+found

El disco de xen se monta muy fácil:

root@phoenix:/data/virtuals# mount -o discodexen.img /mnt/m2
root@phoenix:/data/virtuals# ls /mnt/m2
cosasdeldisco

Copiar todo de un lado al otro, con el midnight commander, por ejemplo.

Lo siguiente que hice fue corregir las siguientes cosas:

  1. Copié el boot folder entero de la máquina que tenía el xen, el de la virtual estaba vacío
  2. toqué el archivo fstab para que apuntara a los montajes correspondientes
  3. arranqué el disco con el qemu y apuntando el cdrom para que arrancara una sesión live del ubuntu y entré al grub
    kvm -m 256 -cdrom /data/install/shared/admin/os/ubuntu/hardy/ubuntu-8.04.2-desktop-i386.iso -boot c myroot.img
    Ahí entré al grub, miré los discos y procedí a instalar.
    sudo grub
    find /boot/grub/stage1
    (Esto generalmente muestra hd0 para el disco que nos interesa)
    root (hd0,1)
    setup (hd0)
    quit
  4. Ahora arranqué la virtual y me dió unos cuántos errores. El error que me detiene en seco es el de que no encuentra el disco con no sé qué uuid. El grub arranca con el uuid puesto. Me deja en una terminal de intiram que es de lo más desprovista, pero pude hacer un ls /dev/disk/by-uuid y anoté prolijamente el que decía. Ahora podemos hacer un reboot y apretar Esc en la pantalla del grub.
  5. Dentro del grub me metí en la opción del kernel normal y de paso edité con la tecla e el uuid del disco. Apreté intro y después b para que arranque.
  6. Ahora se ejecuta el sistema operativo y la cosa ya parece estar andando y todo!
  7. El swap no me estaba andando. En este ejemplo no lo hice para simplificar, pero en el particionado inicial es un buen momento para meter el espacio de swap. Me tiró error cuando arrancaba, lo arreglé con estas líneas, que ahora veo que son elementales, después cuando agregue la parte del swap le voy a poner el mkswap que es como elemental.
    sudo mkswap /dev/hda5 then
    sudo swapon /dev/hda5
  8. Después instalé el kernel que quería y el grub. Un update-grub me dejó todo muy lindo, salvo por el hecho de que en el menu.lst me volvió a poner el uuid del disco viejo. A ponerlo de nuevo y ver como arranca la compu que no se puede creer.

Todavía me faltan pulir algunas cosas

  1. que se apague descentemente cuando el servidor se apaga
  2. que responda al shutdown del virt-manager.
  3. no tengo login en la pantalla. Lo había arreglado en el xen agregando esto a la configuración.
    <ondblclick="with (this.style) { overflow = (overflow == 'auto' || overflow == '') ? 'visible' : 'auto' }"extra = 'xencons=xvc console=xvc0'>
    

Voy a poner también cómo hice el bridge en la red, que me quedó muy lindo, agregué una interfaz en /etc/network/interfaces

auto eth0
iface eth0 inet static
address 10.10.1.6
netmask 255.255.255.0
network 10.10.1.0
broadcast 10.10.1.255
gateway 10.10.1.5
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 10.10.1.5
dns-search laoriental.grupocalo.com.ar

auto br0
iface br0 inet static
address 10.10.1.6
network 10.10.1.0
netmask 255.255.255.0
broadcast 10.10.1.255
gateway 10.10.1.5
dns-nameservers 10.10.1.5
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

Ahora cuando hago un ifconfig no tengo ip en eth0 pero sí la tengo en br0. My lindo. Una vez que hice esto pude desde el virt-manager agregar una placa de red en bridge.

Ahora estoy cansado pero después completo con los demás pormenores de correr con el KVM y no con el Qemu, que muy lindo pero es incómodo y un poco lento.

Tendría que leer mejor este howto que hizo Epe aquí

http://www.ecualug.org/?q=2008/06/17/comos/51_otra_variante_mas_mejor_para_instalar_debian_paravirtual

el tipo es una pantera.

de aquí saqué ideas para el particionado

http://www.novell.com/coolsolutions/tip/19568.html

Con esto instalé, pero una lástima que se detiene antes de abordar el tema de la migración de las virtuales. Explica bastante bien lo del bridge.

http://www.eslomas.com/index.php/archives/2008/10/06/migrando-de-xen-a-kvm-en-ubuntu/

Acá tomé la idea de copiar pero el hombre se complica demasiado

http://fraise.co.nz/node/7

Por esta página estuve a punto de pegotear todo pero me arrepentí

http://www.vicente-navarro.com/blog/2007/02/20/montar-una-imagen-raw-de-qemu-los-primeros-32-kbytes-de-un-disco/

[[1]]Volví al XEN, pero haciendo las cosas distinto. Voy a escribir un artículo sobre esto más tarde.
[[1]]

4 thoughts on “Pasar de XEN a KVM

  1. Estoy mirando lo que ponés en el comentario, parece muy interesante, me encanta! Todavía no encontré la entrada en la wiki, acabo de pasarme a KDE 4.2.1 y todavía estoy acomodando cosas.

  2. Pingback: Tristangrimaux

Responder a tristan Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

ERROR: si-captcha.php plugin: GD image support not detected in PHP!

Contact your web host and ask them to enable GD image support for PHP.

ERROR: si-captcha.php plugin: imagepng function not detected in PHP!

Contact your web host and ask them to enable imagepng for PHP.