Virtualigado en Linukso per KVM
Se oni faras tion , kion oni ĉiam faras; oni akiros tion , kion oni ĉiam akiras.
—Anthony ROBBINS
Enhavotabelo
Enkonduko
Plejmulto da ni konas la tutvirtualigadajn solvojn kiel VMware Workstation, Oracle VirtualBox, kaj Parallels. En ĉi tiu afiŝo, mi reenkondukos al oni alian metodon por aferojn fari.
La dolarsigno ($) uziĝos por indiki la ŝelan inviton de normuzanto, dum la kradsigno (#) uziĝos por indiki la ŝelan inviton de la ĉefuzanto. Estas fojoj kiam la EUID de komando estos nulo (0) pro la uzado de sudo.
Agordaĵo
Aparataro
Unu el la plej unuaj aferoj kiujn oni devas fari estas ŝalti la [aparataro-asistitan virtualigadon](https://en.wikipedia.org/wiki/Hardware-assisted_virtualization), ankaŭ nomiĝas plirapigita virtualigado, ĉe la aparataro. Se la ĉefprocezilo estis kreita antaŭ 2006, plej verŝajne, ĉi tiu kapablo ne ĉeestas en la ico. Ankaŭ, memoru, ke ĉi tiu paŝo ne estas devigita por uzi iujn ajn kapablojn en ĉi tiu afiŝo, tamen ĝi atentindeplirapidigos la aferojn.
Por ŝalti plirapigitan virtualigadon, iru al la BIOS/UEFI-agordoj, kaj trovu la tenilon por ĉi tiun kapablon. La nomo de ĉi tiu kapablo malsamas inter fabrikanto al fabrikanto. Konservu la agordon, tiam la sistemon reŝargu. Tiam, oni nun povas verigi la kapablon komandlinie.
$ egrep '(vmx|svm)' /proc/cpuinfo
Se ĝi revenigas kelkajn tekstojn, oni pretas.
Programaro
Sekve, oni devas instali la havendajn apojn:
Nix:
$ nix-env -i qemu vde2 spice_gtk
APT:
$ sudo apt-get install -y qemu-kvm vde2 spice-client-gtk
Ĉi tiu instalas la QEMU-hiperregilon, la VDE-ilojn, kaj SPICE-subtenon. QEMU, almenaŭ dum siaj fruaj tagoj ne estis impresa—ĝi estis bona, sed ne bonegas. Ekde versio 0.10.1, QEMU komencis subteni KVM-kapablojn—virtualigada subsistemo por linukso—kiu preskaŭ disponigas denaskan virtualigadon per aparataro-asistita virtualigado. Ĝi eĉ konkurigas la ekonomiojn de la aliaj virtualigadaj sistemoj menciitaj ĉi-supre.
Aliaj aplikaĵaroj ofertas la opcion de konekti al la gasta maŝina ekrano per VNC . Bedaŭrinde, ĝi malrapidas kaj malviglas. La respondtempo teruras. Uzi la SPICE-protokolon, ne nur plirapidigas la aferojn, ĝi ankaŭ ebligas aliajn aferojn. Memoru, ke SPICE ne estas anstataŭaĵo por VNC, anstataŭe, ĝi estas alia maniero por renkonti la celojn.
Agordo
Bildoj
QEMU subtenas tabelon de bildaj tipoj, tamen la QCOW2-formato estas la plej fleksebla, kaj kapable riĉas, por la uzado de QEMU.
Oni havas se ekzistantan VirtualBox-dosieron (VDI), oni povas konverti ĝin al QCOW2 per:
$ qemu-img convert -f vdi -O qcow2 vm.vdi vm.qcow2
Tamen, se oni ne jam havas bildon, oni povas krei ĝin per:
$ qemu-img create -f qcow2 vm.qcow2 20G
La lasta paŝo kreas 20GiB-bildon, kiu nomiĝas vm.qcow2
. Memoru, ke la dosiersufikso ne fakte gravas—oni povas nomigi la bildon kiel index.html
, tamen tio ne estus sencema, ĉu ne? 😄
KVM-grupo
La komandoj ĉi-sube postulas, ke grupo nomiĝas kvm
devas ekzisti kaj oni estas ano de tiu grupo. Por efektivigi tion, rulu la jenajn komandojn:
$ sudo groupadd kvm
$ sudo usermod -G $(groups | sed 's/ /,/g'),kvm $USER
$ newgrp kvm
La lasta komando varbas onin al la grupo KVM
grupo senelsalutante el la seanco.
Retkonektado
QEMU subtenas multajn manierojn por agordi retkonektadon por siaj gastoj, tamen por ĉi tiu afiŝo ni uzos nur VDE.
Oni devas ruli kelkajn komandojn por pretigi la retan medion. Ideale, oni volas konservi la komandojn en ŝela funkcio aŭ skripto:
$ sudo vde_switch -tap tap0 -mod 660 -group kvm -daemon
$ sudo ip addr add 10.0.2.1/24 dev tap0
$ sudo ip link set dev tap0 up
$ sudo sysctl -w net.ipv4.ip_forward=1
$ sudo iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -j MASQUERADE
La ĉi-supraj komandoj:
- Kreos la VDE-aparaton kreos;
- Agordos la TCP/IP-opciojn por tiu aparato;
- Ŝaltos la VDE-aparaton;
- Ŝaltos La paketan plusendadon en la gastiga sistemo; kaj
- Agordos la enkursigan agordon.
Rulo
La bildon ŝargi
Oni nun devas alvoki la komandon qemu-kvm
—la komando kiu lanĉas ĉion. La nomo de la komando eble malsamas kun tiu, kiu instaliĝas ĉe la sistemo.
Se oni instalas operaciumon el praŝargebla bildo—kutime la ISO-dosiero—rulu la jenajn komandojn:
$ sudo qemu-kvm -cpu host -m 2G -net nic,model=virtio \
-net vde -soundhw all -vga qxl \
-spice port=9999,addr=127.0.0.1,password=sekretŝlosilo \
-boot once=d -cdrom installer.iso \
vm.qcow2
Por sekvaj uzadoj:
$ sudo qemu-kvm -cpu host -m 2G -net nic,model=virtio \
-net vde -soundhw all -vga qxl \
-spice port=9999,addr=127.0.0.1,password=sekretŝlosilo \
vm.qcow2
Ni malkomponu tiun:
-cpu host
Uzu la KVM-procezilon, per ĉiom da subtenitaj kapabloj.
-m 2G
Asignu 2GiB de gastiga maŝino por la gasto. Adaptu, kiel necese.
-net nic,model=virtio -net vde
Kreu virtualan NIC-adaptilo, kaj ŝaltu VDE-retkonektadon.
-soundhw all
Ŝaltu ĉiomajn aŭdiajn pelilojn.
-vga qxl
Precizigu la videan adaptilon por imiti. Uzu QXL kiam uzi SPICE.
-spice addr=127.0.0.1,port=9999,password=sekretŝlosilo
Precizigu la opciojn por SPICE, apartigitaj per komoj. addr kaj port estas la IP-adreso kaj TCP-pordo kiujn SPICE aŭskultos. Ideale, aliro al tiu pordo devas esti ĝuste agordita, kaj sekurigita. password etas la ŝlosilo, kiu estis uzota de la SPICE-kliento, spicy, por konekti al la gasta ekrano poste.
-boot once=d -cdrom instalilo.iso
Praŝargu komence el instalilo.iso
, tiam por sekvontaj praŝargoj, praŝargu per la kutima ordo.
Kurante la qemu-kvm-komandon ĉi-supre, ŝargiĝos la bildon, tamen oni ne ankoraŭ povas vidi la ekranon.
Konekti al la SPICE-ekrano
Por ke oni povu uzi la gastan ekranon, oni devas konekti al la SPICE-servilo, per la SPICE-kliento:
$ spicy -h 127.0.0.1 -p 9999 -w sekretŝlosilo
Memoru, ke fermi la spicy-fenestron ne mortigos la QEMU-seancon. Se la gasta operaciumo kaptas la musenigon, premu Shift+F12 por eskapi.
La gastan reton agordi
Sekve, oni devas ĝuste agordi la retan agordon de la gasta operaciumo, por ke ĝi povu konekti al la lokreto, kaj la interreto se la gastiga maŝino havas aliron al ĝi.
IP-adreso:
10.0.2.2
Implicita kluzo:
10.0.2.1
DNS-serviloj:
8.8.8.8
8.8.4.4
La kurtenojn ferm
La retkonektadon restaŭri
Se oni volas specife restaŭri la retkonektadon, rulu la jenajn komandojn:
$ sudo iptables -t nat -D POSTROUTING -s 10.0.2.0/24 \
-j MASQUERADE
$ sudo sysctl -w net.ipv4.ip_forward=0
$ sudo ip link set dev tap0 down
$ sudo ip link delete tap0
$ sudo pkill -9 vde_switch
$ sudo rm -f /run/vde.ctl/ctl
La ĉi-supraj komandoj:
- Restaŭros la enkursigan agordon;
- Malŝaltos la paketan plusendadon;
- Malŝaltos La VDE-aparaton;
- Forviŝos la VDE-aparaton;
- Mortigos la VDE-procezon; kaj
- Forviŝos la regajn dosierojn.
Ĉion kolekti
Jen ĉiom da komandoj de supre, kompiligitaj kiel funkcioj, por ke oni povu ruli ilin ĉe la komandlinio facile:
function kvm-net () {
case $1 in
up)
sudo vde_switch -tap tap0 -mod 660 -group kvm -daemon
sudo ip addr add 10.0.2.1/24 dev tap0
sudo ip link set dev tap0 up
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -j MASQUERADE
;;
down)
sudo iptables -t nat -D POSTROUTING -s 10.0.2.0/24 -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=0
sudo ip link set dev tap0 down
sudo ip link delete tap0
sudo pkill -9 vde_switch
sudo rm -f /run/vde.ctl/ctl
;;
esac
}
function kvm-boot () {
sudo qemu-kvm -cpu host -m 2G -net nic,model=virtio -net vde \
-soundhw all -vga qxl \
-spice port=9999,addr=127.0.0.1,disable-ticketing \
$@
}
function kvm-iso () {
kvm-boot -boot once=d -cdrom $1 ${argv[2,-1]}
}
function kvm-display () {
spicy -p 9999 -h 127.0.0.1 -w sekretŝlosilo
}
Mi gvidos onin:
Komence, agordu la retkonektadon:
$ kvm-net up
Tiam, ŝargu la bildon:
$ kvm-boot vm.qcow2
Fine, konektu al la ekrano:
$ kvm-display
Kiam oni finiĝas pri la virtuala maŝino, fermu la spice-ekranon, tiam malŝaltu la KVM-retkonektadon.
$ kvm-net down
Finrimarkoj
QEMU subtenas miriadojn da mojosaj opcioj kiujn ni ne eĉ diskutis ĉi tie, inkluzive statojn konservi kaj ŝargi, ekranaj kaj aŭdiaj kaptoj, kaj plu. Por lerni pli pri ili, alklaku [ĉi tiun](http://wiki.qemu-project.org/Main_Page).
QEMU kun KVM estas potencaj, rapidaj, kaj flekseblaj solvoj por fari tutvirtualigadon. Almenaŭ en mia kazo, ĝi superas la plej konatajn opciojn en la bazaro. Se oni volas kontribui al ĉi tiu projekto, iru al ĝia GitHub-paĝo.
Mi esperas, ke ĉi tiu afiŝo helpis onin , iel aŭ aliel, lerni pli pri QEMU kaj KVM kaj kiujn ili povas doni.