KVM kasutamine Debian Lenniga

Allikas: Kuutõrvaja
(Ümber suunatud leheküljelt Virtualiseerimine tarkvaraga KVM)

Sissejuhatus

KVM (Kernel-based Virual Machine, ingl. k. tuumapõhine virtuaalmasin) on Linuxi kernelis asuv virtualiseerimise tugi, mis toetab nn native virtualization'it st töötab näiteks AMD-V ja Intel-VT protsessoritega.

KVM tekitab /dev/kvm seadme, mida kasutab modifitseeritud kasutajaprogramm (ingl. k. user-space program) QEMU selleks, et korraldada virtuaalsetele arvutitele aadressruumi, I/O, video jms ressursside kasutamist.

Seda operatsioonisüsteemi eksemplari, kus asub /dev/kvm seade nimetatakse host'iks (ingl. k. majutaja) ja virtuaalseid arvuteid nimetatakse guest'ideks (ingl. k. külaline).

Kvm architecture.png

KVMi iseloomustavad sellised asjaolud

  • nn kernel.org tuumas on kasutatav KVM tugi
  • kvm tehnoloogiat saab 2008 aasta suvel kasutada x86 arhitektuuriga arvutitest AMD-V ja Intel-VT toega protsessoritega, st praktiliselt viimastel aastatel toodetud uuemate mudelitega
  • guest operatsioonisüsteemina saab kasutada suurt hulka erinevaid operatsioonisüsteeme, muu hulgas Linux, OpenBSD, Windows

KVM arendamist korraldab Avi Kivity.

KVM hostis ei tööta seoses guestide pidamisega mingit deemonit. Guesti kõvakettale vastab tavaliselt üks fail hosti failisüsteemis ja guesti käivitamiseks tuleb käivitada sobivate argumentidega programm kvm.

KVM hosti ettevalmistamine

Kui hostiks kasutatakse x86 riistvara ja mis iseenesest sisaldab Intel-VT või AMD-V tehnoloogia tuge peab veenduma, et see on ka kasutuses (nt sisselülitatud arvuti BIOS'est). Kui käsk väljastab midagi, ju siis on

 # egrep '^flags.*(vmx|svm)' /proc/cpuinfo

Debiani paketihaldusest tuleb paigaldada kvm pakett öeldes

 # apt-get install kvm

Lisaks on abiks tarkvara bridge-utils, kpartx ja qemu, nende paigaldamiseks tuleb öelda

 # apt-get install bridge-utils kpartx qemu

Debian Lenny sisaldab KVM tarkvara versiooni 72.

KVM guesti ettevalmistamine ja käivitamine

KVM guesti ettevalmistamiseks kõige tavalisemal juhtumil tuleb esmalt tekitada guesti kõvakettale vastav fail, mis asub host'i failisüsteemis, öeldes

 # mkdir /data/kvm-guests
 # cd /data/kvm-guests
 # qemu-img create -f qcow2 test-arvuti.img 1G
 Formatting 'test-arvuti.img', fmt=qcow, size=1048576 kB

Seejärel tuleb esimesel käivitamisel virtuaalne arvuti bootida mingi operatsioonisüsteemi paigaldusmeedialt, nt Debini puhul öelda

 # kvm -hda test-arvuti.img -cdrom /home/debian-40r4a-i386-CD-1.iso -boot d -m 512

kus

  • -hda argumendiks olev tõmmis moodustab guesti poolt vaadates nn hda ketta
  • -cdrom argumendiks olev tõmmis moodustab guesti poolt vaadates cd seadme
  • -boot d tähedab, et tuleb bootida cd seadmelt
  • -m argument näitab guesti mälu hulka

Tulemusena avaneb värviline qemu laadne aken ning sealt saab üsna tavapärasel moel guesti operatsioonisüsteemi ära paigaldada.

Edasistel guesti käivitamistel võib -cdro ja -boot d võtmed ära jätta

 # kvm -hda test-arvuti.img -m 512

KVM guesti võrk

Üheks võimalusek ühendada guest võrku on ühendada sama silla külge hosti füüsiline võrguseade ning hostis asuv guestile vastav tap seade.

Selleks tuleb moodustada hostis esmalt sild kirjutades /etc/network/interfaces faili sektsiooni

 auto br0
 iface br0 inet static
       address 192.168.10.13
       netmask 255.255.255.0
       network 192.168.10.0
       broadcast 192.168.10.255
       gateway 192.168.10.254
       bridge_ports eth0
       bridge_stp off
       bridge_maxwait 5

ning alglaadides guesti käsuga

 # kvm -hda test.img -net nic,vlan=0,macaddr=00:55:44:22:44:54,model=pcnet -net tap

Kui guest käib, siis on sild selline

 # brctl show
 bridge name     bridge id               STP enabled     interfaces
 br0             8000.0017f2cd369c       no              eth0
                                                         tap0

KVM guesti bootimine plokkseadmel asuva juurfailisüsteemiga

Tavaliselt vastab guesti failisüsteemile üks fail, mis algab partitsioonitabeliga ja milles sisalduvad failisüsteemid ning swap erinevatel partitsioonidel, tõtt-öelda nii nagu vihjab ka -hda võti sellisele asjakorraldusele.

Kui hostile kättesaadaval plokksseadmel, näiteks

  • füüsilise kõvaketta partitsioon - /dev/sdb2
  • LVM voluum - /dev/system/test_juurikas
  • RAID seade - /dev/md4
  • losetup programmi abil ettevalmistatud plokkseade

asub mõne operatsioonisüsteemi eksemplari juurfailisüsteem, siis selle saab kvm abil alglaadida, öeldes

 # kvm -hda /dev/system/test_juurikas -m 512 -kernel bzImage -append "root=/dev/hda ro" -initrd file 

kus

  • -kernel argumendiks on test_juurikas alglaadimiseks sobiv tuum, mis asub hosti failisüsteemis
  • -initrd argumendiks on test_juurikas alglaadimiseks sobiv ramdisk, mis asub hosti failisüsteemis
  • -append argumendiks on kerneli argumendid, kõige olulisem on tuumale öelda kus guesti poolt vaadates asub juurfailisüsteem

KVM guesti konsool

Konsooli esitamiseks on järgmised võimalused

  • SDL - Vaikimisi kasutab kvm konsooli esitamiseks SDL (Simple Direct Layer) tehnikat, mis praktiliselt tähendab seda, et X'i aknas kvm programmi käivitamisel, kas samas arvutis või üle ssh on konsool graafilises aknas näha, sedasi, kusjuures töötavad sellised klahvikombinatsioonid
    • Ctrl-Alt konsoolist väljumiseks
    • Ctrl-Alt-2 siseneb QEMU menüüsse
    • Ctrl-Alt-3 serial konsool
    • Ctrl-Alt-1 guesti konsool

Kvm-1.gif

  • Curses konsool - Curses vahendite abil, lisades kvm reale võtme -curses esitatakse samas terminali aknas kui kvm käsk antakse guesti konsool, sedasi

Kvm-2.gif

  • VNC - kvm käivitab sisemise vnc serveri, kui guesti käivitamisel lisaks kasutada võtit '-vnc 192.168.10.13:0' pordil 5900 kus 192.168.10.13 on hosti ip aadress.
  • Serial konsool - Guesti serial konsooli kasutamiseks tuleb guestis sees konfigureerida bootloaderi, tuuma ja login: näitamine serial porti ning seejärel käivitada srceen'is kvm võtmega -nographic (kui on korralik xterm, siis pole screen'i ette vajagi)
 # screen kvm -hda test-arvuti.img -m 512 -nographic

