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.
I had it with Xen. I really hate to be tied to a specific kernel on both the server and the VM’s. On every kernell update I’m freaking out. If I have to make a major update, I really panic. No More XEN, let’s try KVM.
{{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.I’ll get back to xen if I can make the virtuals load with HVM, a thing that I cannot do right now. I would love to move a virtual to another server without shutting it down… in theory, with XEN is posible, and with VMWare –the comercial version–. The new VMware 2.0 has that web console that works on many ocassions, and doesn’t when you really need it. The version 1 console always worked and I really don’t know why they changed it.
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.Another thing that I like about XEN is the incredible ability to create and launch linux servers from the command line, almost automated. I insist: how to upgrade the kernel without making a disaster? I did install using the repository packages, so the normal upgrade should not break anything, but I don’t whant to risk my life on doing that. I had some issues, so I know I have to move on, and I know I will have to upgrade, it’s inevitable. I don’t like to freeze, I really don’t.
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:
- Copié el boot folder entero de la máquina que tenía el xen, el de la virtual estaba vacío
- toqué el archivo fstab para que apuntara a los montajes correspondientes
- 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 - 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.
- 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.
- Ahora se ejecuta el sistema operativo y la cosa ya parece estar andando y todo!
- 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 - 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
- que se apague descentemente cuando el servidor se apaga
- que responda al shutdown del virt-manager.
- 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.
I went back to XEN later, but doing things different. I’ll post about this later.[[1]]
Mirate esta distribucion, te monta un servidor kvm y openvz sobre debian con una bonita interfaz para administrarla. En el wiki viene paso por paso como pasar de xen a kvm
http://pve.proxmox.com/wiki/Main_Page
Un saludo
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.