mercoledì 14 dicembre 2016

QEMU - Emulatore e gestore di macchine virtuali su Linux

Prima di iniziare ad utilizzare QEMU su Linux facciamo un po di chiarezza sulla differenza tra un emulatore ed una macchina virtuale.

Il primo ha lo scopo di emulare l'hardware di una macchina (che può essere totalmente differente dal sistema emulante, o sistema host) al fine di eseguire il software originariamente scritto per girare sul sistema emulato. Ad esempio, sul nostro PC con processore x86 potremmo emulare una macchina con processore POWER o ARM. Sono molto popolari anche gli emulatori di console e vecchi computer degli anni 80 che ci permettono di giocare ai vecchi classici di un tempo, come ad esempio il MAME (Multiple Arcade Machine Emulator).

Una macchina virtuale invece ci permette di creare una macchina all'interno di un'altra, sulla quale potremmo installare un sistema operativo che rimarrà in un ambiente “protetto” e separato dal sistema ospitante. Una macchina virtuale pura non emula un hardware differente da quello in cui gira, ma si limita a replicarlo.

Ci sono diversi software di virtualizzazione piuttosto conosciuti quali VirtualBox (ora di Oracle) e soluzioni commerciali quali WMware Workstation Player o Pro.

Preferendo utilizzare un software libero ed open source abbiamo QEMU che ci permette sia di emulare un hardware differente da quello host, sia di creare una macchina virtuale sulla quale poter installare un secondo sistema operativo.
Un grande vantaggio di QEMU è la possibilità di utilizzare KVM (Kernel Virtual Machine), che è un modulo del kernel Linux, per permette di ottenere prestazioni migliori grazie allo sfruttamento delle funzioni di virtualizzazione hardware offerte dai processori che li supportano.

In questa breve guida introduttiva utilizzerò un sistema basato su processore x86 64 bit con sistema operativo Debian GNU/Linux 8.6.

Iniziamo con l'installazione del software:

$ su
Per iniziare una sessione come utente amministratore root, vi verrà richiesta la password di root.

# apt update
# apt upgrade
Per aggiornare il sistema.

# apt install qemu
Installerà tutti i pacchetti necessari per l'utilizzo di QEMU.

# exit
Per tornare a lavorare con il vostro id utente e non più come root.

Prima cosa da fare è creare un'immagine disco virtuale che verrà utilizzata da QEMU come fosse un hard disk, a questo scopo utilizziamo il comando qemu-img.

$ qemu-img create virtualhd.img 20G
Questo comando crea un file di immagine disco chiamato virtualhd.img della grandezza di 20 Gb.
Per ottenere ulteriori informazioni sulla sintassi di qemu-img potete invocare l'aiuto veloce con il seguente comando:
$ qemu-img –help

A questo punto abbiamo un'immagine disco vuota dove poter installare il nostro sistema operativo, ora andremo ad utilizzare un file .iso del primo CD di installazione di Debian per sperimentare il funzionamento di QEMU. Se preferite potete ovviamente utilizzare un sistema operativo differente.
In questo caso non voglio emulare una macchina diversa da quella ospitante, quindi utilizzerò il comando dedicato ai sistemi x86 64 bit.

$ qemu-system-x86_64 -cdrom debian-8.6.0-amd64-CD-1.iso -drive file=virtualhd.img -m size=2048 -enable-kvm

qemu-system-x86_64 è il comando che invoca l'utilizzo di una macchina virtuale x86 64 bit.
-cdrom è l'opzione che indica quali immagine disco è da considerarsi come CD virtuale, in questo caso abbiamo indicato debian-8.6.0-amd64-CD-1.iso come file di immagine.
-drive invece indica il file da considerare come hard disk virtuale, utilizzeremo quello appena creato virtualhd.img.
-m è l'opzione che indica la quantità di memoria da utilizzare sulla nostra macchina virtuale, size=2048 assegna 2 Gb di RAM.
-enable-kvm per finire attiva l'utilizzo del modulo kernel KVM.
Anche con questo comando potete accedere alla guida sulla sintassi e le tante opzioni disponibili con il solito –help.

Non appena avrete eseguito questo comando si aprirà una finestra che visualizzerà lo schermo della macchina virtuale in esecuzione e potrete procedere all'installazione del sistema operativo.
Il sistema ospite sarà eseguito in modo indipendente dal sistema ospitante e qualsiasi operazione su disco sarà in realtà eseguita sul file immagine del disco virtuale, sarete quindi liberi di sperimentare senza rischiare di danneggiare il vostro sistema principale.

Avvio del disco di installazione di Debian 8.6

Avvio della macchina virtuale dopo l'installazione del sistema, menù di GRUB

Debian 8.6 in funzione sulla macchina virtuale