Jiří Meitner | IT služby Linux | Kladno | Česko

An image depicting a Linux geek in a tech-inspired room. The geek is sitting at a desk with a wide monitor, showing Ubuntu Linux with a GNOME desktop

Pohodlná virtualizace na domácím linuxovém počítači

Každý nadšenec do IT technologií se jistě setkal s virtualizací. Pomocí virtualizace můžeme testovat programy a oddělit je od zbytku systému. Můžeme mít zcela odlišný operační systém ve virtuálním počítači, než máme na fyzickém železe. Virtuální počítač spustíme jako jakoukoliv jinou aplikaci. Potřebujeme se připojovat do práce přes VPN? Nebudeme si VPN klienty znečišťovat náš počítač, použijeme virtuální. Chceme pomoci vědě a najít lék proti Covidu, AIDS nebo rakovině, nebo pomoci třeba hledat nové planety prostřednictvím distribuovaných výpočtů? Rovněž nepoužijeme svůj počítač, ale použijeme virtuální, kde mu nastavíme zdroje, které může používat (počet jader, velikost disku, velikost RAM) a spouštět ho budeme když se nám to bude hodit.

Oblíbené technologie pro virtualizaci v korporátní sféře jsou VMware ESX, Microsoft Hyper-V a OpenStack. VMware a OpenStack mají trošku odlišnou filosofii použití. Zatímco VMware se hodí pro klasické virtuální servery, filosofií OpenStacku je spíše vzájemná zastupitelnost jednotlivých serverů (výpočetních nodů) a škálovatelnost. Servery na OpenStacku bývají zpravidla spojovány do clusterů. Microsoft Hyper-V se častěji používá spíše pro nějaké to méně kritické nasazení, jako například v různých labech… Microsoft Hyper-V můžete s Windows 10 Pro rozjet zadarmo legálně i doma. Ale my se budeme nyní věnovat Linuxu.

Pokud chcete virtualizovat na linuxovém desktopu, dobrou službu dělá Virtualbox nebo prý VMware Workstation (VMware Workstation jsem nikdy nepoužíval). Ale je tady něco, s čím už dlouhodobě spokojeně pracuju, čím jsem doma Virtualbox před lety nahradil a s čím jsem nadmíru spokojený a nebudu chtít zpět. Jsou to Boxy.

Pozor: pokud nechcete virtualizovat celý desktop, ale jen operační systém pro command line aplikace, tak nečtěte dál. V takovém případě doporučím jiný druch virtualizace – docker. Tomu se můžeme věnovat někdy příště. Dnes nám jde o plnohodnotný virtuální počítač s grafickým rozhraním.

Seznámení s Boxy (gnome-boxes) a Virt-managerem

Boxy je aplikace, kterou ve svém Linuxu snadno nainstalujete. Je postavená nad libvirt, jednoduše se používá. Je součástí repozitářů nejoblíbenějších linuxových distribucí. Například v Ubuntu nainstalujete gnome-boxes takto:

apt install gnome-boxes

Boxy umí virtualizovat nejen Linuxové distribuce, virtualizuji pomocí boxů i Windows nebo zkouším různé jiné Unixové systémy.

Pokud vám některé možnosti nastavení chybí, můžete sáhnout ještě po jiné aplikaci, která dokáže s virtuálními počítači vytočenými přes gnome-boxes pracovat. Tím je Virtual Machine Manager (virt-manager), kde můžete měnit nastavení virtuálních strojů detailněji. Boxes jsou na spouštění a používání virtuálních strojů naprosto ideální. Virtuální stroje je možné klonovat, takže je ideální si vytvořit nějaký základ, který můžeme pak používat dál v jiných konfiguracích.

apt install virt-manager

Boxy jsou ideální volba, pokud se připojujete vzdáleně do práce přes VPN, která vám omezuje internet. Nainstalujete si tam nějaký lehký systém – například lubuntu, pak VPN klienta a můžete pracovat, a v případě potřeby se dostanete i na blokovaný internet, jednoduše tak, že se přepnete zpět do svého nevirtualizovaného operačního systému, který omezením VPN netrpí.

Pár typů z praxe, co se může hodit:

snímky (snapshoty)

