Virtualių mašinų migracija

Jei XEN virtualios mašinos kaupiklis buvo kuriamas, kaip vienas diskas, tai migracija yra gerokai paprastesnė. Tam tiesiog reikia sukurti identiško dydžio loginį tomą ir dd komandos pagalba perkopijuoti failo turinį į loginį tomą maždaug taip: dd if=/vm/domains/serveris/disk0.img of=/dev/mapper/datavg-server1--disk0. Visos rinkmenoje buvusios failinės srtuktūros bus sėkmingai atkartotos loginiame tome. Gana išsamus paaiškinimas, kaip tai padaryti yra šiame „HowTo Forge“ puslapyje.

Deja, mano XEN mašinos buvo aprašytos, nei kaip vienas diskas, o kaip skirsnių rinkinys, todėl vienai virtualiai mašinai man būtų reikėję sukurti 6 loginius tomus - po vieną kiekvienam skirsniui šioje XEN mašinoje. Numigravus antrą mašiną į LVM tomus, o vėliau eksperimentams susikūrus dar ir trečią - gautųsi jau gana didelis „zoologijos sodas“, kuriame sunku susigaudyti. Todėl buvo nuspręsta supaprastinti sistemą ir migruoti kiek kitaip. Nors šis būdas nėra labai elegantiškas, tačiau jis visai efektyvus.

Pirmiausia nauji LVM tomai, kurių dydis buvo parinktas pagal realių duomenų apimtį, buvo prijungti prie XEN mašinos, kaip papildomi diskiniai kaupikliai.

root        = '/dev/sda2 ro'
disk        = [
'file:/home/VM/domains/freenet/swap.img,sda1,w',
'file:/home/VM/domains/freenet/root.img,sda2,w',
'file:/home/VM/domains/freenet/var.img,sda3,w',
'file:/home/VM/domains/freenet/tmp.img,sda4,w',
'file:/home/VM/domains/freenet/home.img,sda5,w',
'phy:/dev/mapper/datavg-xen--freenet--disk0,sdb,w',
'phy:/dev/mapper/datavg-xen--freenet--disk1,sdc,w'
]

Perkrovus virtualią mašiną, diskiniai kaupikliai /dev/sdb ir /dev/sdc buvo suskaidyti į norimus skirsnius ir šie skirsniai buvo sužymėti ext3 failų sistemomis. Tuomet skirsniai buvo prijungti /mnt ir /mnt/home kataloguose ir sustabdžius aktyvias programas, visa Linux sistema su visais duomenimis buvo tiesiog perkopijuota į /mnt katalogą, kuriame buvo prijungti nauji diskai. Kopijuojant buvo nurodoma išsaugoti esamas failų nuosavybės teises. kadangi kopijuoti reikia ne viską, tai operacijos supaprastinimui viskas buvo daroma iš mc aplinkos. Kuria buvo palikti nepažymėti /proc, /sys ir aišku /mnt katalogai. Tiesa, failų sistemos buvo sužymėtos su specialiais parametrais. Namų katalogo skirsnis /dev/sdb1 buvo sužymėtas be vietos rezervavimo root vartotojui - tai naudinga tik sisteminiams skirsniams, o duomenų saugojimo skirsniuose tai tik veltui išmesti 5 proc. vietos. Taip pat šiems skirsniams buvo aktyvuotas writeback ext3 žurnalo darbo režimas, leidžiantis spartesnes failines operacijas duomenų saugojimo patikimumo sąskaita. Jei nesupratote apie ką čia -- data=writeback nuostatos nenaudokite. ;)

mkfs.ext3 -m 0 /dev/sdb1
mkfs.ext3 /dev/sda1
tune2fs -o journal_data_writeback /dev/sda1
tune2fs -o journal_data_writeback /dev/sdb1

Perkopijavus, buvo pataisytas /mnt/etc/fstab failas, iš kurio buvo išmesti visi nereikalingi skirsnių prijungimo taškai, nes naujoje sistemoje visa Linux sistema bus viename /dev/sda1 skirsnyje, o /home prijungtas, kaip /dev/sdb1. Galutinis fstab turinys atrodė štai taip:

freenet:~# cat /etc/fstab 
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/sda2 none swap sw 0 0
/dev/sda1 /         ext3 async,noatime,data=writeback,errors=remount-ro,commit=30 0 1
/dev/sdb1 /home     ext3 async,noatime,nodev,nosuid,data=writeback,commit=30 0 1

Po visų šių operacijų /mnt/home ir /mnt buvo atjungtos ir virtuali mašina išjungta shutdown -h now komanda. Beliko tik pakeisti XEN virtualios mašinos aprašą ir pradėti naudoti naujus „kaupiklius“. Virtualios mašinos konfigūracijos failo diskinių kaupiklių dalis buvo pakeista taip:

root        = '/dev/sda1 ro'
disk        = [
                  'phy:/dev/mapper/datavg-xen--freenet--disk0,sda,w',
                  'phy:/dev/mapper/datavg-xen--freenet--disk1,sdb,w'
              ]

Kadangi XEN savo Linux virtualioms mašijoms OS branduolį „sustumia“ iš fizinės mašinos, tai OS migracijai visiškai pakako paprasčiausiai perkopijuoti failus ir pakeisti sistemos įkrovos įrenginį. Jei tai būtų kokia KVM ar Virtual Box mašina, tai po perkopijavimo tektų pažaisti su chroot komanda bei įkrovos tvarklyklės (GRUB arba LILO) diegimu į naują kaupiklį, antraip jos paprasčiausiai neįsikrautų.

Po šios operacijos XEN virtualios mašinos visiškai atlaisvino CPU ir laisvo laiko pakako paskirstytųjų skaičiavimų klientui įdiegti. Kviečiu ir jus prisidėti prie šių visuomeninių projektų ir paskirti nepanaudotą CPU laiką mokslinių tyrimų duomenims apdoroti. Berklio universiteto sukurta paskirstytųjų skaičiavimų sistema BOINC šiuo metu vienyja daugiau nei pusę milijono kompiuterių, kurie apdoroja dešimčių projektų duomenis. Tokių projektų pavyzdžiais gali būti „World Community Grid“ ar garsusis SETI@Home  (https://www.launchknowledge.com/seti-at-home-alternatives/ SETI@Home užsidarė).