Virtualizácia
Dominik Rehák, xrehak2@fi.muni.cz
Obsah
Základné pojmy
- virtualizácia (obecne) - proces nahradenia fyzického prostriedku softwarovou vrstvou
- virtualizácia platformy - vytváranie a správa virtuálnych OS pod iným OS
- emulácia/simulácia - virtualizácia celého HW
- natívna/plná virtualizácia - virtualizácia dostatočného množstva HW pre beh OS určeného pre rovnakú architektúru
- paravirtualizácia - virtualizácia pomocou špeciálneho API medzi hostiteľom a virtuálnym strojom
- virtualizácia na úrovni OS - zdieľanie hostiteľského OS s obmedzenými právomocami
- hostiteľ (host machine) - (spravidla) fyzický stroj/systém poskytujúci virtualizáciu
- hypervisor - software bežiaci pod hostiteľom, vytvárajúci a spravujúci virtuálny stroj
Prečo virtualizovať?
- prostredie pre izolovaný beh aplikácií
- väčšie využitie hardwaru
- jednoduchší pohľad na hardware
- znovupoužiteľné obrazy OS pre rýchle nasadenie
- "snapshoty", verzie stavu OS - jednoduché zálohy
- možnosť vyskúšať si beh iného OS
Krátka história
- 1967 - IBM vydáva CP-40, sálový počítač s plnou virtualizáciou pre účely zdieľania času
- 1970 - IBM vydáva VM/370, prvý operačný systém z rodiny VM/CMS - využívané dodnes
- 1979 - chroot (Version 7 Unix)
- 1985 - procesor Intel 80386 (i386) s hardwarovou virtualizáciou procesoru Intel 8086
- 1994 - Java 1.0, kompilovaná do medzikódu, ktorý je interpretovaný virtuálnym strojom JVM
- 1998 - VMWare si podáva patenty a začína svoju líniu produktov
- 2000 - FreeBSD 4.0 s prvou implementáciou FreeBSD jail
- 2003 - Xen, prvý open-source hypervisor pre x86
- 2003 - Microsoft investuje do virtualizácie a vydáva Microsoft Virtual PC,
- 2005-06 - AMD-V a Intel VT-x, rozšírenia architektúry x86 umožňujúce plnú virtualizáciu
- 2006 - KVM, modul pre virtualizáciu Linuxovým kernelom
- 2007 - KVM pridaný do Linuxového kernelu (2.6.20)
- 2007 - Innotek vydáva prvú verziu VirtualBoxu
- 2008 - VirtualBox vydaný ako open-source
- 2008 - VMware Workstation 6.5 Beta, prvý program schopný vrtualizácie grafického urýchľovania (DirectX 9, Windows XP)
- 2013 - Docker
- 2015 - Kubernetes
Prehľad typov virtualizácie platformy
Emulácia
- takmer plnohodnotná simulácia hardwaru počítača
- virtuálny procesor, spravidla preklad inštrukčnej sady
- schopnosť uložiť kompletný stav systému vrátane pamäti RAM
- (+) nezávislosť na architektúre, na hostiteľovi
- (+) ukladanie stavu systému (obzvlášť pre vývojárov OS)
- (–) nízky výkon
Príklady
- QEMU - multiplatformový open-source emulátor so širokou podporou architektúr
Plná virtualizácia
- simulácia počítača s rovnakou architektúrou a podobným hardwarom ako hostiteľ
- simulované len časti hardwaru potrebné na oddelený beh od hostiteľa
- niektoré inštrukcie možno vykonať priamo (napr. aritmetiku)
- (–) pomalé I/O
Príklady
- KVM - modul v Linuxovom jadre
- XEN 3
- VMWare
Paravirtualizácia
- virtualizácia so špeciálnym rozhraním medzi hostiteľom a virtuálnymi strojmi
- (+) pomerne vysoký výkon
- (–) potrebné úpravy virtualizovaného systému
Príklady
- VM/CMS - rodina sálových počítačov IBM s vlastnou architektúrou a operačným systémom
- na komunikáciu medzi hostiteľom a virtuálnymi strojmi existuje špeciálna inštrukcia DIAG
- Linux - rozšírenia pre virtuálny systém od jadra 2.6.23
Virtualizácia na úrovni OS
- zdieľané prostredie OS s hostiteľom - rovnaké jadro, totožné systémové volania a rozhrania...
- obvykle vlastné adresáre, vlastní uživatelia, vlastný pohľad na sieť
- (+) vysoký výkon, malé nároky na priestor
- (–) previazanosť so systémom, obzvlášť s jadrom
Príklady
- chroot(2) - zmení koreňový adresár procesu, nie je veľmi bezpečný
- jail(2) - exkluzívny pre FreeBSD - virtualizuje prístup k súborovému systému, uživateľom a sieti
- jail(8) - argumenty: prístupný podstrom priečinkov, hostname, IP adresa, príkaz
- Docker - izolované prostredie, ľahké nasadenie a škálovanie, poskytuje repozitár obrazov aplikácií
Formáty virtuálnych diskov
- RAW - 1:1 obraz disku, využívaný napríklad pri read-only inštalačných CD
- QCOW - vyvinutý pre QEMU, reálne zaberá len toľko miesta, koľko je zapísaného; podpora delta snapshotov
- VDI - vyvinutý pre VirtualBox, podobný ako QCOW2
- VMDK - vyvinutý pre VMWare, rôzne podformáty
- VHD - vyvinutý pre Windows, rôzne podformáty
V praxi - KVM/libvirt
libvirt je správca virtuálnych strojov, ktorý uľahčuje prácu s hypervisormi jednotnou sadou príkazov a jednotným štýlom konfigurácie. Budeme pomocou neho virtualizovať Arch Linux pod Arch Linuxom, ale postup by mal byť analogický pre iné distribúcie.
Stiahneme si libvirt a iné balíky, ktoré nie sú priamo závislosťami, ale sú potrebné pre vytvorenie diskov a chod siete. Spustíme libvirt ako permanentnú službu.
$ sudo pacman -S libvirt qemu ebtables iptables dnsmasq
$ sudo systemctl enable --now libvirt
Vytvoríme QCOW2 obraz systémového disku s veľkosťou 10GB. Všimnime si, že obraz je spočiatku oveľa menší a 10GB je len jeho limit.
$ sudo qemu-img create -f qcow2 -o size=10G /var/lib/libvirt/images/arch.qcow2
Formatting '/var/lib/libvirt/images/arch.qcow2', fmt=qcow2 cluster_size=65536 compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16
$ ls -l /var/lib/libvirt/images/arch.qcow2
-rw-r--r-- 1 root root 196768 Oct 19 07:07 /var/lib/libvirt/images/arch.qcow2
Spustíme inštaláciu. Ale pozor! Arch po nabootovaní inštalačného média prepne zo sériovej konzoly na framebuffer, čo by znemožnilo inštaláciu v textovom móde. Preto pri nabehnutí inštalačného menu musíme zamedziť autobootu a podstrčiť kernelu o možnosť viac.
$ sudo virt-install --virt-type kvm --name arch --ram 1024 --disk /var/lib/libvirt/images/arch.qcow2,format=qcow2 --network network=default --console pty,target_type=serial --graphics none --os-type=linux --os-variant=archlinux --cdrom=/home/rehy/isos/archlinux-2020.10.01-x86_64.iso
Trik s bootom je nasledovný:
- akonáhle sa zjaví autoboot, stlačíme Tab
- do riadku s možnosťami pripíšeme
console=ttyS0
- stlačíme Enter
Nasledovná obrazovka by sa mala zjaviť približne na pol minúty (závisí od rýchlosti virtualizácie), nasledovaná štartovným výstupom systemd. Ak pretrváva dlhšie ako dve minúty, niekde sa stala chyba.
Loading boot/x86_64/vmlinuz-linux... ok
Loading boot/intel-ucode.img...ok
Loading boot/amd-ucode.img...ok
Loading boot/x86_64/initramfs-linux.img...ok
Pri výzve sa prihlásime ako root a pokračujeme v inštalácii podľa výziev.
Literatúra