Snapshot či snímek je zaznamenání stavu v určitém okamžiku. Vytváření snapshotů přes gnome-boxes není ideální řešení – trvá to nějakou dobu, a někdy nejsou snapsoty použitelné, nedá se na ně 100% spolehnout. Lepší je vytvářet snapshoty v hostitelském systému například přes btrfs – silně doporučuji používat btrfs :-). Automatické snapshoty nastavíte snadno například přes crontab uživatele root. Pokud chcete obnovit stav stroje, stačí vzít soubor z diskem ze snapshotu a nahradit jím aktuální umístění. Pokud by boxes nefungovaly, bude chyba v jiném nastavení, proto je dobré znát cesty, kam se ukládají nejen disky, ale i nastavení virtuálních strojů. Disky zálohované snapshotem zabírají reálně jen takové místo, kterým se liší od předchozího stavu (obdobné jako rozdílová záloha). Snímkování přes btrfs je bleskově rychlé.

find /home/medved/.local/share/gnome-boxes/images/ /home/.backup/*/medved/.local/share/gnome-boxes/images/ -type f -name 'boxes-boinc' -exec du -h {} \;
17G /home/medved/.local/share/gnome-boxes/images/boxes-boinc
14G /home/.backup/2105240123/medved/.local/share/gnome-boxes/images/boxes-boinc
14G /home/.backup/2105241200/medved/.local/share/gnome-boxes/images/boxes-boinc
14G /home/.backup/2105242020/medved/.local/share/gnome-boxes/images/boxes-boinc
17G /home/.backup/2105251200/medved/.local/share/gnome-boxes/images/boxes-boinc
17G /home/.backup/2105261200/medved/.local/share/gnome-boxes/images/boxes-boinc
17G /home/.backup/2105271200/medved/.local/share/gnome-boxes/images/boxes-boinc
17G /home/.backup/2105281200/medved/.local/share/gnome-boxes/images/boxes-boinc
17G /home/.backup/2105282126/medved/.local/share/gnome-boxes/images/boxes-boincCode language: JavaScript (javascript)

Výše si můžete všimnout, že výchozí cesta pro soubor s diskem virtuálního počítače je:

/home/uživatel/.local/share/gnome-boxes/images/

Soubory s disky používám ve formátu qcow2, přesto, že pokud jsou vytvořené přes gnome-boxes, jsou bez koncovky.

Nastavení crontabu:

crontab -e
0 12 * * * /usr/local/bin/btrfs_create_snapshot_home
Code language: JavaScript (javascript)

Samotný zálohovací skript (který mám v umístění /usr/local/bin/btrfs_create_snapshot_home):

#!/bin/bash
DATE="$(date +%y%m%d%H%M)"
btrfs subvolume snapshot /home \
  /home/.backup/${DATE}
touch /home/.backup/${DATE}
btrfs property set -ts /home/.backup/${DATE} ro true
find /home/.backup/ -mindepth 1 -maxdepth 1 -type d -mtime +5 -exec btrfs property set -ts {} ro false \; \
  -exec btrfs subvolume delete {} \;
exitCode language: JavaScript (javascript)

Ve skriptu výše si můžete všimnout, že docela krkolomně vytvářím snapshot pro čtení. Proč jsem ho nevytvořil jako read only rovnou? A proč používám touch? Důvod je prostý. Pokud bych vytvořil rovnou jako read only, nemohl bych mazat starší snapshoty podle mtime. Touch by nefungoval a čas mtime by nesouhlasil s časem zálohy. Takže vytvořím snapshot ve struktuře podle data a času pro čtení a zápis, nastavím čas na snapshotu a následně nastavím snapshot jako read only. Tím jsou soubory ve snapshotu chráněny proti neúmyslnému smazání. U snapshotů starších 5 dní odeberu příznak pouze pro čtení a mažu. Vše funguje zcela automaticky.

Záloha a přenos na jiné PC

Pokud bychom chtěli přenést náš virtuální počítač nebo virtuální počítače na jiný fyzický počítač a používat ho i tam, lze to, ale nestačí přenést jen disk. Je potřeba přenést i soubory ze složek /home/uživatel/.config/libvirt/ a /home/uživatel/.config/libvirt/.

Takto vytvořím zálohu:

#!/bin/bash
user=medved
zaloha=/tmp/gnome-boxes-zaloha.tgz
prompt="Please select a file:"
options=( $(find /home/"$user"/.local/share/gnome-boxes/images -type f -iname "*$1*" -print0 | xargs -0) )

PS3="$prompt "
select opt in "${options[@]}" "Quit" ; do
    if (( REPLY == 1 + ${#options[@]} )) ; then
        exit

    elif (( REPLY > 0 && REPLY <= ${#options[@]} )) ; then
        echo  "You picked $opt which is file $REPLY"
        break

    else
        echo "Invalid option. Try another one."
    fi
done

file="$(realpath "$opt")"
tar czvpf "$zaloha" "$file" /home/"$user"/.config/libvirt/ /home/"$user"/.config/gnome-boxes/
du -h "$zaloha"
exit
Code language: PHP (php)

Následně jí stačí přenést na jiné PC třeba přes rsync a vyextrahovat jí na něm (mustíte tam mít gnome-boxes nainstalované, v této ukázce počítám se stejným jménem uživatele).

cd /; tar xzvpf /tmp/gnome-boxes-zaloha.tgz

V případě, že virtuální počítač nestartuje, ověřte, že uvedené soubory a složky vlastní váš uživatel, a ne třeba root.

Shrink disku (zmenšení):

Například 50 GB disk s operačním systémem nemusí zabírat reálně takové místo, je schopen se dynamicky přizpůsobit potřebám – narůst. Jeho zmenšení po vymazání například nějakých souborů z virtuálního počítače ale není automatické. Můžeme mu pomoci. Já na to používám dva skripty. Jeden soubor v bin uživatele (~/bin/shrink_qcow), a jeden v systémové (/usr/local/bin/shrink_qcow), který je potřeba spustit s právy roota, aby vytvořil před shrinkem snapshot – shrinkovaný disk totiž nemusí naběhnout. Raději neshrinkujte disky s Windows, často to windows nepřežijou.

Pro shrinkování potřebujeme virt-sparsify, je to příkaz, který je k dispozici v balíku libguestfs-tools. Nainstalujeme ho:

apt install libguestfs-tools

~/bin/shrink_qcow:

#!/bin/bash
prompt="Please select a file:"
options=( $(find ~/.local/share/gnome-boxes/images -type f -iname "*$1*" -print0 | xargs -0) )

PS3="$prompt "
select opt in "${options[@]}" "Quit" ; do
    if (( REPLY == 1 + ${#options[@]} )) ; then
        exit

    elif (( REPLY > 0 && REPLY <= ${#options[@]} )) ; then
        echo  "You picked $opt which is file $REPLY"
        break

    else
        echo "Invalid option. Try another one."
    fi
done

file="$(realpath "$opt")"
sudo /usr/local/bin/shrink_qcow "$file"
exit
Code language: PHP (php)

Soubor /usr/local/bin/shrink_qcow:

#!/bin/bash
tmp=/home/tmp
user=medved
cd "$tmp"
file="$(realpath "$1")"
name="$(basename "$file")"
du -h "$file"
/usr/local/bin/btrfs_create_snapshot_home
virt-sparsify "$file" --compress "$file".spars --tmp /home/tmp && mv "$file".spars "$file"
chown "$user":"$user" "$file"
chmod 750 "$file"
find /home/"$user"/.local/share/gnome-boxes/images /home/.backup/*/"$user"/.local/share/gnome-boxes/images/ \
 -xdev -type f -name "$name" -exec du -sxh {} \; |tail
