Obecný úvod do problematiky virtualizace v prostředí GNU/Linux s využitím jaderného hypervizoru KVM.
Všechny zde uvedené postupy a příklady jsou provozovány a odzkoušeny pod distribucí Slackware Linux, ale jsou platné i pro ostatní distribuce. Názvy použitých aplikací se od distribučních balíků mohou mnohdy lišit. Tento návod postupně doplňuji o nové a aktuální informace aby držel krok s aktuálním stavem jádra a QEMU. Text se týká především virtualizace pomocí nástroje QEMU a hypervizoru KVM. Z hlediska pokročilých technologií vysoké dostupnosti virtuálních strojů bude nutné poukázat na nástroje, které souvisí spíš s problematikou Clusterů o kterých bude tento text pouze okrajově. Nejsou zde popsány všechny volby a parametry QEMU, pouze ty nejpoužívanější a potřebné k běžnému provozu. Prozatím zde nebude počítáno s hardwarem jako iSCSI, SAN/NAS,... protože tyto technologie nemám na svém pracovním notebooku k dispozici :). Pokud čas dovolí, chtěl bych zde zveřejnit i pomocné skripty a nějaké konkrétní příklady nasazení od A do Z a ukázat, že existují i jiné řešení než komerční produkty, které nejsou méně kvalitní naopak se mohou komerčním produktům ve většině rovnat a v něčem je i předčít.
Teoretický základ
Co budeme potřebovat
- CPU s podporou virtualizace (zde používám Intel)
- jádro s podporou KVM (zde používaná verze 3.1.X)
[*] Virtualization --->
<M> Kernel-based Virtual Machine (KVM) support
<M> KVM for Intel processors support
< > KVM for AMD processors support
[ ] Audit KVM MMU
<M> Host kernel accelerator for virtio net (EXPERIMENTAL)
< > Linux hypervizor example code
<M> PCI driver for virtio devices (EXPERIMENTAL)
<M> Virtio balloon driver (EXPERIMENTAL)
Device Drivers --->
[*] Network device support --->
<M> Universal TUN/TAP device driver support
[*] Block devices --->
<M> Virtio block driver (EXPERIMENTAL)
Networking support --->
Networking options --->
<M> 802.1d Ethernet Bridging
<M> 802.1Q VLAN Support
|
Pozor: Většina distribucí obsahuje jádro s podporu virtualizace, případně stačí nainstalovat potřebný balíček, který zajišťuje podporu v podobě modulů. Pokud se rozhodnete kompilovat vlastní jádro, postupujte podle instrukcí pro danou distribuci. V případě kompilace vanilla jádra (přímo z kernel.org) jste odkázáni na vlastní zkušenosti :).
Rada: Klasický postup kompilace vanilla jádra je následující. Ověřte si zda máte potřebné nástroje pro kompilaci. Pokud nechcete procházet všechny parametry co jádro nabízí je dobré použít současný .config (pokud jej nemáte, můžete vygenerovat např cat /proc/config.gz | grep -d > .config). V adresáři kde máte zdrojové kódy jádra (většinou /usr/src/linux-VERSION) proveďte make mrproper, nakopírujte .config do /usr/src/linux-VERSION a pokračujte příkazy make oldconfig && make nconfig; make && make modules_install dále je nutné nakopírovat /usr/src/linux-VERSION/vmlinuz,System.map,arch/x86/boot/bzImage do /boot/ upravit boot loader, případně vygenerovat initrd.
- qemu-kvm : git clone git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git
- vde2 : svn co https://vde.svn.sourceforge.net/svnroot/vde/trunk/vde-2 vde_svn
- spice : git clone git://git.freedesktop.org/git/spice/spice-protocol;git clone git://git.freedesktop.org/git/spice/spice
- bridge-utils : součást každé distribuce
- uml_utilities : většinou součástí všech distribucí
Sestavení a instalace nástrojů
V případě kdy vaše distrubuce nenabízí všechny požadované nástroje ve svých repozitářích, budete muset sáhnout ke kompilaci ze zdrojových kódů. Ve většině distribucích jsou všechny balíčky nabízeny s vyjímkou nástroje SPICE Space, který nemusí některé distribuce nabízet. V takovém případě nebude pravděpodobně ani QEMU s podporou protokolu SPICE Space a bude nutné oba nástroje sestavit ze zdrojových kódů.
SPICE Space
- Projekt je rozdělen na dvě části. Nejprve je nutné sestavit a nainstalovat spice-protocol a následně sestavit a nainstalovat klient/server aplikaci. Zde volím zdrojové kódy z git repozitáře, protože v případě SPICE Space je vhodné používat aktuální verzi.
git clone git://cgit.freedesktop.org/spice/spice-protocol
cd spice-protocol
test -d ./m4 || mkdir ./m4
./autogen.sh --prefix=/usr/local
make
make install
|
Pozor: Kompilace klient / server součásti SPICE Space vyžaduje poměrně větší množství aplikací viz spice-space.org/page/Building_Instructions a některé v konkrétních verzích, což může být časo problém. Proto není kompilace příliš jednoduchá a často obnáší ruční přiohnutí systému tak, jak je potřeba.
git clone git://cgit.freedesktop.org/spice/spice-protocol
git clone git://cgit.freedesktop.org/spice/spice
git clone git://cgit.freedesktop.org/spice/win32/vd_agent
git clone git://cgit.freedesktop.org/spice/win32/qxl
git clone git://cgit.freedesktop.org/spice/slirp
# v případě, že nemáte správnou verzi celt-0.5.1.3 je nutné stáhnout a
# sestavit i tento nástroj (pozor na kolize s distribučním balíkem)
wget http://downloads.us.xiph.org/releases/celt/celt-0.5.1.3.tar.gz
cd spice
./autogen.sh --prefix=/usr/local
make
make install
|
qemu-kvm
- V mém případě budu kompilovat QEMU ze zdrojových kódů, nicméně je možné použít distribuční balíčky pokud tento nástroj nabízí. Sestavovat budu s podporou vzdáleného přístupu přes VNC, s podporou virtuálních distribuovaných switchů VDE2 a protokolem SPICE Space. V první fázi je nutné vytvořit uživatele a skupinu s názvem kvm.
getent group kvm > /dev/null || groupadd kvm
getent passwd kvm > /dev/null || useradd -g kvm -G kvm -d / -s \
/sbin/nologin -c "qemu-kvm user" kvm
gpasswd -a UZIVATEL kvm
./configure \
--prefix=/usr/local \
--sysconfdir=/etc \
--enable-mixemu \
--audio-drv-list="alsa" \
--audio-card-list="ac97" \
--enable-sdl \
--enable-curses \
--enable-vnc \
--enable-system \
--enable-kvm \
--enable-vde \
--disable-xen \
--enable-spice \
--enable-uuid \
--extra-cflags="$CFLAGS" \
--target-list="i386-softmmu x86_64-softmmu"
make V=1 \
mandir=/usr/man \
docdir=/usr/doc/qemu-kvm-1.0 \
make install \
mandir=/usr/man \
docdir=/usr/doc/qemu-kvm-1.0 \
|
Rada: Pokud kompilujete ze zdrojových kódu, je v takovém případě rozumné myslet na optimalizace překladu, které mohou o něco zvýšit rychlost sestavené aplikace. Důležité jsou exportované proměnné CFLAGS, CPPFLAGS, CXXFLAGS, které nastavíme následujícím způsobem: export CFLAGS="$CFLAGS -mtune=core2 -march=core2"; export CPPFLAGS="$CPPFLAGS -mtune=core2 -march=core2"; export CXXFLAGS="$CXXFLAGS -mtune=core2 -march=core2"; samozřejmě místo core2 použijete odpovídající architekturu.
Začínáme
Pro první experimenty s QEMU je nutné splnit předpoklad, že všechny uvedené požadavky na programové vybavení jsou splněny. Z hlediska hardware postačí pro lehké experimentování jakýkoli hardware s CPU podporující virtualizaci a alespoň 2GB RAM a potřebné místo na disku (řekněme 20GB). V reálném nasazení budou požadavky určeny konkrétní situací.
Vytvoření virtuálního disku
Při tvorbě virtuálního stroje je v prvním kroku nutné vytvořit virtuální disk o potřebné velikosti a formátu.
qemu-img create -f qcow2 -o preallocation=metadata disk.img 10G |
- -f formát : typ obrazu disku, nejčastěji qcow2
- raw : čistý formát, který je možné přenášet do různých emulátorů
- qcow2 : možnost použití komprese, šifrování a snímků
podporované možnosti:
- encription=on : aktivace šifrování dat
- cluster_size=NUM (512 až 2000)
- preallocation=off/metadata : režim preallokace dat, volba metadata může mít pozitivní vliv na výkon
- vpc : Microsoft Virtual PC formát
- vdi : Virtual Box formát
- vmdk : formát podporovaný nástroji vmware 3.X/4.X
podporované možnosti:
- compat6 : VMDK verze 6 místo verze 4
- cloop : komprimovaný Linuxový ISO obraz
První spuštění
- spustíme virtuální stroj, který bude mít tyto prostředky: 256MB RAM, CDROM s iso-image nějaké distribuce Linuxu, DISK 10GB disk.img. Výstup bude prostřednictvím SDL v terminálu X11. Je tedy nutné spouštět QEMU v grafickém prostředí. Druhý příklad umožní spustit virtuální stroj bez výstupu na terminál. Takový stroj může běžet na pozadí a přístup ke stroji je možný přes VNC.
qemu-system-x86_64 -cdrom iso.img -hda disk.img -net nic -net user -m 256 -localtime |
qemu-system-x86_64 -nographic -vnc HOST_IP_ADDR:0 -cdrom iso.img -hda disk.img -net nic -net user -m 256 -localtime |
Sítě ve virtuálním prostředí
- -net nic : slouží pro konfiguraci sítě v QEMU a má následující možnosti
- vlan{0..X} : v případě více síťových zařízení. Jinak je automaticky přiřazeno vlan0
- macaddr= : nastavení MAC adresy virtuální síťové kartě
- model= : model síťové karty, což ovlivňuje i přenosovou rychlost. Na výběr je virtio (používá se prostředictvím jádra přímo fyzická síťová karta - nejoptimálnější možnost), e1000 (emulace Intel Gigabitové karty), pcnet (emulace Gigabitové karty, shodné s vmware-tools), rtl8139 (emulace nejznámější 100Mbps karty Realtek), ne2k_pci (emulace staré 10Mbps karty Realtek)
- -net {none, user, socket, tap, vde} : nastavení tzv backendu pro NIC, tj. možnosti komunikace po síti mezi virtuálním strojem a fyzickým strojem
- none : žádná konektivita
- user : interní NAT připojený k tap zařízení
- socket : propojení dvou nebo více virtuálů pomocí soketu
- tap : propojení virtuální a skutečné sítě přes zařízení tap0
- vde : virtuální switch, komunikace se děje pomocí socketů v userspace. Může mít negtivní vliv na propustnost.
Základní síť přes interní NAT
Nejjednodušší použití s jedním virtuálem, který má jedno síťové zařízení. Podporovány jsou pouze TCP a UDP. ICMP nebude fungovat, stejně tak není virtuál přímo dosažitelný s hosta. Jedná se o dvě oddělené sítě.
GUEST
eth0
|
----------
| NIC |
| vlan=0 |
| USER |
----------
|
VLAN0
qemu-system-x86_64 ... -net nic,macaddr=00:00:00:00:00:01 -net user,vlan=0 |
Síť přístupná pro venkovní svět
Následující příklad bude demonstrovat případ, kdy potřebujeme ve virtuálním stroji síť, která bude dosažitelná pro venkovní svět. Tohle se nejčastěji řeší pomocí bridge a zařízení tun/tap. Více viz následující příklad.
GUEST
eth0
|
----------
| NIC |
| vlan=0 |
| TAP |
----------
|
VLAN0
vytvoříme zařízení tap0, které zapojíme do bridge s eth0
ip addr flush eth0
ip link set eth0 down
brctl addbr br0
tunctl -t tap0
brctl addif br0 tap0
brctl addif br0 eth0
|
následně nakonfigurujeme síť, v našem případě bude mít hypervizor adresu 192.168.1.2/255.255.255.0
s výchozí bránou 192.168.1.1
ip li set tap0 up
ip li set eth0 up
ip li set br0 up
ip addr add 192.168.1.2/24 dev br0 broadcast 192.168.1.255
ip route add default via 192.168.1.1
|
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl net.ipv4.conf.br0.forwarding=1
sysctl net.ipv4.conf.eth0.forwarding=1
|
qemu-system-x86_64 ... -net nic,macaddr=00:00:00:00:00:01 -net user,vlan=0 |
Jeden virtuál a dvě síťové zařízení
Následující příklad demonstruje použití dvou síťových zařízení v jednom virtuálním počítači. Zařízení eth0 bude připojeno přímo do sítě hosta, eth1 bude připojeno interním NATem. Konfigurace eth0, respektive zařízení tap0 bude probíhat stejně jako u předchozího příkladu.
GUEST
eth0 eth1
| |
-------------------
| NIC | NIC |
| vlan=0 | vlan=1 |
| TAP | USER |
-------------------
| |
VLAN0 VLAN1
HOST
nejprve musíme připravit v hostovském systému síť, tj. tvorba zařízení tap0 které bude s eth0 zapojeno do bridge a zapnutí forwardování
ip addr flush eth0
ip link set eth0 down
brctl addbr br0
tunctl -t tap0
brctl addif br0 tap0
brctl addif br0 eth0
ip li set tap0 up
ip li set eth0 up
ip li set br0 up
ip addr add 192.168.1.2/24 dev br0 broadcast 192.168.1.255
ip route add default via 192.168.1.1
|
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl net.ipv4.conf.br0.forwarding=1
sysctl net.ipv4.conf.eth0.forwarding=1
|
následně můžeme spustit qemu s potřebným nastavením
qemu-system-x86_64 ... -net nic,vlan=0,macaddr=00:00:00:00:00:01 -net tap,vlan=0,ifname=tap0,script=no -net nic,macaddr=00:00:00:00:00:02 -net user,vlan=1 |
Virtualní switch
VDE (Virtual Distributed Ethernet) slouží ve spojitosti s QEMU především k tvorbě virtuálních switchů. Komunikace probíhá přes sokety v uživatelském režimu (absence práv roota). Při spouštění instance vde_switch je nutné specifikovat cestu k soketu, protože v případě výchozí cesty by nešlo vytvořit více než jeden switch (každá instance musí používat jiný soket).
vytvoříme virtuální switch vSwitch1 s potřebným oprávněním a cestou k soketu
vde_switch -m 660 -g kvm d -s /tmp/vSwitch1 -M /tmp/vSwitch1.mgmt |
pomocí unixterm se můžeme přihlásit k soketu /tmp/vSwitch1.mgmt čímž se aktivuje řídící konzole switche. Základní příkazi virtuální konzole jsou následující:
- help : nápověda
- logout : odhlášení
- shutdown : vypnutí virtuálního switche
- showinfo : základní informace o stavu
každý virtuální switch má stejně jako fyzický switch určitý počet portů (nastaveno pomocí vde_switch -n NUM) a tyto porty je nutné s něčím propojit. K propojování a tvorbě virtuálních portů slouží:
- dpipe : propojuje virtuální zásuvky (sokety) vytvořené utilitou vde_plug
- vde_plug : vytváří virtuální zásuvky
- vde_pcapplug : připojení virtuálního switche k síťovému zařízení na úrovni transportní vrstvy TCP/IP
- vde_plug2tap : připojení virtuálního switche k síťovému zařízení na úrovni ethernetu
- vde_l3 : Layer 3 switch, možnost relizace routování a shapingu mezi virtuálními switchi
příklad propojení dvou virtuálních switchů vSwitch1 a vSwitch2
dpipe vde_plug /tmp/vSwitch1 = vde_plug /tmp/vSwitch2 |
příklad propojení dvou virtuálních switchů šifrovaně přes SSH vSwitch1 a vSwitch2
dpipe vde_plug /tmp/vSwitch1 = ssh user@HOST2 vde_plug/tmp/vSwitch2 |
příklad propojení virtuálního switche a fyzické síťové karty na úrovni transportní vrstvy TCP/IP. Parametr -m nastavuje oprávnění a parametr -g skupinu která má právo pracovat se soketem.
vde_pcapplug -d -m 660 -g kvm -s /tmp/vSwitch1 eth0 |
příklad propojení virtuálního switche a fyzické síťové karty na úrovni ethernetu. Parametr -m nastavuje oprávnění a parametr -g skupinu která má právo pracovat se soketem.
vde_plug2tap -d -m 660 -g kvm -s /tmp/vSwitch1 tap0 |
virtuální stroj s přístupem k sítí přes VDE2 spustíme následujícím způsobem
qemu-system-x86_64 ... -net nic,macaddr=00:00:00:00:00:01 -net vde,sock=/tmp/vSwitch1,group=kvm,mode=660 |
Nastavení periférií
Pomocí QEMU můžeme detailně nastavit parametry virtuálních zařízení (podobně jako u nastavení sítě). Nejčastěji se při konfiguraci virtuálního stroje nastavují parametry CPU (typ, počet jader, vláken, ...), bloková zařízení (typ média, cache, I/O režim, formát, ...), nastavení sběrnice USB, nastavení displeje. Dále se podíváme na nastavení týkající se pouze x86 architektury.
CPU
- -cpu OPTIONS : model procesoru a podporované instrukční sady (vice viz -cpu ?)
- -smp N [OPTIONS] : počet CPU pro SMP (maximum je 255), další volby jsou následující
- cores=N : počet jader CPU
- threads=N : počet vláken pro každé jádro
- sockets=N : počet virtuálních CPU
- maxcpus=N : maximální počet virtuálních CPU
- následující příklad ukazuje použití parametrů pro CPU v praxi
qemu-system-x86_64 ... -cpu core2duo -smp 2 |
- v případě omezení virtuálního CPU na některé funkce je možné použít následující
qemu-system-x86_64 -cpu qemu64,+ssse3,+sse4.1,... |
IDE/SCSI
- -drive OPTIONS : nastavení virtuálních IDE/SCSI zařízení
- file=path : cesta k souboru s virtuálním diskem
- if=interface : typ zařízení (ide, scsi, sd, mtd, floppy, pflash, virtio)
- bus=N, unit=id : číslo sběrnice a id jednotky kde je zařízení připojeno
- media=type : typ média (disk,cdrom)
- cyls=C,heads=H,secs=S,trans=T : nastavení geometrie disku (1 <= c <= 16383, 1 <= h <= 16, 1 <= s <= 63) (t=none, lba or auto)
- snapshot={on,off} : povolení nebo zakázaní snapshotů pro konkrétní zařízení
- cache=type : typ vyrovnávací paměti (none, writeback, unsafe, directsync, writethrough)
- aio=type : AIO Linux nativní, nebo pthread disk I/O (native, threads)
- format=type : typ diskového formátu místo automatického určení
- serial=N : seriové číslo zařízení
- addr=addr : adresa radiče PCI (pouze u volby if=virtio)
- werror=action,rerror=action : akce při chybovém čtení nebo zápisu "ignore" (ignorovat chybu), "stop" (zastavit virtuální stroj), "enospc" (v případě že je disk hosta plný zastavit virtuální stroj, jinak reportovat error). Výchozí stav je werror=enospc,rerror=report
- readonly=N : používat zařízení pouze ke čtení
USB zařízení
- -usb : aktivuje podporu USB
- -usbdevice device [OPTIONS] : přidá USB zařízení
- mouse : virtualni PS/2 myš
- tablet : ukazovací zařízení (touchscreen)
- disk:[format=format]:file : emulace USB disku (file=cesta k souboru, format=misto detekce nastavi typ formátu disku, např raw)
- host:bus.addr : sdílení fyzického zařízení virtuálním strojem, které je určené pomocí bus.addr
- host:vendor_id:product_id : sdileni fyzickeho zařizeni virtuálním strojem, které je určené pomocí vendor_id:product_id
- serial:[vendorid=vendor_id,productid=product_id]:dev : konvertor seriového zařízení
- braille : emulace zařízení Braillova pisma
- net:options : síťový adaptér podporující CDC ethernet a RNDIS protokol
- chceme-li používat fyzické USB zařízení ve virtuálu, je třeba pomocí programu lsusb najít vendor_id:product_id USB zařízení
root@hypervizor:/# lsusb
Bus 001 Device 003: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
|
qemu-system-x86_64 ... -usb -usbdevice host:051d:0002
|
VGA a zobrazování
Grafické adaptery které jsou nabízeny v emulovaném/virtuálním prostředí jsou pouze ty základní, potřebné pro běžnou činnost. Kdo by hledal ve virtuálním prostředí grafické 3D efekty, může na to ihned zapomenout. Nejběžnější zobrazování virtuálního stroje se děje pomocí SDL v X11 a nebo vzdáleně přes VNC což je jednodušší varianta. Další možností vzdáleného přístupu je protokol Spice-space kterému se chci věnovat v některé z dalších pokračování.
- -vga type : typ emulované grtafické karty
- cirrus : Cirrus Logic GD5446 (výchozí karta)
- std : standardní grafická VESA 2.0 VBE karta (doporučená pro větší rozlišení než 1280x1024x16)
- vmware : vmware SVGA II adaptér
- qxl : QXL paravirtualizovaná karta (s podporou VESA 2.0 VBE, doporučená pro SPICE protokol)
- -display type : typ grafického výstupu
- sdl : výstup přes SDL
- curses : textový výstup přes curses/ncurses
- none : žádný výstup
- vnc : výstup přes VNC protokol
- -sdl : aktivace SDL
- -curses : výstup přes curses/ncurse místo SDL
- -nographic : deaktivace veškerého výstupu
- -full-screen : celoobrazovkový režim
- -rotate : rotace obrazu doleva
- -portrait : otočení obrazu o 90 stupňů doleva
- -vnc OPTIONS : vzdálený přístup přes VNC protokol
- host:port : IP adresa nebo DNS jméno a port hypervizoru pro přístup přes VNC
- unix:path : v případě použití soketu cesta k jeho umístění
- none : bez startu VNC serveru
- qxl : QXL paravirtualizovaná karta (s podporou VESA 2.0 VBE, doporučená pro SPICE protokol)
- reverse : reverzní připojení klienta
- password : autentizace heslem
root@hypervizor:/# qemu-system-x86_64 ... -vnc 192.168.1.1:0, password -monitor stdout
QEMU 0.15.0 monitor - type 'help' for more information
(qemu) change vnc password
Password: ******
|
- tls : komunikace mezi klientem a serverem přes TLS, doporučeno v kombinace s x509 nebo x509verify
- x509=path : cesta k X509 certifikátu pro autentizaci
- x509verify=path : cesta k X509 certifikátu pro autentizaci s ověřením klienta
qemu-system-x86_64 ... -vnc 192.168.1.1:0,tls,x509verify=/etc/pki/qemu-kvm
|
- sasl : ověření přes SASL
qemu-system-x86_64 ... -vnc 192.168.1.1:0,tls,x509,sasl -monitor stdio
|
- acl : použítí kontroly přístupu
- lossy : ztrátová komprese přenosu dat (může ušetřit pásmo na úkor kvality)
- non-adaptive : nepoužívat adaptivní kódovaní přenosu obrazu (bude se aktualizovat vše, ne jen často měněné oblasti)
Bootování
- -boot OPTIONS : nastavení zavádění systému
- order=drives : nastavení pořadí zařízení při bootu (cdn... tj nejprve se systém vyhledává na primárním IDE zařízení, pak sekundárním IDE zařízení a konečně se bootuje přes síť)
- once=drive : nastavení z jakého zařízení se bude bootovat (n, d ,c, ...)
- menu=on|off : aktivace / deaktivace boot menu
Speciální nastavení pro x86
- -win2k-hack : v případě virtuálního stroje s Windows 2000 nutné pro instalační proces v případě že bude instalátor hlásit plný disk
- -no-acpi : deaktivuje podporu ACPI, vhodné v případě problému při bootování nebo nečekaných pádech virtuálního stroje
- -no-hpet : deaktivuje podporu HPET
- -baloon none : deaktivuje podporu balónové zprávy paměti (ve výchozím stavu je balónový ovladač aktivní)
Vysvětlení: Balónový ovladač paměti pracuje na principu nafouknutí v hostovaném systému čímž zabere paměť která se pro procesy v tu dobu stane nedostupná. V případě, že hostitel (hypervizor) potřebuje paměť má ji díky balónu k dispozici. V případě, že paměť nutně potřebuje virtuální stroj, balón se vyfoukne a poskytne systému paměť.
Ostatní parametry
Nekteré další zajímavé parametry QEMU, které jsem nepoužil v předchozích sekcích, ale moho se docela hodit.
- -readconfig path : načtení konfigurace virtuálního stroje ze souboru
- -writeconfig path : zapsání konfigurace virtuálního stroje do souboru
- -k language : jazyk klávesnice
- -name name : jméno virtuálního stroje
- -uuid uuid : nastavení UUID
Správa virtuálních strojů
Nástroj QEMU slouží nejen pro tvorbu virtuálních strojů, ale také k jejich správě. Obsahuje sadů nástrojů pro správu virtuálních disků, tvorbu snapshotů (snímků), migraci virtuálních strojů a jejich monitorování. Ve výchozím stavu se vše děje v konzoli, ale existuje řada grafických nádstaveb pro QEMU, které umožní pohodlnou správu virtuálních strojů s grafického rozhraní.
Tvorba snapshotů
- snapshoty (snímky) jsou kopie aktuálního stavu virtuálního stroje. Vhodné například pro uložení stavu stroje před rizikovým úkonem (máme tak možnost vždy se vrátit do předchozího stavu).
- snímky nemůžeme považovat za plnohodnotnou zálohu
- snímky využívá migrace
- princip snapshotů je následující
pozastavení VM -> tvorba COW image -> vyprázdnení I/O bufferu -+
|
spuštění VM <- otevření nového image <- zavření starého image <-
tvorba snímků na lokální filesystém probíhá pomocí nástroje qemu-img
qemu-img create -f qcow2 -b disk.img snapshot.qcow2
|
informace o snapshotu
qemu-img snapshot -l snapshot.qcow2
qemu-img info snapshot.qcow2
|
pro další správu snapshotů lze použít
qemu-img snapshot [OPTIONS]
|
- -a snapshot : návrat ke stavu před snapshotem
- -c snapshot : vytvoření snímku
- -d snapshot : smazání snímku
Správa virtuálních disků
Jak vytvořit virtuální disk bylo ukázáno zde Vytvoření virtuálního disku. Nástroj qemu-img umožňuje další operace s virtuálním diskem jako je změna velikost nebo konverze do jiného formátu.
- convert [-f format] [-c] [-e] [-O output_format] [-o options] file_in [file_in2,...] file_out : konverze diskového obrazu do jiného formátu (-c povolí kompresi, -e povolí šifrování, -o umožní další nastavení výstupního typu formátu)
- resize file [+|-] size : změna velikosti snímku