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:

In aggiunta esistono tre opzioni con cui eseguire QEMU:

Installazione

L'emulatore QEMU è pacchettizzato in pacchetti per tipo di CPU:

$ sudo apt install qemu-utils qemu-system-x86 qemu-system-gui

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 (ma alla data del 2020-07-22, non risulta essere aggiornato dal 2015).

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:

Una volta terminata l'installazione il sistema può essere avviato con:

$ qemu-system-x86_64 -hda debian.img -m 512

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 (provato su Squeeze), tenendo a mente che tutte le modifiche vanno fatte al sistema host:

  1. Installare bridge-utils.

  2. Modificare /etc/network/interfaces:

    1. Rimuovere la riga "auto" e cambiare il "metodo" dei propri adattatori di rete cablati fisici da "auto" in "manual":

      #auto eth0
      iface eth0 inet manual
    2. Aggiungere una sezione per il bridge:

      auto br0
      iface br0 inet dhcp
         pre-up ip tuntap add dev tap0 mode tap user <nome_utente>
         pre-up ip link set tap0 up
         bridge_ports all tap0
         bridge_stp off
         bridge_maxwait 0
         bridge_fd      0
         post-down ip link set tap0 down
         post-down ip tuntap del dev tap0 mode tap

    Spiegazione: questa sezione carica automaticamente un bridge e lo configura usando DHCP. Viene creato un device tap di proprietà di <nomeutente> e viene abilitato; tenere a mente che <nome_utente> è il nome utente sul sistema host. Nella riga "bridge_ports", "all" aggiunge tutte le interfacce al bridge; le interfacce virtuali devono essere elencate esplicitamente. Le altre tre direttive bridge accelerano l'attivazione del bridge. Vedere bridge-utils-interfaces(5); notare che la pagina man sconsiglia di aggiungere adattatori wireless al bridge (vedere anche Connessioni di rete bridge).

  3. Avviare QEMU:

    $ qemu-system-x86_64 -hda imagefile.img -net nic -net tap,ifname=tap0,script=no,downscript=no
    • 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.

  4. 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.

  1. Installare vde2 e uml-utilities (per tunctl).

  2. Aggiungere gli utenti che eseguono le macchine virtuali al gruppo vde2-net.
  3. 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
  4. 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 aggiunta a /etc/default/dhcp3-server e alla direttiva INTERFACES. anm

  5. 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
  6. Da ultimo, avviare la macchina virtuale:

    $ qemu-system-x86_64 -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-system-x86_64 -net nic,macaddr=52:54:00:12:01:00 -net vde,sock=/var/run/vde2/mytap.ctl debianimage.img 

    (In ?it/DebianLennyLenny, 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".

  7. 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 esempio, 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:

Alternative o strumenti simili:

Collegamenti esterni

Informazioni specifiche di Debian

Informazioni originali a monte

Altre informazioni


CategoryEmdebian | CategorySoftware | CategoryVirtualization | CategorySystemAdministration