exit
Code language: JavaScript (javascript)

Dále samozřejmě potřebujeme, aby složka, kde necháme skript virt-sparsify pracovat, existovala. Můžeme pro ní vytvořit samostatné btrfs-subvolume. To je užitečné, pokud bychom náhodou snapshotovali /home v době, kdy bude probíhat tady shrinkování – nechceme mít tyto pracovní soubory součástí snapshotu:

btrfs subvolume create /home/tmp

Skriptům dáme spustitelné příznaky přes chmod +x a můžeme shrinkovat:

[23:44] medved@medved-kladno:~ $ shrink_qcow 
1) /home/medved/.local/share/gnome-boxes/images/win10
2) /home/medved/.local/share/gnome-boxes/images/boxes-boinc
3) /home/medved/.local/share/gnome-boxes/images/boxes-centos-stream-template
4) /home/medved/.local/share/gnome-boxes/images/flash.qcow2
5) /home/medved/.local/share/gnome-boxes/images/openindiana.qcow2
6) /home/medved/.local/share/gnome-boxes/images/boxes-prace
7) Quit
Please select a file: 2
You picked /home/medved/.local/share/gnome-boxes/images/boxes-boinc which is file 2
[sudo] heslo pro medved: 
17G	/home/medved/.local/share/gnome-boxes/images/boxes-boinc
Create a snapshot of '/home' in '/home/.backup/2105282344'
[   0.0] Create overlay file in /home/tmp to protect source disk
[   0.0] Examine source disk
[   2.8] Fill free space in /dev/sda1 with zero
 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ --:--
