Nel precendente articolo abbiamo visto come installare Xen e come rendere operativa la nostra prima macchina virtuale. Vedremo ora in modo approfondito alcuni aspetti relativi alla virtualizzazione e cercheremo di risolvere i problemi più comuni. Per questo articolo utilizziamo Fedora Core 5 ma le informazioni sono facilmente applicabili anche alle altre distribuzioni.

Kernel e loopfs

Per i sistemi guest risulta molto comodo utilizzare filesystem loop; in questo modo evitiamo di creare partizioni sul nostro disco fisico e possiamo aggiungere nuovi dischi virtuali senza modificare la tabella delle partizioni del sistema. Il modulo che gestisce questa modalita’ a livello di Kernel è “loop” e per default sono abilitati 8 loop mounts. Supponiamo di creare 3 dispositivi virtuali per ogni macchina guest, se il numero di macchine è maggiore di 2 dovremo aumentare il valore di loop mounts permessi dal Kernel. Per farlo modifichiamo il file /etc/modprobe.conf aggiungendo la seguente riga:

options loop max-loop=32

E’ necessario rimuovere e reinserire il modulo per applicare le modifiche, in alternativa riavviamo il sistema. Se il valore di loop mount viene superato non sara’ possibile avviare il sistema guest.

Gestione del domain0

Come abbiamo visto il domain0 è il server sul quale gira il demone supervisore Xen ed il Kernel xen0. E’ importante organizzare in modo corretto lo spazio fisico su hard disk per poter gestire in modo flessibile i sistemi guest. Abbiamo deciso di creare una partizione che conterra’ i loop filesystems dei sistemi guest, tale partizione e’ stata montata nel sistema al seguente percorso: /mnt/xendomains. All’interno di questa partizione creiamo una directory per ogni sistema guest:

mkdir /mnt/xendomains/guest1-web
mkdir /mnt/xendomains/guest2-mail
mkdir /mnt/xendomains/guest3-radius

Nell’esempio abbiamo predisposto la realizzazione di 3 server virtuali: web, mail e radius. All’interno delle directory verranno posizionati i filesystem. Come abbiamo accennato e’ importante limitare la memoria fisica utilizzabile dal domain0, per falo dobbiamo eseguire i seguenti comandi:

xm mem-set 0 384
xm mem-max 0 384

Sono sufficienti 256MB di Ram, nel nostro caso il sistema disponeva di 2GB di memoria ed abbiamo preferito assegnare 384MB per ottimizzare le prestazioni.

Gestione dei sistemi guest

Per una gestione ottimale dei sistemi guest può essere utile separare i filesystem come se si trattasse di macchine fisiche. Per farlo è sufficiente creare dispositivi logici differenti. Nell’esempio che segue creiamo 3 filesystem: root, var e swap.

cd /mnt/xendomains/guest1-web
dd if=/dev/zero of=guest1-web-root.img bs=1M count=1 seek=1024
dd if=/dev/zero of=guest1-web-var.img bs=1M count=1 seek=10240
dd if=/dev/zero of=guest1-web-swap.img bs=1M count=1 seek=512

Prepariamo i filesystem:

/sbin/mke2fs -F -j guest1-web-root.img
/sbin/mke2fs -F -j guest1-web-var.img
/sbin/mkswap guest1-web-swap.img

Montiamo i filesystem e procediamo all’installazione:

mkdir /mnt/temp-root
mount -o loop guest1-web-root.img /mnt/temp-root
mkdir /mnt/temp-root/var
mkdir /mnt/temp-root/dev
mkdir /mnt/temp-root/etc
mkdir /mnt/temp-root/proc
mount -t proc none /mnt/temp-root/proc
mount -o loop guest1-web-var.img /mnt/temp-root/var

for i in console null zero ; do /sbin/MAKEDEV -d /mnt/dev -x $i ; done

Creiamo il file /mnt/temp-root/etc/fstab adattandolo alla nuova configurazione con 3 partizioni:

/dev/sda1 / ext3 defaults 1 1
/dev/sda2 /var ext3 defaults 1 1
/dev/sda3 swap swap defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
none /dev/shm tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0

Installiamo il sistema base ed il kernel xenU sulla macchina guest:

yum -c http://people.redhat.com/~katzj/yum-xen.conf—installroot=/mnt/temp-root -y groupinstall Base
yum -c http://people.redhat.com/~katzj/yum-xen.conf—installroot=/mnt/temp-root -y install kernel-xenU
cp /etc/selinux/config /mnt/temp-root/etc/selinux/config

Smontiamo i filesystem del sistema guest:

umount /mnt/temp-root/proc
umount /mnt/temp-root/var
umount /mnt/temp-root

Configuriamo Xen per il nuovo guest, dobbiamo rendere disponibili i 3 dischi virtuali come sda1-2-3. Creiamo il file /etc/xen/guest1-web come segue:

kernel =”/boot/vmlinuz-2.6.12-1.1454_FC4xenU”
memory = 256
name = “guest1-web”
nics = 1
disk = [‘file:/mnt/xendomains/guest1-web/guest1-web-root.img,sda1,w’, ‘file:/mnt/xendomains/guest1-web/guest1-web-var.img,sda2,w’, ‘file:/mnt/xendomains/guest1-web/guest1-web-swap.img,sda3,w’]
root = ”/dev/sda1”
extra = “ro selinux=0 3”

Siamo pronti per avviare il nostro sistema guest e completare la configurazione di rete. Se non abbiamo commesso errori non dovrebbero esserci problemi.

Alcuni comandi utili

Per monitorare e gestire i nostri sistemi guest e’ sufficiente un comando: xm. Vediamo come utilizzarlo.

/usr/sbin/xm create -c guest1-web

Avvia il sistema guest guest1-web e ci presenta la console.

/usr/sbin/xm shutdown guest1-web

Esegue il comando shutdown sul sistema guest e lo arresta.

/usr/sbin/xm top

Simile al comando top, visualizza i processi relativi alle macchine guest.

/usr/sbin/xm help

Elenco dei comandi disponibili.

Ovviamente l’argomento Xen e’ molto vasto, spero di avervi fornito qualche informazione in piu’ rispetto al QuickStart precedente. Sto utilizzando Xen a livello enterprise con successo e questo mi permetterà di scoprirne tutte le potenzialità, sarà mia premura realizzare altri articoli non appena le mie conoscenze saranno adeguate. Per ora che dire… Virtualizzate!!!