Fedora 11 was al een beheerdersfestijn op vlak van virtualisatie, en in versie 12 zet de Linux-distributie deze evolutie verder. Met Kernel SamePage Merging bijvoorbeeld worden identieke geheugenpagina's van verschillende gast-images voor KVM gedeeld, waardoor Fedora meer virtuele machines tegelijk kan draaien. Je kunt nu ook een netwerkinterface aan een gast toevoegen zonder die te hoeven herstarten en er zijn nog heel wat andere verbeteringen op vlak van virtualisatie.

De opvallendste nieuwigheid voor beheerders is de toevoeging van libguestfs en guestfish. Voor de eindgebruiker is vooral guestfish interessant: hiermee kun je images van virtuele machines manipuleren zonder de virtuele machines op te starten. Onder de motorkap draait de bibliotheek libguestfs, die ook een API aanbiedt met bindings voor verschillende programmeertalen. Libguestfs kan verschillende bestandssystemen lezen, waaronder Ext2/3/4, Btrfs, FAT en NTFS. Ook LVM kan gelezen worden en als type image ondersteunt het qcow2 en VMDK.

Interactieve shell

Het programma guestfish biedt allereerst een interactieve shell aan:

$ guestfish

Welcome to guestfish, the libguestfs filesystem interactive shell for

editing virtual machine filesystems.

Type: 'help' for help with commands

'quit' to quit the shell

>

Daarin kun je dan commando's uitvoeren (zie de man-pagina voor de ondersteunde commando's). Pas bijvoorbeeld /boot/grub/grub.conf aan om een opstartprobleem van een virtuele machine op te lossen:

add disk.img

run

mount /dev/vg_guest/lv_root /

mount /dev/sda1 /boot

edit /boot/grub/grub.conf

Het aantal commando's dat guestfish kent is immens, we verwijzen hiervoor naar de man-pagina.

Eén commando

Je hoeft echter geen interactieve shell in guestfish te openen om die commando's in te geven. Je kunt ook in één keer het gewenste commando ingeven, rechtstreeks van op de bash shell:

$ guestfish --add disk.img \

--mount /dev/vg_guest/lv_root \

--mount /dev/sda1:/boot \

edit /boot/grub/grub.conf

Op welke manier je guestfish ook aanroept, je moet altijd eerst een schijf toevoegen met het add-commando, daarna het run-commando (enkel in de interactieve shell), daarna je partities aankoppelen en uiteindelijk de acties die je wilt uitvoeren.

Voorgaande voorbeelden openen de images in lees/schrijfmodus. Doe je dit op het image van een virtuele machine die op dat moment draait, dan kan er schijfcorruptie optreden. Voor taken waarbij je geen schrijfrechten nodig hebt, gebruik je dus voor de veiligheid best de --ro optie om het image in alleen-lezen-modus te openen. Bijvoorbeeld:

$ guestfish --ro -i disk.img cat /etc/debian_version

Met de optie -i wordt de zogenaamde "virt-inspector" geactiveerd, die alle bestandssystemen die het vindt automatisch aankoppelt (zie verder).

Wrappers

Er zijn ook een aantal afzonderlijke commando's die niet vanuit de guestfish-shell hoeven opgeroepen te worden. Het zijn specifieke wrapppers rond libguestfs-functionaliteit. Zo is er guest-mount om rechtstreeks een bestandssysteem van een virtuele machine aan te koppelen in de gastheer. Zo kun je bijvoorbeeld /dev/sda1 van een disk image read-only aankoppelen op /mnt:

$ guestmount -a disk.img -m /dev/sda1 --ro /mnt

Het programma virt-inspector inspecteert een disk image of virtuele machine en toont de versie van het besturingssysteem, de kernel, drivers, aankoppelpunten van bestandssystemen, geïnstalleerde toepassingen, of de virtuele machine geparavirtualiseerd of hardwaregevirtualiseerd is, enzovoort.

Met virt-list-filesystems krijg je een eenvoudige lijst van bestandssystemen van een virtuele machine of disk image. Met de optie -l krijg je ook het type te zien (bijvoorbeeld Ext3) en met de optie -a toont het commando niet alleen aankoppelbare bestandssystemen maar ook bijvoorbeeld een swap-partitie.

Het commando virt-ls toont bestanden in een specifieke directory van een virtuele machine, net zoals het Unix-commando ls dus. Net zoals bij ls heb je ook opties -l en -R voor details respectievelijk een recursieve werking, maar deze kun je niet combineren.

Met virt-cat toon je snel de inhoud van een bestand in een disk image of virtuele machine met een specifieke naam. Handig om bijvoorbeeld de syslog-boodschappen van de virtuele machine te bekijken:

$ virt-cat mydomain /var/log/messages | tail

Met virt-df zonder argumenten krijg je de vrije ruimte op alle bestandssystemen van alle bij libvirt bekende virtuele machines te zien. Als argument kun je ook één of meerdere disk images geven, die wel tot dezelfde virtuele machine moeten behoren, waarna enkel de vrije ruimte op die disk images getoond wordt.

Het commando virt-edit opent een bestand in een virtuele machine, dat je met de editor in de omgevingsvariabele $EDITOR kunt aanpassen. Bijvoorbeeld:

$ virt-edit fedora11 /boot/grub/grub.conf

Verder heb je ook het handige virt-tar, waarmee je enerzijds bestanden en directory's van een virtuele machine kunt archiveren en naar de gastheer kunt downloaden, en anderzijds een tarball van de gastheer naar een virtuele machine kunt uploaden. Dit is uiteraard handig voor het maken van backups. Op de volgende manier bijvoorbeeld maak je een backup van de home-directory's van de gebruikers in de virtuele machine:

$ virt-tar -zx fedora11 /home home.tar.gz

Dit kan op een live virtuele machine, maar als er ondertussen programma's in de virtuele machine naar /home schrijven kunnen er inconsistenties in de tarball terechtkomen. Het beste doe je dit dus op een virtuele machine die uitgeschakeld is. Je kunt ook een tarball terugzetten naar een virtuele machine, maar dit doe je zeker niet op een live virtuele machine:

$ virt-tar -zu fedora11 home.tar.gz /home

Verder zijn er ook commando's die specifiek voor Windows-gasten zijn, zoals virt-win-reg, hivexml en hivexget.

Handige tools voor in scripts

Op de website van libguestfs staan een aantal guestfish-recepten om specifieke taken uit te voeren. Deze recepten variëren van korte commando's tot heuse shellscripts. Zo is er een script clone.sh waarmee je een virtuele machine kloont en nog enkele instellingen zoals nameserver en hostname aanpast, en het script tar2vm.sh om een virtuele machine te maken uit een tarball van het bestandssysteem. Meer tips vind je nog op de blog van Richard Jones, de maker van libguestfs.

Bron: Techworld