Translation(s) : English - Italiano
QEMU
QEMU è un emulatore di processore veloce che usa traduzioni dinamiche per ottenere una buona velocità di emulazione. È un'alternativa libera e open source di VMware.
Dato che QEMU non ha bisogno di alcuna patch per il kernel host per poter funzionare, è molto sicuro e facile da usare.
Funzionamento
QEMU ha due modalità di funzionamento:
- Completa emulazione del sistema. In questa modalità QEMU emula un sistema completo (per esempio un PC), incluso un processore e varie periferiche. Può essere usato per lanciare diversi sistemi operativi senza riavviare il PC o per fare il debug del codice di sistema.
Emulazione in modalità utente (solo host Linux). In questa modalità QEMU può lanciare processi Linux compilati per una CPU su una CPU diversa. Per esempio, può essere usato per lanciare Wine o per facilitare la cross-compilazione e il cross-debug.
In aggiunta esistono tre opzioni con cui eseguire QEMU:
Pro
Contro
QEMU (puro)
Non richiede un modulo del kernel
Non così veloce come gli altri
QEMU + KQEMU
Più veloce
Richiede il modulo KQEMU
+ diritti di accesso in lettura/scrittura a /dev/kqemu per l'utenteQEMU / kvm
Il più veloce di tutti
Richiede il modulo kvm
+ CPU x86 con estensioni per la virtualizzazione
+ diritti di accesso in lettura/scrittura a /dev/kvm per l'utente
Installazione
L'emulatore QEMU è pacchettizzato come qemu, che può essere installato usando lo strumento di gestione dei pacchetti che si preferisce.
KQEMU (acceleratore QEMU)
KQEMU è un modulo opzionale disponibile per il kernel che velocizza l'esecuzione quando si emula una CPU x86 su una CPU x86 nativa. Al momento della versione 1.3.0pre10, KQEMU è distribuito sotto la licenza GPL (vedere il changelog di KQEMU).
QEMU nella versione 0.12.0 non ha più il supporto per KQEMU.1 Per CPU x86/amd64 più recenti con supporto per la virtualizzazione hardware, usare KVM come acceleratore per QEMU.
Lenny
Per Lenny è pacchettizzato come kqemu-source nella sezione principale e può essere compilato e installato usando Module Assistant.
Installare module-assistant e compilare un pacchetto kqemu-modules-* per il proprio sistema:
# aptitude update && aptitude install module-assistant # m-a a-i kqemu
Aggiungere kqemu a /etc/modules e caricare il modulo:
# echo kqemu >> /etc/modules # modprobe kqemu
Uso
Impostare un sistema stable
Lo sviluppatore Debian Aurelien Jarno mantiene un elenco di immagini QEMU per Debian Stable pronte all'uso all'indirizzo http://people.debian.org/~aurel32/qemu
Impostare un sistema testing/unstable
QEMU è particolarmente utile per impostare un sistema emulato testing/unstable quando si lavora sull'Installatore Debian stesso o sul sistema di avvio, oppure quando si prova una qualche funzionalità sperimentale, senza avere effetto sul sistema per uso produttivo. Un sistema Sid può essere impostato con le azioni seguenti:
Creare l'immagine del disco fisso con:
$ qemu-img create debian.img 2G
o con il formato qcow2 per immagini di dischi, se si desidera usare il formato immagine "Copy On Write" proprio di QEMU:
$ qemu-img create -f qcow2 debian.qcow 2G
Scaricare un'immagine di avvio aggiornata, es. l'immagine per biglietti da visita su http://cdimage.debian.org/cdimage/daily-builds/daily/arch-latest/i386/iso-cd/
Avviare l'immagine con:
$ qemu -hda debian.img -cdrom debian-testing-i386-businesscard.iso -boot d -m 256
- Quando appare la consueta schermata di avvio di Debian, avviare in modalità per "esperti".
- Installare il sistema come di consueto; per impostare un sistema Sid, scegliere "unstable" quando l'Installatore lo chiede.
Una volta terminata l'installazione il sistema può essere avviato con:
$ qemu -hda debian.img -m 256
Fare il backup dell'immagine di disco
L'immagine disco "debian.img" è un file sparso. Dopo aver installato un sistema base Debian, può essere contenuto in un CD-ROM anche senza compressione:
$ tar c --sparse -f backup.tar debian.img
Questo comando crea un file ?tar di circa 320M (supponendo che l'immagine contenga un file system root ext3 di 1.9GB e una partizione di swap di 250MB). Dopo lo spacchettamento con tar -xf, il file sparso viene ripristinato e può essere immediatamente avviato.
Ancora meglio sarebbe convertire un file sparso nell'immagine di tipo "Copy On Write" propria di QEMU. La conversione farà risparmiare la stessa quantità di spazio e sarà comunque eseguibile:
$ qemu-img convert -c debian.img -O qcow debian_recompressed.img
Se l'immagine del sistema ospite è sempre più grande di quanto sia desiderabile, aprire il sistema ospite ed eseguire "dd if=/dev/zero of=/tmp/junk ; sync ; rm /tmp/junk". Questo eliminerà brandelli di file cancellati e la ricompressione dovrebbe a questo punto funzionare.
Funzionamento in rete
Ospiti in una rete interna con NAT
In modo predefinito, QEMU invoca le opzioni -nic e -user per aggiungere un singolo adattatore di rete al sistema ospite e fornisce accesso con NAT ad Internet. L'host e il sistema ospite non si vedranno a vicenda.
Host e sistema ospite sulla stessa rete
Per creare un bridge tra host e sistemi ospite, fare quanto segue (funzionante su Debian Testing nell'agosto 08):
Installare questi pacchetti: bridge-utils e uml-utilities.
modprobe tun o aggiungere "tun" a /etc/modules
Modificare /etc/network/interfaces:
Rimuovere la riga "auto" e cambiare il "metodo" dei propri adattatori di rete cablati fisici in "manual":
#auto eth0 iface eth0 inet manual
Aggiungere una sezione per il bridge:
auto br0 iface br0 inet dhcp pre-up /usr/sbin/tunctl -u <nomeutente> -t tap0 pre-up ifconfig tap0 up bridge_ports all tap0 post-down ifconfig tap0 down post-down tunctl -d tap0
Spiegazione: questa sezione carica automaticamente un bridge e lo configura usando DHCP. Viene creato un device tap di proprietà di <nomeutente> e viene abilitato. Nella riga "bridge_ports", "all" aggiunge tutte le interfacce al bridge; le interfacce virtuali devono essere elencate esplicitamente. Vedere bridge-utils-interfaces(5); notare che la pagina man sconsiglia di aggiungere adattatori wireless al bridge (vedere anche Connessioni di rete bridge).
Avviare QEMU:
$ qemu -k en-us -hda imagefile.img -net nic -net tap,ifname=tap0,script=no,downscript=no
-k en-us evita la perdita del controllo della tastiera a causa di un bug presente nell'agosto 08.
ifname=tap0 - il nome del tap qui deve corrispondere con il nome nella sezione bridge descritta in precedenza.
script=no,downscript=no disabilita gli script /etc/qemu-ifup e /etc/qemu-ifdown dato che non sono necessari.
Gli adattatori di rete virtuali ospiti saranno configurati dal file /etc/network/interfaces nel file system ospite. DHCP funzionerà quindi è la cosa più semplice da usare.
Per eseguire ospiti aggiuntivi, duplicare le righe nella sezione bridge per tap1, tap2 a seconda delle necessità e cambiare l'argomento ifname nella riga di comando. Se si eseguono più ospiti dallo stesso file immagini, udev rinomina l'interfaccia per evitare duplicati (es., eth0 => eth1), perciò aggiungere sezioni per interfacce extra nel file interfaces ospite per configurarle.
Uso della rete in QEMU con VDE
VDE (Virtual Distributed Ethernet) fornisce uno switch virtuale che può connettere più macchine virtuali insieme, sia in locale sia in remoto. Con VDE è possibile creare una rete virtuale di macchine QEMU in esecuzione su uno o più computer reali.
Installare vde2 e uml-utilities (per tunctl).
- Aggiungere gli utenti che eseguono le macchine virtuali al gruppo vde2-net.
Aggiungere quanto segue al file /etc/network/interfaces:
auto mytap iface mytap inet static address 10.0.3.1 netmask 255.255.255.0 vde2-switch -t mytap
Se si desidera la configurazione automatica delle interfacce di rete ospite, installare anche un server DHCP comednsmasq. Configurarlo per assegnare indirizzi soltanto all'interfaccia TAP (es. "mytap" nell'esempio precedente). Se si usa dhcpd, assicurarsi che mytap venga aggunta a /etc/default/dhcp3-server e alla direttiva INTERFACES. anm
Riavviare oppure eseguire quanto segue:
# modprobe tun # ifup mytap # /etc/init.d/dnsmasq restart #se usato $ newgrp vde2-net #eseguito come utente che avvia le macchine virtuali Qemu
Da ultimo, avviare la macchina virtuale:
$ qemu -net nic -net vde,sock=/var/run/vde2/mytap.ctl debianimage.img
Se si esegue più di una macchina virtuale, è necessario fornire un indirizzo MAC univoco:
$ qemu -net nic,macaddr=52:54:00:12:01:00 -net vde,sock=/var/run/vde2/mytap.ctl debianimage.img
(In precedenza, era necessario vdeqemu per eseguire qemu con VDE, ma le versioni recenti di qemu hanno vde già abilitato.) Se si copia un indirizzo MAC da un'interfaccia esistente renderlo unico alterando una qualsiasi delle ultime 6 cifre. Le prime 6 indicano il produttore della scheda e perciò non vanno inventate. Se si esegue kvm invece di QEMU, il nome di comando è "vdekvm".Le macchine virtuali QEMU in rete con VDE non hanno automaticamente il NAT dato che sono nella modalità utente di rete predefinita di QEMU. Per accesso per ospiti a reti esterne si deve abilitare il NAT/Masquerading attraverso iptables. Questo compito può essere reso più semplice da un programma per creare regole per iptables come shorewall. Si può anche usare lo script NAT/Masquerade da TLDP.
Ulteriori informazioni su VDE:
Altro
Montare immagini QEMU
Non montare mai un'immagine QEMU mentre QEMU la sta usando o è molto probabile che si corromperanno i file system in essa.
grezze
Linux e altri host simil-Unix possono montare immagini create con il tipo di formato grezzo usando un device loopback. Da un login come root (o usando sudo), montare un loopback con un offset di 32,256:
# mount -o loop,offset=32256 /percorso/dell/immaginee.img /mnt/puntodimount
Per esmpio, per copiare alcuni file su un'immagine di disco fisso FreeDOS:
# mkdir -p /mnt/freedos # mount -o loopback,offset=32256 freedos-c.img /mnt/freedos # cp oldgames /mnt/freedos # umount /mnt/freedos
Notare: se si ha un'immagine senza partizioni si deve omettere la parte ,offset=32256. Ciò vale ad esempio se si desidera montare linux-0.2.img (che, al momento della stesura di questo testo, si poteva trovare sul sito web di QEMU).
qcow2
È necessario un kernel 2.6.26 o successivo, perciò Lenny va bene. Caricare il modulo ndb:
# modprobe nbd max_part=8
Se si omette l'attributo max_part, le partizioni non sono supportate ed è possibile accedere al disco, ma non si hanno i nodi di device per nessuna delle partizioni.
Supponendo che il nome file dell'immagine qcow2 sia nomeimmagine.qcow, eseguire:
# kvm-nbd --connect=/dev/nbd0 nomeimmagine.qcow
Ora si può controllare la tabella delle partizioni con:
# fdisk -l /dev/nbd0
e montare, ad esempio, la prima partizione su /mnt con:
# mount /dev/nbd0p1 /mnt
Vedere anche
Strumenti relativi a QEMU:
qemubuilder - crea pacchetti Debian all'interno di QEMU
- frontend per QEMU:
Alternative o strumenti simili:
strumenti per la Virtualizzazione di sistemi
strumenti di Emulazione
Collegamenti esterni
http://www.qemu.org/ - Pagina web di QEMU
http://qemu-buch.de/cgi-bin/moin.cgi/FrequentlyAskedQuestions - FAQ di QEMU
- Altre guide
Networking KVM (applies to QEMU) 05/2008 Notare: il comando 'qemu-system-x86_64' in questa guida per Debian Etch è 'kvm'