<< Înapoi

Masina fizica migrata la Virtuala (Xen)

publicat 2009-07-13 10:06:03 de admin



Pregatirea de Migrare


Masina fizica


Pentru a migra cu succes masina fizica la una virtuala (Xen Guest) trebuie facuti cativa pasi pregatitori::


* Pe masina fizica trebuie sa instalam un kernel Xen (kernel-xen) care sa fie si compatibil cu kernel-xen care ruleaza pe hostul pe care intentionam sa il folosim. In principiu acest lucru se realizeaza folosind comanda:

yum install kernel-xen

Daca nu exista kernel-xen in repository sau aveti o distributie mai veche de linux, exista o mare sansa de a gasit kernelul potrivit intr-o baza de date cum este http://rpm.pbone.net

* Dupa instalarea kernelului xen, trebuie sa ne asiguram ca driverele necesare pentru device-urile xen sunt incarcate (xenblk si xennet) in imaginea initiala, astfel incat kernelul sa booteze:

mkinitrd --preload=xenblk --preload=xennet -f -v /boot/initrd-xxx.guest.img


Host-ul Xen


Pe host-ul Xen care il vom folosi trebuie sa pregatim noul sistem de fisiere (hdd) pentru guest-ul care va fi migrat aici. Acest hard-disk virtual trebuie sa fie si partitionat conform nevoilor guest-ului. Daca folositi un sistem SAN (Storage Area Network) puteti aloca spatiu catre aceasta masina, daca nu puteti folosi o partitie a hard-diskului local sau un simplu fisier. In cazul in care folositi un fisier, nu executati urmatoarele comenzi. Daca folositi o partitie (SAN sau nu), presupunand ca aceasta partitie este /dev/sdc1 folosim urmatoarele comenzi pentru a crea un LVM pe aceasta:


pvcreate /dev/sdc1
vgcreate vg-xenguests /dev/sdc1
lvcreate vg-xenguests -n lvnewmachineOS -l100%PVS /dev/sdc1

Comenzile de mai sus creeaza un nou LV denumit "lvnewmachineOS" care este parte din VG-ul "vg-xenguests" si foloseste 100% din spatiul disponibil pe PV-ul /dev/sdc1. Daca VG-ul vg-xenguests exista deja, atunci trebuie folosita comanda vgextend in loc de vgcreate, pentru a extinde VG-ul existent.


Migrarea fisierelor


Metoda preferata si recomandata de a transfera fisierele de pe masina fizica este folosirea utilitarului rsync. Inainte de asta trebuie mai intai sa montam noul filesystem al guest-ului in Dom0, sa il partitionam si sa il formatam conform necesitatilor. Partitionarea se face cu fdisk, asa cum se vede mai jos:


fdisk /dev/mapper/vg--xenguests-lvnewmachineOS

Vom presupune ca am creat 3 partitii pe LV-ul nostru, partitia 1 este pentru "/boot", partitia 2 este spatiul de swap si partitia 3 este pentru filesystem-ul root al sistemului, "/", aceasta fiind setarea uzuala a sistemelor Linux. Evident, aceasta schema de partitionare se ajusteaza in functie de schema de partitionare a masinii care trebuie virtualizata.

Pentru a monta oricare dintre aceste partitii in Dom0, va trebui sa folosim losetup pentru a conecta un device cum ar fi /dev/loop0, apoi vom folosi kpartx pentru a descoperi si mapa partitiile.


losetup /dev/loop0 /dev/mapper/vg--xenguests-lvnewmachineOS

kpartx -av /dev/loop0

In exemplul nostru cu 3 partitii, kpartx ar seta 3 device-uri accesabile ca /dev/mapper/loop0p1, /dev/mapper/loop0p2 and /dev/mapper/loop0p3. Aceste partitii trebuie formatate corespunzator, apoi montate si in cele din urma vom transfera fisierele de pe masina fizica.


mkfs.ext3 /dev/mapper/loop0p1
mkfs.ext3 /dev/mapper/loop0p3
mkswap /dev/mapper/loop0p2

mkdir /mnt/physicalmachineboot
mkdir /mnt/physicalmachineroot
mount /dev/mapper/loop0p1 /mnt/physicalmachineboot
mount /dev/mapper/loop0p3 /mnt/physicalmachineroot
time rsync -avx --numeric-ids --progress physicalmachine:/boot/ /mnt/physicalmachineboot
time rsync -avx --numeric-ids --progress physicalmachine:/ /mnt/physicalmachineroot