[  11.8] Fill free space in btrfsvol:/dev/sda1/@home with zero
 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ --:--
[  19.4] Copy to destination and make sparse
[ 461.5] Sparsify operation completed with no errors.
virt-sparsify: Before deleting the old disk, carefully check that the 
target disk boots and works correctly.
14G	/home/.backup/2105240123/medved/.local/share/gnome-boxes/images/boxes-boinc
14G	/home/.backup/2105241200/medved/.local/share/gnome-boxes/images/boxes-boinc
14G	/home/.backup/2105242020/medved/.local/share/gnome-boxes/images/boxes-boinc
17G	/home/.backup/2105251200/medved/.local/share/gnome-boxes/images/boxes-boinc
17G	/home/.backup/2105261200/medved/.local/share/gnome-boxes/images/boxes-boinc
17G	/home/.backup/2105271200/medved/.local/share/gnome-boxes/images/boxes-boinc
17G	/home/.backup/2105281200/medved/.local/share/gnome-boxes/images/boxes-boinc
17G	/home/.backup/2105282126/medved/.local/share/gnome-boxes/images/boxes-boinc
17G	/home/.backup/2105282344/medved/.local/share/gnome-boxes/images/boxes-boinc
5,1G	/home/medved/.local/share/gnome-boxes/images/boxes-boinc
Code language: JavaScript (javascript)

Podařilo se nám zmenšit disk boxes-boinc ze 17GB na 5.1GB. Krásný výsledek. Shrinkovaný soubor se také snadněji synchronizuje přes síť. Tento soubor může v případě potřeby narůst až na 20 GB, při vytváření stroje přes gnome-boxes můžete totiž zvolit maximální velikost disku.

Přejmenování stroje v boxech:

Neupravujte přímo xml soubory s nastavením v textovém editoru, ale editujte soubor xml přes gnome boxes, samozřejmě u stroje, který je vypnutý. Přejmenovat stroj jde snadno, ale hůře se hledá, jak přejmenovat disk – ty výchozí názvy, obzvlášť, pokud instalujete z iso souboru, nejsou přívětivé. Osobně chci, aby název disku odpovídal názvu stroje, který vidím. Ručně přejmenujete následně disk, upravte název v souboru. A vyzkoušíte. Když to rozbijete, stačí obnovit složky a soubory ze snapshotu. Přejmenovat disk můžete snadno i ve virt-manageru. A nejen to. Narozdíl od boxů, ve virt-manageru můžete specifikovat detailněji hardware, jaký je typ disku, nebo síťové karty, atd.

Co nainstalovat na vytočený virtuální počítač

Základní nástroje, které instaluji, jsou spice-vdagent a spice-webdavd. Bude se lépe s virtuálním strojem pracovat. Pokud instalujeme Windows, tak je ideální po instalaci odkazovaných balíčků následně dokonfigurovat přes virt-manager, že chceme síťovou kartu typu virtio. Grafický adaptér rovněž zvolíme Virtio a zaškrtneme 3D akceleraci.

Příklad pro ubuntu:

apt install spice-webdavd spice-vdagent

Příklad pro windows 10

https://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-latest.exe
https://www.spice-space.org/download/windows/spice-webdavd/spice-webdavd-x64-latest.msiCode language: JavaScript (javascript)

Přidání dalšího disku, nebo sdíleného disku, či různých dalších zařízení

Tak tohle neuděláte přes gnome-boxes. Ale virt-manager je na to šikovný.

Fotogalerie

gnome-boxes
boinc-manager spuštěný ve virtuálním stroji
Virtual Machine Manager (virt-manager)
Detail síťové karty ve virt-manageru
Při vytáčení virtuálního stroje v boxech můžeme vybrat obraz ze seznamu
V případě RHEL se musíme přihlásit, až poté se stáhne, u free distribucí toto není potřeba. Já účet mám, tak vesele stahuji.
Windows 10 šlape
Windows – ovladače pro Virtio síťovou kartu jsou součástí balíčků, které odkazuji. A jsou z dílny Red Hatu.
Summary
software image
Author Rating
1star1star1star1star1star
Aggregate Rating
5 based on 3 votes
Software Name
gnome-boxes
Operating System
linux
Software Category
virtualization
Price
BTC 0
Landing Page

Comments

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..