Aquest és el mètode P2V que hem usat per transformar un servidor Linux físic a una màquina virtual que corri sobre KVM. Es tracta d’un mètode de virtualizació expeditiu que consisteix en bolcar el contingut de tot el disc al servidor on allotjarem la nova màquina virtual. Per anar bé el servidor origen s’hauria d’aturar i arrancar-lo en mode rescue, per així fer la còpia amb els sistemes d’arxius desmuntats, però en el nostre cas no podíem apagar el servidor origen. Amb aquest procediment es pot moure la màquina sense problemes.

Còpia del disc físic

Al servidor destí, deixem el netcat escoltant a un port (a l’exemple, 43333), redirigint tot el que es rebi cap a un fitxer. Podem deixar les comandes en un screen i així podrem tancar la sessió si tarda massa.

nc -nvv -w30 -l 43333 | gzip -dc > disk.raw

Al servidor origen (el que volem virtualitzar) amb la comanda dd bolquem el contingut del disc, el comprimim i amb nc l’enviem cap al port 43333, on escolta el servidor destí amb la comanda anterior. La comanda gzip comprimeix les dades i redueix el volum a transferir. Aquest disc era de 72 GB i va tardar 4 hores a 10 Mbps, passant per Internet.

dd if=/dev/cciss/c0d0 | gzip -c | nc -w30 -vvn ip_destí 43333

La sintaxi de la comanda nc pot variar segons el paquet que tinguem instal·lat (les de l’exemple són amb netcat-openbsd)

Revisió dels sistemes d’arxius

Un cop acabada la transferència tenim una imatge del disc a disk.raw. Però com que el servidor origen estava engegat mentre la fèiem, cal fer un fsck de les dades. A Linux podem configurar un fitxer per a que sigui tractat com a un dispositiu, assignant-lo a un dispositiu loop:

Comprovem quin és el següent dispositiu loop lliure:

losetup -f
/dev/loop0

Assignem disk.raw a loop0, així accedit al dispositiu /dev/loop0 estarem accedint al fitxer disk.raw

losetup /dev/loop0 disk.raw

Ara cal llegir les particions de loop0 i crear-ne els dispositius oportuns per a poder-hi accedir, ens servim de kpartx

kpartx -av /dev/loop0

Ja tenim les particions accessibles a /dev/mapper/loop0pX i ja podem fer un fsck

fsck.ext3 -f /dev/mapper/loop0p1
fsck.ext3 -f /dev/mapper/loop0p2
...

En aquest punt també podem muntar les particions per comprovar que els arxius hi son i aprofitar per corregir els noms dels dispositius a /etc/fstab.

Abans d’engegar la màquina virtual, cal desfer aquest procés per evitar danys al sistema de fitxers

kpartx -dv /dev/loop0
losetup -d /dev/loop0

Creació de la màquina virtual

Creem la màquina virtual al KVM, li assignem el disc i provem d’arrencar-la.

És possible que no arranqui perquè hagi canviat el nom del dispositiu del disc i no trobi el sistema de fitxers arrel. Mitjançant la consola de KVM haurem d’arreglar la línia al GRUB o al LILO, corregint la opció root= de la línia del kernel, i un cop engegada, modificar el fitxer /etc/fstab.

En el nostre cas /dev/cciss/c0d0p[n] passa a ser /dev/hda[n]

Retocs finals

Cal configurar la nova interfície virtual de xarxa i comprovar que els serveis funcionin correctament.

Durant el temps que hem tardar a fer la virtualització, les dades del servidor físic original han canviat. S’han de sincronitzar abans de fer el canvi. Així doncs aturem el servei dins una finestra d’actuació, sincronitzem les dades i ja podem canviar les zones DNS. El temps en que els usuaris han estat sense servidor ha estat mínim.