In questi giorni ho avuto la necessità di installare una DomU Ubuntu avendo a disposizione un server Xen Dom0 su CentOS.
Non è una delle operazioni più immediate, pertanto vi spiego la procedura che ho utilizzato.
Innanzi tutto ho creato una immagine per la root del sistema operativo della dimensione di 4 GB usando il comando dd:
dd if=/dev/zero of=ubuntu.img bs=1024 count=4096
Quindi formattiamo l’immagine con il filesystem ext3:
mke2fs -j ubuntu.img
Ora scarichiamo il cd di installazione di Ubuntu: in questo caso utilizzo Ubuntu 10.10, ma vale per qualsiasi versione:
wget http://archive.ubuntu.com/ubuntu/dists/maverick/main/installer-amd64/current/images/netboot/mini.iso
Creiamo il file di configurazione di xen per eseguire il boot dall’immagine CD:
/etc/xen/ubuntu name="ubuntu" memory=512 vif=['bridge=xenbr0'] disk = ['file:/home/user/mini.iso,xvdc:cdrom,r', 'file:/home/user/ubuntu.img,xvda,w'] bootloader="/usr/bin/pygrub" on_reboot='restart' on_crash='restart'
e avviamo la nuova vm con
xm create /etc/xen/ubuntu -c
Ora seguiamo i passi di installazione standard, con due sole eccezioni:
- quando l’installer chiederà di partizionare il disco, prestate molta attenzione a NON ripartizionare il disco, dicendogli di montare l’unica partizione rilevata in / senza formattarla nuovamente.
- quando, al termine dell’installazione, chiederà di installare il bootloader grub, saltate questo passaggio
Al termine dell’installazione l’immagine si riavvierà, ma dato che non avete “espulso” il CD ripartirà il processo di installazione. Lanciate il seguente comando per spegnere la VM:
xm destroy ubuntu
Ora arriva la parte divertente: il comando pygrub di centos non è in grado di avviare correttamente le immagini di Ubuntu, pertanto utilizzeremo in vecchio e caro metodo di Xen andando a specificare quale kernel utilizzare.
Montiamo provvisoriamente l’immagine di Ubuntu:
mkdir /mnt/tmp mount -o loop /home/user/ubuntu.img /tmp/mnt cp /tmp/mnt/boot/vmlinuz* /tmp/mnt/boot/initrd* /home/user
Andiamo a modificare il file di configurazione di Xen per avviare correttamente la nostra immagine:
/etc/xen/ubuntu name="ubuntu" memory=512 vif=['bridge=xenbr0'] disk = ['file:/home/user/ubuntu.img,xvda,w'] kernel = "/srv/vms/kernel/ubuntu/vmlinuz-2.6.35-30-generic" ramdisk = "/srv/vms/kernel/ubuntu/initrd.img-2.6.35-30-generic" root = '/dev/sda' on_reboot='restart' on_crash='restart'
e avviamo nuovamente la vm con:
xm create /etc/xen/ubuntu -c
Ma Xen supporta le immagini dentro LVM come fa KVM?
Da quando utilizzo KVM non rimpiango per nulla Xen.
Con Xen puoi avere le immagini sia su file fisico, sia su partizioni fisiche, sia su partizioni LVM: se vai a dare un’occhiata a questo mio articolo su OpenNebula, vedrai che faccio fare a Xen proprio questo. Puoi specificare il tipo di datastore a mano nel file di configurazione, oppure lasciare che il driver tap:aio si arrangi.
Unica cosa che non sono riuscito a fare su Xen (al contrario di KVM) è utilizzare immagini di tipo “sparse”.
Detto questo, non farò mai una guerra di religione tra Xen e KVM: sono due prodotti diversi e con tecnologie totalmente diverse e li uso entrambi con soddisfazione. Se devo darti la mia personale opinione, personalmente tendo a preferire KVM per situazioni normali in quanto sta velocemente diventando uno standard grazie alla notevole quantità di risorse messe a disposizione dai colossi RedHat e Ubuntu… e anche perchè personalmente trovo la filosofia che sta alla base molto elegante. Al contrario, in situazioni in cui so che ci sarà un utilizzo intensivo del disco, preferisco Xen con immagine, appunto, su partizione LVM in quanto lo trovo più performante e meno esoso di risorse hardware.