Virtualizácia s KVM na Ubuntu 8.10

Version 1.0
Auhor: Falko Timme <ft [at] falkotimme [dot] com>
Naposledy editované 10.12.2008

Prekladateľ: Miroslav Nadhajský

Pôvodný text: http://www.howtoforge.com/virtualization-with-kvm-on-ubuntu-8.10

Táto príručka vysvetľuje ako nainštalovať a používať KVM na vytváranie a beh VM (virtuálnych počítačov, mašín) na Ubuntu 8.10 server. Ukážeme si ako vytvárať image-based(založené na obraze disku) virtálne počítače a tiež virtálne počítače ktoré používajú logický oddiel disku (LVM-based). KVM je skratka pre Kernel-based Virtual Machine a používa hardvévovú virtualizáciu, to znamená že potrebuješ CPU ktoré podporuje hardvérovú virtualizáciu, napr. Intel VT alebo AMD-V.

Nedávam žiadnu garanciu, že ti toto bude fungovať!

1 Predbežná poznámka

Používam tu ako KVM hostiteľa počítač s hostname server1.example.com a IP adresou 192.168.0.100.

Pretože všetky kroky tohto tutoriálu budeme robiť s root-ovskými právami, môžme predstierať, že všetky príkazy v tomto tutoriále začínajú s reťazcom sudo alebo sa staneme rootom hneď, keď napíšeme

sudo su

2 Inštalácia KVM a vmbuilder

Najskôr skontrolujeme či tvoje CPU podporuje virtualizáciu- v tomto prípade príkaz

egrep '(vmx|svm)' --color=always /proc/cpuinfo

malo by ti zobraziť niečo ako:

root@server1:~# egrep '(vmx|svm)' --color=always /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext
 fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext
 fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch
root@server1:~#

Ak sa ti nič nezobrazilo, potom tovj procesor nepodporuje hardvérovú virtualizáciu, a tu musíš skončiť.

Na nainštalovanie KVM a vmbuilder-a (skriptu na vytvorenie Ubuntu-založených virtuálnych počítačov) spustíme

apt-get install ubuntu-virt-server python-vm-builder

Potom musíme pridať používateľa, tak ako sme teraz prihlásený (root) do skupiny libvirtd:

adduser 'id -un' libvirtd

Musíš sa odhlásiť a znova prihlásiť, aby nové členstvo v skupine malo účinok.

Pre kontrolu, či bolo KVM úspešne nainštalované, spusti

virsh -c qemu:///system list

Malo by to zobraziť niečo podobné ako toto:

root@server1:~# virsh -c qemu:///system list
Connecting to uri: qemu:///system
 Id Name                 State
----------------------------------

root@server1:~#

Ak ti zobrazilo namiesto toho chybu, tak niečo nie je v poriadku.

Ďalej potrebujeme nastaviť sieťový most (network bridge) na náš server, takže, naše virtuálne mašiny budú môcť byť prístupné od ostatných hostov, ako keby boli fyzickými systémami v sieti.

Na to ideme inštalovať balíček bridge-utils...

apt-get install bridge-utils

... a nakonfigurujeme most. Otvor /etc/network/interfaces:

vi /etc/network/interfaces

Pred modifikáciou môj súbor vyzeral nasledovne:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.0.100
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1

Zmenil som ho aby vyzeral takto:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.0.100
        network 192.168.0.0
        netmask 255.255.255.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        bridge_ports eth0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off

(Uisti sa že používaš správne nastavenia siete!)

Reštartuj sieť...

/etc/init.d/networking restart

... a spusti

ifconfig

Teraz by to malo zobraziť sieťový most (br0):

root@server1:~# ifconfig
br0       Link encap:Ethernet  HWaddr 00:1e:90:f3:f0:02
          inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:23 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1580 (1.5 KB)  TX bytes:2356 (2.3 KB)

eth0      Link encap:Ethernet  HWaddr 00:1e:90:f3:f0:02
          inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13539 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7684 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:19476849 (19.4 MB)  TX bytes:647692 (647.6 KB)
          Interrupt:251 Base address:0xe000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