Selliselt käivitatud screen'i saab üle võtta öeldes

 # screen -r
 There are several suitable screens on:
       3547.pts-0.mac  (08/30/2008 05:20:08 PM)        (Attached)
       3533.pts-0.mac  (08/30/2008 05:19:03 PM)        (Detached)
 # screen -D -R 3547.pts-0.mac
  • Ilma konsoolita kasutamiseks tuleb näidata samuti -nographic võti, st vaikimisi suunatakse guesti väljund serial tema konsoolile, aga siis seda asjaolu ignoreerida.

libvirt teekidel põhinevate utiliitide kasutamine

Debian Lenniga saab kasutada KVM virtualiseerimist analoogiliselt Ubuntu operatsiooniga, mida on kirjaldatud tekstis KVM kasutamine Ubuntu 9.10 operatsioonisüsteemiga. Vajaliku tarkvara saab paigaldada öeldes

 # apt-get install kvm libvirt-bin virtinst virt-manager

guesti kellaaeg

Tundub, et suhteliselt hea tulemuse annab kui Debian Lenny hostis töötab ntpd deemon ning guestis on clocksource kvm_clock

# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
kvm-clock

ning töötab samuti ntpd deemon.

Märkused

  • Võtmega -smp arv saab määrata guesti protsessorite arvu, vaikimisi üks.
  • Võtmege -daemonize pannakse kvm käima taustal, praktiline on samal ajal ka kasutada võtit -nographic.
  • kvm programmi saab käivitada privilegeerimata kasutaja eeldusel, et ta /dev/kvm seadmele lugeda ja kirjutada saab, reeglida kvm gruppi lisamisest kasutajale piisab.
  • Selleks, et VNC sessiooni sees käivitatud kvm (või qemu) saaks aru klaviatuurist, sobib kasutada lisaks muudele käsurea parameetritele võtit -k, nt '-k en-us'
  • virt-manager'i haldusliideses ei paku kasutamiseks vlan seadmetele moodustatud sildu, kuid otse nö 'virsh edit domeeninimi' abil saab ka selliseid sildu kasutada
  • Kui domeeni seadistusfailis on teatud sorti vigu, nt kasutatud võrguseade süsteemis tegelikult puudub, siis libvirtd lõpetab segment faultiga töö. Aitab nt lenny-backportsidest libvirt-bin ja virt-manager pakettide kasutamine
# apt-get -t lenny-backports install virt-manager libvirt-bin
  • Ubuntu 10.04 guesti paigaldamiseks sobib kasutada serial konsooli, selleks tuleb graafilises konsooliaknas öelda tuuma parameetritele lisaks
... -- console=ttyS0,9600

Kasulikud lisamaterjalid