Va rog sa notati ca, daca transferul fisierelor de boot ar trebui sa nu puna nicio problema, utilizarea rsync pe un filesystem activ cum este cel root este un pic mai complicata. Solutia ideala este sa bootam masina fizica cu un live CD de linux (cum ar fi Knoppix), sa startam reteaua, sa montam undeva root-ul masinii si apoi sa il copiem cu rsync pe filesystem-ul pregatit pe guest-ul Xen. Totusi, acest pas poate fi facut cu succes si prin oprirea absolut tuturor serviciilor posibil e de pe masina fizica (exceptie ssh), si apoi utilizat rsync de pe Dom0 catre filesystem-ul de pe guest.

Dupa transferul fisierelor pe Xen Guest, nu uitati sa modificati fstab si mtab pentru a reflecta setarea corecta a partitiilor de pe Xen Guest. De exemplu, ceea ce era initial /dev/sda1 pe masina fizica, va deveni /dev/xvda1, daca discul este prezentat ca xvda.

Foarte mare atentie trebuie acordata fisierului grub.conf!

Cand instalati initial pachetul kernel-xen pe masina fizica, acesta se va instala implicit ca xen hypervisor, nu ca guest. Astfel, imaginea gresita de kernel va fi folosita la pornire (xen in loc de vmlinux). De asemeanea parametrul "root=" trebuie modificat in concordanta cu noua schema de partitionare. Fisierul grub.conf trebuie sa arate aproxumativ ca in exemplul urmator:


title Fedora Core (2.6.20-1.3002.fc6xen)
root (hd0,0)
# kernel /xen.gz-2.6.20-1.3002.fc6
# module /vmlinuz-2.6.20-1.3002.fc6xen ro root=LABEL=/ rhgb quiet
# module /initrd-2.6.20-1.3002.fc6xen.img
kernel /vmlinuz-2.6.20-1.3002.fc6xen ro root=/dev/xvda3
initrd /initrd-2.6.20-1.2316.fc6xen.guest.img

O ultima operatie este transferul bootloader-ului, deci pe masina fizica trebuie mai intai sa cream o imagine cu acesta, apoi sa o transferam pe Dom0 si sa o aplicam pe filesystem-ul guest-ului:

Pe masina fizica executam:


dd if=/dev/sda1 of=mbrcopy.img bs=512 count=1

Transferam fisierul mbrcopy.img pe Dom0 (Xen Host) si il aplicam:


dd if=/mbrcopy.img of=/dev/vg-xenguests/lvnewmachineOS bs=512 count=1


NOTA: partitii intregi pot fi transferate de pe masina fizica si astfel::


dd if=/dev/sda1 | ssh xenhost cat '>'/dev/loop0

Aceasta metoda presupune ca avem /dev/loop0 pe Xen Host montat cu partitia corespunzatoare din guest, dar aceasta metoda nu este recomandata decat daca partitiile au aceeasi marime. De asemenea partitiile care le copiati nu trebuie sa fie active (montate) sau acest transfer va rezulta in coruperea sistemului de fisiere de pe guest!


Configurarea Xen Guest in Dom0


Pentru noul guest trebuie sa cream si un fisier de config pe masina host in /etc/xen/. Iata si un exemplu de configurare pentru un nou guest numit "newmachine":


name = "newmachine"
maxmem = 2048
memory = 2048
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [ "type=vnc,vncunused=1" ]
disk = [ "phy:/dev/mapper/vg--xenguests-lvnewmachineOS,xvda,w"]
vif = [ "bridge=xenbr0" ]

Aceasta configuratie va adauga noul guest cu o interfata ethernet ce foloseste bridge-ul xenbr0, un hard-disk identificat ca xvda care este mapat catre LV-ul denumit "lvnewmachineOS" pe care l-am definit inainte si l-am pregatit. Dupa aceste operatii, vom folosi urmatoarea comanda pentru a porni noua masina virtuala (masina fizica trebuie oprita sau ii asignam un nou IP pentru a evita conflictele):


xm create -c newmachine

Parametrul -c ii xpune hypervisorului Xen sa ataseze imediat o consola la guest, pentru a putea vedea ca masina porneste corect.