vnet0     Link encap:Ethernet  HWaddr 3e:7c:6f:ab:0e:8c
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          inet6 addr: fe80::3c7c:6fff:feab:e8c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:468 (468.0 B)

root@server1:~#

3 Vytváranie Image-Based VM(Virtuálnu mašinu)

Teraz môžme vytvoriť našu prvú VM - image-based VM (ak očakávaš veľkú zátaž a veľa čítacích a zapisovacích operácií, namiesto nej použi LVM-based VM, ako je ukázané v kapitole 6 - image-based VM sú namáhavé na hard disk IO(vstup-výstup) ).

Vytvoríme novú zložku pre každú VM, takže chceme vytvoriť napr. ~/vm1, ~/vm2, ~/vm3, a tak ďalej, pretože každá VM bude mať podzložku nazvanú ubuntu-kvm, tak zrejme bude len jedna v zložke ~/vm1, napríklad. Ak sa pokúsiš vytvoriť druhú VM v ~/vm1, napríklad, dostaneš chybovú hlášku, že ubuntu-kvm už existuje (iba ak nespustíš vmbuilder s parametrom --dest=CIELOVAZLOZKA):

root@server1:~/vm1# vmbuilder kvm ubuntu -c vm2.cfg
2008-12-10 16:32:44,185 INFO     Cleaning up
ubuntu-kvm already exists
root@server1:~/vm1#

Použijeme nástroj vmbuilder na vytvorenie VM. (Tu sa môžeš dozvedieť viac.) vmbuilder používa šablóny na vytváranie VM - táto šablóna sa nachádza v zložke /etc/vmbuilder/libvirt/. Pretože ju musíme zmeniť, spravíme si kópiu a zmeníme tú:

mkdir -p ~/vm1/mytemplates/libvirt
cp /etc/vmbuilder/libvirt/* ~/vm1/mytemplates/libvirt/

Teraz otvoríme ~/vm1/mytemplates/libvirt/libvirtxml.tmpl...

vi ~/vm1/mytemplates/libvirt/libvirtxml.tmpl

... a zmeníme sekciu network z:

[...]
    <interface type='network'>
      <source network='default'/>
    </interface>
[...]

na:

[...]
    <interface type='bridge'>
      <source bridge='br0'/>
    </interface>
[...]

pretože chceme aby VM používala náš sieťový most (network bridge).

Teraz prichádzame ku vytváraniu partícií(diskovému oddielu) našej VM. Vytvoríme súbor s názvom vmbuilder.partition...

vi ~/vm1/vmbuilder.partition

... a definujeme si požadované partície nasledovne:

root 8000
swap 4000
---
/var 20000

Toto definuje koreňovú(root) partíciu (/) s veľkosťou 8000MB, swapovacou partíciou so 4000MB, a -var partíciou s 20000MB. Riadok --- spraví, že nasledujúca partícia (/var napríklad) je na samostatnom obraze disku (napríklad, toto vytvorí dva diskové obrazy, jeden na root a swap a jednu pre /var). Samozrejme, môžeš si definovať partície aké len chceš (pokiaľ si tiež definoval root a swap), a tiež môžu byť na jednom diskovom obraze - toto je len príklad.

Chcem nainštalovať openssh-server vo VM. Aby sme sa uistili, že každá VM dostane unikátny OpenSSH kľúč, nemôžme nainštalovať openssh-server keď vytvoríme VM. Preto si vytvoríme skript s názvom boot.sh, ktorý bude spustený keď VM nabootuje prvý krát. Nainštaluje to openssh-server (s unikátnym kľúčom) a tiež prinúti používateľa (pre moje VM použijem predvolené používateľské meno administrator a predvolené heslo howtoforge) aby si zmenil heslo keď sa prvý krát pripojí:

vi ~/vm1/boot.sh

# This script will run the first time the virtual machine boots
# It is ran as root.

# Expire the user account
passwd -e administrator

# Install openssh-server
apt-get update
apt-get install -qqy --force-yes openssh-server

Určite však zmeň používateľské meno administrator so svojim predvoleným menom.

(Tu o tom nájdeš viac: https://help.ubuntu.com/community/JeOSVMBuilder#First%20boot)

(Tiež si môžeš definovať "first login"(prvé prihlásenie) skript: https://help.ubuntu.com/community/JeOSVMBuilder#First%20login)

Vždy, keď vmbuilder vytvorí novú VM, musí stiahnuť balíčky z Ubuntu mirror (zrkadlený server), čo môže nejaký čas trvať. Aby sme toto zrýchlili, nainštalujeme apt-proxy...

apt-get install apt-proxy

... na cachovanie (vyrovnávacie ukladanie) stiahnutých balíčkov, takže nasledujúce inštalácie VM budú oveľa rýchlejšie.

Teraz otvoríme /etc/apt-proxy/apt-proxy-v2.conf...

vi /etc/apt-proxy/apt-proxy-v2.conf

... a zmeníme predvolený Ubuntu mirror, s mirror-om ktorý je blízko teba(napríklad http://de.archive.ubuntu.com/ubuntu ak si v Nemecku):

[...]
[ubuntu]
;; Ubuntu archive
backends = http://de.archive.ubuntu.com/ubuntu
min_refresh_delay = 15m
[...]

Potom reštartujeme apt-proxy:

/etc/init.d/apt-proxy restart

apt-proxy počúva na porte 9999, takže môžme posunúť náš lokálny apt-proxy "mirror" ako argument vmbuilder skriptu.

Teraz sa pozri na toto:

vmbuilder kvm ubuntu --help

aby si sa naučil o možných nastaveniach.

Na vytvorenie našej prvej VM, vm1, ideme do zložky VM...

cd ~/vm1/

... a spustíme vmbuilder, napríklad nasledovne:

vmbuilder kvm ubuntu --suite=intrepid --flavour=virtual --arch=amd64 --mirror=http://192.168.0.100:9999/ubuntu -o --libvirt=qemu:///system --tmpfs=- --ip=192.168.0.101 --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=boot.sh --mem=256 --hostname=vm1

 

Veľa z tých nastavení sú sebavysvetľujúce. --part špecifikuje súbor s detailami partícií, relatívne k nášmu pracovnému adresáru (preto sme museli najskôr vojsť do zložky VM pred spustením vmbuilder-a), --templates špecifikuje zložku v ktorej je uložený súbor šablóny (znova relatívne k nášmu pracovnému adresáru), a -firstboot špecifikuje skript spustený po prvom spustení. --libvirt=qemu:///system hovorí pre KVM, že má túto VM pridať do zoznamu dostupných VM. --addpkg ti umožní špecifikovať Ubuntu balíčky, ktoré chceš mať nainštalované počas vytvárania VM (pozri vyššie, prečo sme nemali pridať openssh-server do tohto zoznamu a namiesto toto sme použili skript po prvom spustení).

V riadku kde sa nachádza --mirror som uviedol môj lokálny apt-proxy mirror (http://192.168.0.100:9999/ubuntu) - Použil som moju verejne dostupnú IP adresu, namiesto localhost alebo 127.0.0.1, pretože tento mirror bude použitý vo VM v súbore /etc/apt/sources.list, a samozrejme VM by sa nemohla pripojiť na 127.0.0.1 hostiteľa. A samozrejme si môžeš uviesť oficiálny Ubuntu repozitár v nastavení --mirror, napríklad http://de.archive.ubuntu.com/ubuntu. Ak vynecháš nastavenie --mirror, potom bude použitý prednastavený Ubuntu repozitár (http://archive.ubuntu.com/ubuntu).

Proces vytvárania môže trvať zopár minút.

Potom, môžeš nájsť konfiguračný XML súbor pre VM v /etc/libvirt/qemu/ (=> /etc/libvirt/qemu/vm1.xml):

ls -l /etc/libvirt/qemu/

root@server1:~/vm1# ls -l /etc/libvirt/qemu/
total 8
drwxr-xr-x 3 root root 4096 2008-12-10 15:26 networks
-rw------- 1 root root  963 2008-12-10 16:25 vm1.xml
root@server1:~/vm1#

Obrazy diskov sú umiestnené v podadresári ubuntu-kvm/ adresára našej VM:

ls -l ~/vm1/ubuntu-kvm/

root@server1:~/vm1# ls -l ~/vm1/ubuntu-kvm/
total 402804
-rw-r--r-- 1 root root 240963584 2008-12-10 16:37 disk0.qcow2
-rw-r--r-- 1 root root 171094016 2008-12-10 16:37 disk1.qcow2
root@server1:~/vm1#

4. Vytváranie druhej VM

Ak chceš vytvoriť druhú VM (vm2), tu je krátke zhrnutie príkazov:

mkdir -p ~/vm2/mytemplates/libvirt
cp /etc/vmbuilder/libvirt/* ~/vm2/mytemplates/libvirt/

vi ~/vm2/mytemplates/libvirt/libvirtxml.tmpl

vi ~/vm2/vmbuilder.partition

vi ~/vm2/boot.sh

cd ~/vm2/
vmbuilder kvm ubuntu --suite=intrepid --flavour=virtual --arch=amd64 --mirror=http://192.168.0.100:9999/ubuntu -o --libvirt=qemu:///system --tmpfs=- --ip=192.168.0.102 --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=boot.sh --mem=256 --hostname=vm2

(Všimni si že nemusíš vytvoriť novú zložku pre VM (~/vm2), ak posunieš --dest=DESTDIR argument príkazu vmbuilder - dovolí ti to vytvoriť VM v zložke, kde už je vytvorená iná VM. V tom prípade, nemusíš vytvárať nové vmbuilder.partition a boot.sh súbory a nemusíš meniť šablónu, ale jednoducho použiť existujúce súbory:

cd ~/vm1/
vmbuilder kvm ubuntu --suite=intrepid --flavour=virtual --arch=amd64 --mirror=http://192.168.0.100:9999/ubuntu -o --libvirt=qemu:///system --tmpfs=- --ip=192.168.0.102 --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=boot.sh --mem=256 --hostname=vm2 --destdir=vm2-kvm

)

5. Spravovanie VM

Virtálne mašiny môžu byť spravované cez virsh, "virtuálny shell". Na pripojenie k virtuálnemu shell-u, spusti

virsh --connect qemu:///system

Takto vyzerá virtuálny shell:

root@server1:~/vm1/ubuntu-kvm# virsh --connect qemu:///system
Connecting to uri: qemu:///system
Welcome to virsh, the virtualization interactive terminal.

Type:  'help' for help with commands
       'quit' to quit

virsh #

Teraz môžeš písať príkazy do virtuálneho shell-u na spravovanie svojich VM. Spusti

help

aby si získal zoznam príkazov:

virsh # help
Commands:

    help            print help
    attach-device   attach device from an XML file
    attach-disk     attach disk device
    attach-interface attach network interface
    autostart       autostart a domain
    capabilities    capabilities
    connect         (re)connect to hypervisor
    console         connect to the guest console
    create          create a domain from an XML file
    start           start a (previously defined) inactive domain
    destroy         destroy a domain
    detach-device   detach device from an XML file
    detach-disk     detach disk device
    detach-interface detach network interface
    define          define (but don't start) a domain from an XML file
    domid           convert a domain name or UUID to domain id
    domuuid         convert a domain name or id to domain UUID
    dominfo         domain information
    domname         convert a domain id or UUID to domain name
    domstate        domain state
    domblkstat      get device block stats for a domain
    domifstat       get network interface stats for a domain
    dumpxml         domain information in XML
    freecell        NUMA free memory
    hostname        print the hypervisor hostname
    list            list domains
    migrate         migrate domain to another host
    net-autostart   autostart a network
    net-create      create a network from an XML file
    net-define      define (but don't start) a network from an XML file
    net-destroy     destroy a network
    net-dumpxml     network information in XML
    net-list        list networks
    net-name        convert a network UUID to network name
    net-start       start a (previously defined) inactive network
    net-undefine    undefine an inactive network
    net-uuid        convert a network name to network UUID
    nodeinfo        node information
    pool-autostart  autostart a pool
    pool-build      build a pool
    pool-create     create a pool from an XML file
    pool-create-as  create a pool from a set of args
    pool-define     define (but don't start) a pool from an XML file
    pool-define-as  define a pool from a set of args
    pool-destroy    destroy a pool
    pool-delete     delete a pool
    pool-dumpxml    pool information in XML
    pool-info       storage pool information
    pool-list       list pools
    pool-name       convert a pool UUID to pool name
    pool-refresh    refresh a pool
    pool-start      start a (previously defined) inactive pool
    pool-undefine   undefine an inactive pool
    pool-uuid       convert a pool name to pool UUID
    quit            quit this interactive terminal
    reboot          reboot a domain
    restore         restore a domain from a saved state in a file
    resume          resume a domain
    save            save a domain state to a file
    schedinfo       show/set scheduler parameters
    dump            dump the core of a domain to a file for analysis
    shutdown        gracefully shutdown a domain
    setmem          change memory allocation
    setmaxmem       change maximum memory limit
    setvcpus        change number of virtual CPUs
    suspend         suspend a domain
    ttyconsole      tty console
    undefine        undefine an inactive domain
    uri             print the hypervisor canonical URI
    vol-create      create a vol from an XML file
    vol-create-as   create a volume from a set of args
    vol-delete      delete a vol
    vol-dumpxml     vol information in XML
    vol-info        storage vol information
    vol-list        list vols
    vol-path        convert a vol UUID to vol path
    vol-name        convert a vol UUID to vol name
    vol-key         convert a vol UUID to vol key
    vcpuinfo        domain vcpu information
    vcpupin         control domain vcpu affinity
    version         show version
    vncdisplay      vnc display

virsh #

list

ukáže všetky bežiace VM;

list --all

ukáže všetkyVM, bežiace aj neaktívne:

virsh # list --all
 Id Name                 State
----------------------------------
  - vm1                  shut off

virsh #

Pred tym ako naštartuješ svoju VM po prvý krát, musíš ju definovať z jej xml súboru (umiestneného v zložke /ect/libvirt/qemu/):

define /etc/libvirt/qemu/vm1.xml

Všimni si že kedykoľvek zmeníš xml súbor pre VM v /etc/libvirt/qemu/, musíš spustiť príkaz define znova!

Teraz môžeš naštartovať VM:

start vm1

Za chvíľu by si už mal mať možnosť príhlásiť sa na VM s SSH klientom napríklad ako PuTTY; prihlás sa s predvoleným používateľským menom a heslom. Po prvom prihlásení budeš vyzvaný na zmenu hesla.

list

by teraz mal zobraziť VM ako bežiacu:

virsh # list
 Id Name                 State
----------------------------------
  1 vm1                  running

virsh #

Pre zastavenie VM spusti

shutdown vm1

Pre okamžité zastavenie (napr. odpojenie zo zasuvky), spusti

destroy vm1

Suspendovanie (pozastavenie) VM:

suspend vm1

Pokračovanie VM:

resume vm1

Toto sú najdôležitejšie príkazy.

Napíš

quit

pre opustenie virtuálneho shell-u.

6 Vytváranie LVM-Based VM

LVM-based VM majú pár výhod oproti image-based VM. Nie sú také náročné na hard disk IO, a ľahšie sa zálohujú (použitím LVM snapshot).

Na použitie LVM-based VM, potrebuješ skupinu oddielov, ktorá má voľné miesto, a ktoré nie je pridelené žiadnemu logickému oddielu. V tomto príklade, použijem skupinu oddielov /dev/vg01 s veľkosťou približne 454GB...

vgdisplay

root@server1:~# vgdisplay
  --- Volume group ---
  VG Name               vg01
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               454.67 GB
  PE Size               4.00 MB
  Total PE              116396
  Alloc PE / Size       75000 / 292.97 GB
  Free  PE / Size       41396 / 161.70 GB
  VG UUID               q3xIiX-LDlm-IbMu-2PK2-WVoc-zHb8-8ibb32

root@server1:~#

...ktorá obsahuje logický oddiel /dev/vg01/root s veľkosťou približne 292GB - zvyšok nie je pridelený a môže byť použitý pre virtuálne mašiny:

lvdisplay

root@server1:~# lvdisplay
  --- Logical volume ---
  LV Name                /dev/vg01/root
  VG Name                vg01
  LV UUID                f9W43z-RC1i-9JE8-CvOS-Qa89-0STq-q1M71e
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                292.97 GB
  Current LE             75000
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:0

root@server1:~#

Teraz vytvorím virtálnu mašinu vm5 ako LVM-based VM. Môžme znova použiť príkaz vmbuilder. vmbuilder pozná --raw nastavenie, ktoré dovoľuje zapísať VM do blokového zariadenia (napr. /dev/vg01/vm5) - vyskúšal som to, nevrátilo mi žiadne chyby, ale aj tak sa mi nepodarilo nabootovať VM (start vm5 tiež neukázalo žiadne chyby, ale nemal som prístup do VM). Preto vytvorím vm5 najskôr ako image-based VM a potom ju konvertujem do LVM-based VM.

mkdir -p ~/vm5/mytemplates/libvirt
cp /etc/vmbuilder/libvirt/* ~/vm5/mytemplates/libvirt/

vi ~/vm5/mytemplates/libvirt/libvirtxml.tmpl

Uisti sa že si vytvoril všetky partície v jednom obrazovom (image) súbore, čiže nepoužívaj --- v súbore vmbuilder.partition:

vi ~/vm5/vmbuilder.partition

root 8000
swap 2000
/var 10000

vi ~/vm5/boot.sh

cd ~/vm5/
vmbuilder kvm ubuntu --suite=intrepid --flavour=virtual --arch=amd64 --mirror=http://192.168.0.100:9999/ubuntu -o --libvirt=qemu:///system --tmpfs=- --ip=192.168.0.105 --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=boot.sh --mem=256 --hostname=vm5

V súbore vmbuilder.partition vidíš že VM môze použit najviac 20GB, takže vytvoríme logický oddiel nazvaný /dev/vg01/vm5 s veľkosťou 20GB:

lvcreate -L20G -n vm5 vg01

Nevytváraj súborový systém v novom logickom oddieli!

Použijeme qemu-img príkaz na konvertovanie obrazu do LVM-based VM. qemu-img príkaz je časť balíčku qemu, ktorú musíme nainštalovať:

apt-get install qemu

Potom pôjdeme do ubuntu-kvm/ zložky našej VM...

cd ~/vm5/ubuntu-kvm/

... a skonvertujeme obraz nasledovne:

qemu-img convert disk0.qcow2 -O raw /dev/vg01/vm5

Potom môžeš vymazať obraz disku:

rm -f disk0.qcow2

Teraz musíme otvoriť xml konfiguračný súbor našej VM, /etclibvirt/qemu/vm5.xml...

vi /etc/libvirt/qemu/vm5.xml

... a zmeniť nasledujúcu sekciu...

[...]
    <disk type='file' device='disk'>
      <source file='/root/vm5/ubuntu-kvm/disk0.qcow2'/>
      <target dev='hda' bus='ide'/>
    </disk>
[...]

... tak, že vyzerá nasledovne:

[...]
    <disk type='file' device='disk'>
      <source file='/dev/vg01/vm5'/>
      <target dev='hda' bus='ide'/>
    </disk>
[...]

To je všetko! Teraz môžeš použiť virsh na správu VM.

7 Linky

 

Copyright © 2008 Falko Timme
All Rights Reserved.