Virtualizzazione tramite KVM
Considerazioni teoriche generali
Il programma offre una IGU per la gestione di macchine virtuali attraverso la libreria libvirt. Permette la creazione di dischi virtuali tramite l'utilizzo di uno dei seguenti formati: raw, qcow, qcow2, cow, qed, vmdk e vpc. Potete gestire l'hardware virtuale, incluso la RAM e le CPU.
Potete controllare le macchine sia locali che remote in modalità grafica oppure testuale, salvare e ripristinare lo stato del SO, così come mettere in pausa o riavviare, tutto tramite la comoda interfaccia grafica. Potete inoltre monitorare il carico della CPU, l'uso della memoria e dell' I/O della rete. È possibile infine aggiungere diverse tipologie di hardware alla macchina virtuale (inclusi dispositivi USB e dischi).
Il programma responsabile delle operazioni di fondo di virt-manager utilizza libvirt per la gestione di macchine virtuali Xen, QEMU & KVM.
L'interfaccia grafica è stata testata principalmente con Xen e QEMU, ma venne originariamente progettata affinché fosse portabile verso un qualunque backend di virtualizzazione supportato da libvirt.
Installazione e impostazioni essenziali
Nota introduttiva
Noi raccomandiamo di revisionare in dettaglio le impostazioni prima di incominciare con la creazione e la gestione di macchine virtuali. Di default l'area di immagazzinamento non è situata in
/home e per questo motivo vi potrebbe essere una carenza di spazio sul disco duro, a seconda della configurazione da voi scelta.
1. Assicuratevi che il vostro hardware supporti la virtualizzazione.
Eseguite il seguente comando in un terminale:
grep -E 'svm|vmx' /proc/cpuinfo
Se non ricevete alcun output controllate le impostazioni del BIOS e vedete se vi è la funzione per attivare la virtualizzazione.
Se l'opzione suddetta è assente dal vostro BIOS molto probabilmente il processore del vostro computer non supporta la virtualizzazione.
2. Installate i necessari pacchetti.
sudo apt-get install libvirt-bin qemu-kvm bridge-utils virt-viewer virt-manager
3. demone libvirt.
Una volta completata l'installazione dei pacchetti avviate il demone libvirt. Anche se dovrebbe partire in automatico, assicuratevi comunque di eseguire il seguente comando:
sudo /etc/init.d/libvirt-bin restart
Nota: status/stop/start/restart sono le opzioni del comando.
Aggiungete l'attuale utente al gruppo "libvirtd".
sudo adduser $UTENTE libvirtd
4. Collegate l'interfaccia di rete.
Aprite il file "/etc/network/interfaces" con un editore di testo e apportate le dovute modifiche, aiutandovi con il file che vi diamo qui sotto come esempio.
Esempio da seguire per reti a ip statico
############################################################################## auto lo iface lo inet loopback auto eth0 iface eth0 inet manual auto br0 iface br0 inet static address 192.168.1.10 netmask 255.255.255.0 gateway 192.168.1.1 bridge_ports eth0 # bridge_stp off # uncomment this parameters, # bridge_fd 0 # if you face any issues # bridge_maxwait 0 # these 3 parameters are related # to the spanning tree protocol # to prevent looping of data packets # in bridge mode ###############################################################################
Esempio da seguire per le connessioni dhcp
############################################################################### auto lo iface lo inet loopback auto eth0 iface eth0 inet manual auto br0 iface br0 inet dhcp bridge_ports eth0 # bridge_stp off # bridge_fd 0 # bridge_maxwait 0 ###############################################################################
Vedasi per ulteriori dettagli il manuale di bridge utils.
man bridge-utils-interfaces
Riavviate il network con le impostazioni aggiornate:
sudo ifdown br0
Seguito da:
sudo ifup br0
Nota: Non è possibile utilizzare "sudo /etc/init.d/networking restart", la funzione non è supportata da Trisquel 7.0 in poi.
4.1 Controllate le connessioni di rete.
1. Eseguite ifconfig
per vedere se le interfacce di rete sono attivate.
br0 Link encap:Ethernet HWaddr 00:78:12:81:05:a6 inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::225:22ff:fe41:5e6/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3382 errors:0 dropped:0 overruns:0 frame:0 TX packets:3420 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:3187503 (3.1 MB) TX bytes:527993 (527.9 KB) eth0 Link encap:Ethernet HWaddr 00:78:12:81:05:a6 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:9631 errors:0 dropped:0 overruns:0 frame:0 TX packets:9736 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:10185985 (10.1 MB) TX bytes:1163285 (1.1 MB) Interrupt:42 Base address:0x6000
2. Fate un ping al vostro indirizzo gateway:
ping 192.168.1.1
3. Fate un ping a un qualunque indirizzo IP oppure al vostro server DNS.
ping 106.186.17.181
#Questo è un server DNS di Opennic.
4. Fate un ping a "trisquel.info".
Se fino a questo punto non avete riscontrato alcun problema, siete pronti per incominciare con l'installazione della vostra macchina virtuale.
5. Gestore delle macchine virtuali.
Avviate il gestore delle macchine virtuali:
virt-manager
Non vi è alcun bisogno di eseguire il comando in qualità di root o "super user". La pratica di eseguire programmi in qualità di root o super-user (sudo)
è altamente sconsigliata per motivi di sicurezza informatica.
Le seguenti schermate vi aiuteranno nella creazione di una macchina virtuale piuttosto essenziale.
Controllo dell'accesso
Affinché possa accedere al socket di libvirt e gestire le macchine virtuali, l'utente deve far parte del gruppo "libvirt" o essere dotato di privilegi
elevati (superuser). È in alternativa possibile utilizzare l'url di sessione "qemu:///session".
Connessione di un dispositivo usb
Nota: La macchina ospite con la quale volete condividere il dispositivo deve essere spenta durante la configurazione, nel caso si tratti di una macchina virtuale locale.
Recatevi nel menu di info del hardware per il vostro ospite e cliccate su "Aggiungete Hardware". Nella sezione "dispositivo USB host" selezionate il dispositivo.
Infine cliccate su "Terminare". Se l'operazione è stata eseguita correttamente il dispositivo dovrebbe essere riconosciuto e montabile una volta avviato l'ospite.
Attivazione della clipboard bidirezionale (host<->guest)
Nota introduttiva
Per poter supportare la clipboard bidirezionale, la macchina ospite deve avere installato il pacchetto spice-vdagent, pacchetto che non è però contenuto in tutte le distribuzioni di GNU/linuz. Controllate il repositorio di software, e in mancanza del pacchetto, compilate il codice sorgente.
Invece di VNC, verrà usato il protocollo SPICE così come la grafica QLX. Non avviate alcuna macchina virtuale fino a quando non sia giunto il tempo di installare
pacchetti nella macchina ospite. Precisiamo da subito che la modalità video predefinita è Cirrus.
I pacchetti necessari al ospite
Per permettere la visione di ospiti SPICE è necessario installare i seguenti pacchetti.
sudo apt-get install python-spice-client-gtk
Chiudete e riavviate virt-manager per caricare il modulo; un riavvio completo del pc potrebbe essere necessario nel caso in cui vediate un messaggio di errore al momento della visione dell'ospite.
Configurazione dell'hardware della macchina virtuale
Aprite il menu con i dettagli hardware per l'ospite che state tentando di configurare. Nella sezione video scegliete "QXL". Nella sezione dello schermo scegliete "SPICE". Applicate le modifiche. Una volta letto l'avviso accettate di installare i canali SPICE sul sistema operativo ospite.
Configurazione del SO ospite
Attivate il sistema operativo ospite e verificate di poter aprire il programma di visualizzazione. Altrimenti riavviate il computer.
Installate il pacchetto spice-vdagent e controllate l'output per accertarvi che il servizio sia avviato (se state eseguendo l'interfaccia grafica SPICE e QXL il servizio dovrebbe essere attivato automaticamente in Trisquel). Il comando è il seguente:
sudo apt-get install spice-vdagent
Riavviate il sistema operativo ospite.
Una volta riavviato, accertatevi che il servizio sia in esecuzione.
sudo service spice-vdagent status
Se in esecuzione, dovreste ora riuscire a copiare ed incollare bi-direzionalmente.
Attivazione della clipboard multi-direzionale (host<->guest)
Da testare.
Nota: dovrete installare spice-agent per tuti i SO ospiti.
Condivisione dei file
SFTP, FTP e CIFS sono modi molto accessibili per condividere file all'interno di una rete. Per spiegazioni sopra l'aggiunta di un file sistem "pass-through" date un'occhiata alla [http://www.linux-kvm.org/page/9p_virtio documentazione ufficiale del progetto].
Soluzione a problemi noti
CPU Core2Duo
Alcuni modelli di CPU della Intel Core2Duo non supportano la virtualizzazione.
Eseguite il seguente comando.
grep name /proc/cpuinfo
Verificate sul sito del produttore se la virtualizzazione è supportata.
Insufficiente performance grafica
Varia notevolmente secondo la specifica configurazione, l'hardware e il carico di lavoro generale, ma in ogni caso l'uso del protocollo SPICE e grafica QXL
attraverso VNC può migliorare la performance. Vedasi "Attivazione della clipboard multi-direzionale" più in alto.
Vedasi "Caratteri mancanti durante l'uso del protocollo SPICE con QXL" quì sotto.
È inoltre una buona idea disattivare il compositor. Vedasi "Attivazione della clipboard bidirezionale" più in alto (GNOME Flashback).
Caratteri mancanti durante l'uso del protocollo SPICE con QXL
Frequentemente alcune delle lettere in tutte le finestre, panelli e desktop spariranno senza ragione apparente. La risoluzione dello schermo sembra non avere niente a che fare con il problema.
Questa modifica può migliorare la performance grafica.
Abbiamo confermato il problema in Trisquel 7.0 (LXDE and GNOME) e Ubuntu 14.04 usndo SPICE e QXL (spice-vdagent installato nel SO ospite).
Revisionate il file di configurazione di grub:
sudo nano /etc/default/grub
Modificate il valore di "GRUB_CMDLINE_LINUX_DEFAULT=" per includere il parametro "nomodeset" , così come quì sotto:
GRUB_CMDLINE_LINUX_DEFAULT="splash quiet nomodeset"
Infine, aggiornate grub:
sudo update-grub
Dopo un riavvio, il problema sembra essere risolto.
Rimando:
Red Hat Bugzilla (Bug Report)
Ubuntu Forumns (Discussion)
Ubuntu Bugs - Launchpad (Bug Report)
Vi è pure una segnalazione di bug in Ubuntu 15.05 data 29/01/2015.
Risoluzione, ridimensionamento e performance grafica
I seguenti risultati sono stati osservati nei seguenti sistemi: Trisquel 7.0 host (GNOME Flashback), Trisquel 7.0 guest (Mini - LXDE), local guest, bridged networking su eth0, 2500 MB di RAM e 2 CPU sull'ospite, Samsung NP530-U4B.
Cirrus sembra essere limitato a 1280x768 ed è inoltre compatibile solo con VNC.
VGA ha il limite di 1280x768 , ma è più performante rispetto a Cirrus.
QLX è compatibile sia con VNC che con SPICE. Sembra più veloce rispetto ai precedenti. Sembra pure più reattivo in VNC rispetto a SPICE, ma vi è più "screen tearing".
Il puntatore del mouse bianco non ha un bel aspetto quando sospeso sopra le finestre grigie di GNOME Flashback. Non abbiamo trovato un modo per ovviare.
La risoluzione dello schermo raggiunge per lo meno i 1920x1080 pixel in entrambi i protocolli. Non abbiamo testato Xen o VMVGA.
Lista di cose da fare
Testare e ottimizzare il rendimento grafico.
VFIO (HIGH PRIOTRITY)
Questo modulo/strumento/concetto permette di raggiungere fino al 99% dei risultati di benchmark in macchine virtuali rispetto al SO ospite.
Sono richieste due schede grafiche. Il concetto risiede nel lasciar passare una delle due schede grafiche verso il sistema operativo ospite in modo che possa avere diretto controllo sul hardware.
Quì troverete la documentazione (inglese):
Kernel.org Documentation (very complete)
RHEL VFIO PDF
Debian Wiki (seems a bit incomplete)
Arch Forums (160 pages, very dense)
Gaming Example with Nvidia
Blog Post on seting up VFIO
Wikipedia IOMMU Briefing"