Tramite virtualizzazione è possibile eseguire uno o più sistemi operativi (ed il relativo software applicativo) da un unico PC, in un ambiente protetto e monitorato che prende il nome di macchina virtuale (VM).
Il sistema operativo in cui viene eseguita la macchina virtuale, viene detto ospitante (host) mentre la macchina virtuale è chiamata ospite (guest). Il codice della macchina virtuale viene eseguito direttamente dal sistema ospitante, ma il sistema ospite "pensa" di essere eseguito su una macchina reale priva di emulazione o virtualizzazione hardware.
Si può ottenere virtualizzazione in vari modi:
- Virtualizzazione completa (o nativa). In questo caso un ipervisore (hypervisor) implementa l'isolamento necessario a separare il sistema ospite dall'hardware fisico della macchina. In molti contesti si parla di virtualizzazione software. VirtualBox supporta questa forma di virtualizzazione.
- Paravirtualizzazione. Nella paravirtualizzazione, il programma di controllo fornisce un'API (interfaccia di programmazione applicativa) per l'ipervisore, che viene utilizzata dal sistema ospite per interagire con l'hardware. KVM è un esempio di tale tipologia di virtualizzazione.
- Emulazione. In questo caso l'hardware viene completamente emulato dal programma di controllo. Il processo di emulazione risulta più lento rispetto alle due forme di virtualizzazione precedenti, a causa della traduzione delle istruzioni dal formato del sistema ospite a quello del sistema ospitante.
Qemu.
QEMU è un emulatore di processore. Emula l'hardware del sistema ospitante esaminando dinamicamente il codice eseguito all'interno della macchina virtuale traducendolo in istruzioni comprensibili alla macchina ospitante.
QEMU è in grado di emulare numerose architetture hardware, tra cui x86, x86_64, ARM, SPARC, PowerPC, e MIPS. Il sistema ospitante è però vincolato alle architetture x86, x86_64 e PowerPC. Nel caso di architetture x86 esiste un acceleratore (kqemu) in grado di evitare la traduzione dinamica delle istruzioni, permettendo di raggiungere prestazioni attorno al 30-50% di quelle del sistema ospitante (con una emulazione non accelerata le prestazioni calano al solo 5-10%).
Per poter testare le funzionalità dell'emulature è necessario installare i pacchetti qemu, kqemu-common, kqemu-source e vgabios. Tali pacchetti possono essere scaricati ed installati con il comando sudo apt-get install qemu kqemu-common kqemu-source vgabios o utilizzando il gestore di pacchetti della propria distribuzione.
Di seguito vengono indicate alcune opzioni del comando qemu. Per maggiori informazioni vedere la pagina di manuale man qemu 1.
Parametro | Significato |
---|---|
-fda file -fdb file | Utilizza file come immagine del primo o secondo floppy. È possibile indicare /dev/fd0 come nome file, per utilizzare il floppy fisico. |
-hda file -hdb file -hdc file -hdd file | Utilizza file come immagine del disco. |
-cdrom file | Utilizza file come immagine del cd-rom. È possibile utilizzare un dispositivo fisico indicando /dev/cdrom/ come file. |
-boot [a|c|d|n] | Effettua il boot da floppy (a), disco fisso (c), cd-rom (d) o dalla rete (n) |
-m mega | Imposta la RAM virtuale a megaMiB. Di default il valore è 128 MiB. |
Tabella 1: Opzioni del comando qemu.
Di seguito vengono dati alcuni esempi che permettono di acquisire una maggior dimestichezza con l'emulazione offerta dal comando qemu. Come osservato QEMU è in grado di emulare architetture differenti, quindi può essere interessante sfruttare tali potenzialità per testare dei kernel linux per SPARC o MIPS. Dal sito di QEMU è possibile scaricare alcune immagini di test per tali architetture.
Nei vari esempi riportati, per "rilasciare" il controllo dalla macchina virtuale al sistema ospitante utilizzare la combinazione di tasti Ctrl+Alt.
Debian 2.6.18-3 per MIPS.
Per questo test è necessario scaricare il pacchetto http://bellard.org/qemu/mips-test-0.2.tar.gz dal sito di QEMU, e scompattare i file immagine in una cartella sul proprio sistema. Dopo aver fatto cd nella cartella appena creata, lanciare i comandi
qemu-img create mips_hda 1G qemu-system-mips \ -kernel vmlinux-2.6.18-3-qemu \ -initrd initrd.gz \ -append "console=ttyS0 init=/bin/sh" \ -nographic \ -m 128 \ -hda mips_hda |
Il primo comando qemu-img create serve per creare un'immagine da 1Gb da utilizzare come disco fisso per il sistema operativo emulato. Il secondo richiama una versione specifica di qemu per l'emulazione di architetture MIPS. Come parametri vengono passati l'immagine del disco fisso, la quantità di memoria RAM da utilizzare, ed i percorsi al file immagine del kernel ed alla relativa immagine di boot.
Figura 1: Console Linux 2.6.18 MIPS (QEMU).
FreeDOS
Sempre dal sito di QEMU è disponibile l'immagine floppy di FreeDOS http://odin.fdos.org/odin2005/odin1440.img. In questo caso il test di virtualizzazione è più elementare, in quanto richiede unicamente di effettuare l'avvio dall'immagine floppy scaricata. Il comando è qemu -fda odin1440.img -boot a. Si osservi come venga utilizzata l'opzione -fda per impostare l'immagine del primo disco floppy, e come il parametro -boot indichi a QEMU di avviarsi da tale unità.
Figura 2: FreeDOS (QEMU).
Live CD.
Molte distribuzioni, rilasciano immagini live che è possibile provare avviandole da cd-rom. Qemu si presta bene ai test di tali distribuzioni, senza richiedere un riavvio del PC. Per provare è possibile, ad esempio, scaricare una variante di Ubuntu molto usata in attività di analisi forense: Helix. Una volta scaricata l'immagine iso del cdrom è possibile lanciare il comando sudo qemu -cdrom Helix2008R1.iso -boot d per avere all'interno del nostro sistema linux, una live cd pronta all'uso. In questo caso è stato utilizzato il comando sudo qemu in modo da ottenere l'accesso senza errori al file /dev/kqemu e sfruttare le potenzialità dell'acceleratore kqemu.
Figura 3: Helix Live CD (QEMU).
Facendo alcuni test su diverse distribuzioni ed analizzando le prestazioni ottenute, si vedrà che purtroppo la velocità dell'emulazione offerta da QEMU non è paragonabile a quelle ottenibili da un sistema fisico non emulato. I limiti dell'emulazione risiedono principalmente nella necessità di traduzione delle istruzioni, e nell'emulazione dell'hardware.
KVM.
KVM (Macchine Virtuali basate su Kernel) è una soluzione di virtualizzazione completa per Linux, utilizzabile su architetture x86 dotate delle estensioni alla virtualizzazione hardware (Intel VT o AMD-V). Il componente kernel di KVM è disponibile dalle versioni 2.6.16 per AMD e 2.6.15 per Intel. Le opzioni dei comandi kvm e kvm-img sono analoghe a quelle di qemu e qemu-img. QEMU è un pacchetto richiesto per il corretto funzionamento di KVM.
Per l'installazione di KVM è necessario che il sistema supporti la virtualizzazione hardware, tramite svm per i processori AMD o le estensioni vt per i processori Intel. Per controllare che il proprio sistema supporti tali estensioni lanciare il comando egrep '^flags.*(vmx|svm)' /proc/cpuinfo, se appare qualcosa si può procedere con l'installazione del pacchetto kvm.
Una volta installato il pacchetto, KVM utilizzerà due moduli: il modulo kvm.ko fornisce funzionalità di base ed è comune ad entrambe le architetture (AMD ed Intel), ed un modulo kvm-intel.ko per processori Intel, o kvm-amd.ko per i processori AMD.
Nella sottosezione seguente si vedrà come installare un sistema Windows Xp Professional in una macchina virtuale sfruttando KVM.
Windows Xp Professional (KVM).
Come osservato in precedenza, i parametri utilizzabili per i comandi kvm-img e kvm, sono gli stessi che si possono utilizzare per QEMU. Il primo passo per la creazione di una nuova macchina virtuale è la creazione di un disco immagine da utilizzare come disco di avvio.
$ kvm-img create disk1.img 5G Formatting 'disk1.img', fmt=raw, size=5242880 kB |
Con questo comando viene creato un file immagine disk1.img in formato raw della dimensione di 5GB che verrà utilizzato come disco principale per l'installazione di Windows Xp. I formati utilizzabili per la creazione dei file immagine sono gli stessi di QEMU e vengono riportati nello schema seguente. Per maggiori informazioni consultare la pagina man di kvm-img.
Formato | Descrizione |
---|---|
raw | Si tratta del formato utilizzato se non viene indicato qualcosa di diverso con l'opzione -f. Il formato è semplice e facilmente esportabile verso altri emulatori. Ha il vantaggio di riservare spazio unicamente per i settori effettivamente scritti nell'immagine. |
qcow2 | Si tratta del formato immagine di QEMU, ed è quello più versatile. Da utilizzare se si vogliono creare immagini di minori dimensioni, utilizzare la cifratura AES o la compressione tramite zlib. |
qcow | Il vecchio formato immagine di QEMU. Esiste unicamente per compatibilità, quindi non andrebbe utilizzato. |
cow | E' l'unico formato per QEMU in grado di aumentare di dimensione, adattandosi dinamicamente. Si tratta anche in questo caso di un formato supportato per retro-compatibilità, e non andrebbe utilizzato. Non funziona sotto win32. |
vmdk | Formato immagine di VMware 3 e 4. |
Tabella 2: Formati Immagine QEMU e KVM.
A questo punto si procede all'installazione.
kvm -hda disk1.img -cdrom it_winxp_pro_with_sp2.iso -smp 2 -m 1024 -boot d |
Il comando kvm viene utilizzato per effettuare l'avvio del sistema operativo, usando un'immagine iso del cd-rom di installazione ed il disco creato in precedenza. Trattandosi di un sistema dual core, si è utilizzata l'opzione -smp per richiedere l'uso di due processori.
Di seguito vengono allegate un paio di immagini che illustrano il processo di installazione.
Figura 4: Windows Xp Installazione (KVM).
Figura 5: Windows Xp Installazione (KVM).
Al termine della fase di installazione si ha a disposizione un desktop Xp completamente funzionante. Avviamo la macchina virtuale con:
$ kvm -hda disk1.img -smp 2 -m 1024 -boot c |
In cui viene utilizzato il disco disk1.img per effettuare l'avvio.
La virtualizzazione con KVM è sufficientemente intelligente da creare autonomamente una rete virtuale tra il sistema ospitante ed il sistema ospite. Per testare tale sottorete è possibile, ad esempio, lanciare il comando ipconfig /all in Windows Xp per individuare il gateway predefinito, e poi da start -> esegui digitare il comando \\GATEWAY\ per visualizzare le condivisioni di rete del sistema ospitante. Nel caso in figura, il sistema ospitante utilizza Samba per condividere le stampanti e le directory home degli utenti.
Figura 6: Windows Xp Rete Virtuale (KVM).
La rete virtuale definita in KVM permette anche la condivisione dell'indirizzo IP del sistema ospitante ed il NAT è completamente automatico. Nella figura seguente si può osservare come la macchina virtuale navighi in rete, dato il fatto che il sistema ospitante è dotato di una connessione Internet attiva e funzionante.
Figura 7: Windows Xp Rete Virtuale (KVM).
VirtualBox OSE.
VirtualBox è un ottimo software che permette la creazione e la configurazione di macchine virtuali in modo visuale tramite un'interfaccia grafica completa ed intuitiva.
Di seguito viene dato un elenco delle principali funzionalità offerte da questo programma
- Nessuna virtualizzazione hardware necessaria. VirtualBox non richiede la presenza di estensioni VT-x o AMD-V per poter generare macchine virtuali. Se non diversamente specificato il programma utilizza una completa virtualizzazione software monitorata dal programma di controllo. Questo permette la definizione di macchine virtuali su pc "datati", e non muniti di estensioni hardware per la virtualizzazione.
- Portabilità. Il programma supporta vari sistemi operativi come sistemi ospitanti (Windows, Linux, Mac OS e Solaris). Le macchine virtuali create sono facilmente portabili da un sistema all'altro, tramite una elementare operazione di copia/incolla.
- Aggiunte Ospite. VirtualBox permette l'installazione nella macchina virtuale di un'applicazione, denominata "aggiunte ospite", in grado di migliorarne le prestazioni. Tale pacchetto permette ad esempio il ridimensionamento automatico della finestra contenente la macchina virtuale, o la creazione di condivisioni di rete tra il sistema ospitante e quello ospite.
- Configurazione xml. Il programma utilizza file di configurazione xml, sia per la configurazione globale dell'applicazione che per quella delle singole macchine virtuali. L'uso di questo formato permette una miglior portabilità delle macchine virtuali su altri sistemi.
- Supporto hardware. VirtualBox supporta
- ACPI. Supporta pienamente le specifiche di controllo dell'alimentazione di rete. Tramite questa funzionalità il sistema ospitante (su pc con alimentazione da batteria) è in grado di avvisare i sistemi ospiti di un calo di alimentazione, attivandone le funzionalità di risparmio energetico.
- Multimonitor. Il programma permette di utilizzare nelle macchine virtuali risoluzioni video molto superiori rispetto a quelle del sistema ospitante. In questo modo è possibile "estendere" il video su più monitor collegati al sistema principale.
- Fotografie. VirtualBox permette di scattare delle "fotografie" di un sistema ospitato, e di riavviarlo nella condizione fotografata. Questa funzionalità è molto utile per riportare una macchina virtuale in uno stato precedente. Si può fotografare il sistema prima di un'operazione delicata, in modo tale da poterlo ripristinare facilmente in caso di errori o malfunzionamenti.
Per installare VirtualBox è possibile scaricare il pacchetto relativo alla propria distribuzione, direttamente dal sito. Per sistemi che utilizzano apt è possibile eseguire il comando:
sudo apt-get install virtualbox-ose |
In questo modo viene installato il pacchetto virtualbox-ose. Una volta installato si può lanciare il programma dal menu Applicazioni -> Accessori -> VirtualBox OSE.
Figura 8: Schermata iniziale (VirtualBox).
Windows Vista.
Per installare una nuova macchina virtuale, è necessario premere il pulsante "Nuova", quindi seguire i passaggi evidenziati dal programma. Come primo passo si rende necessario creare un disco virtuale che verrà utilizzato dal sistema ospite. Le immagini che seguono illustrano il processo di installazione.
Figura 9: Creazione nuova macchina virtuale (VirtualBox).
Figura 10: Riepilogo configurazione (VirtualBox).
Una volta creato il disco e la macchina virtuale è necessario accedere al pannello di configurazione della VM per eseguire l'avvio da cd o da una immagine iso del sistema operativo che si vuole installare. Il pannello di configurazione è accessibile cliccando l'icona "Impostazioni" in alto a sinistra. La figura seguente mostra come sia possibile configurare VirtualBox in modo che utilizzi un'immagine iso per effettuare l'installazione.
Figura 11: Configurazione CD-ROM (VirtualBox).
A questo punto basta avviare la macchina virtuale premendo sul nome della vm (inserito in una maschera precedente) nella finestra principale di VirtualBox, o premendo l'icona "Avvia" in alto a sinistra. L'installazione si avvia e la si può portare a compimento.
Figura 12: Installazione Vista (VirtualBox).
Una volta terminata l'installazione ed avviata la macchina virtuale è consigliabile installare il pacchetto "aggiunte ospite" dal menu Dispositivi -> Installa GuestAdditions. Questo pacchetto, come spiegato precedentemente, migliora sensibilmente le funzionalità e l'usabilità della macchina virtuale.
Figura 13: Installazione "Aggiunte Ospite" (VirtualBox).
Xen.
Esistono soluzioni di virtualizzazione più performanti rispetto alle precedenti, che permettono la creazione di server dedicati alla virtualizzazione tramite l'uso di kernel modificati. Una soluzione rilasciata sotto licenza GPL, che permette una virtualizzazione di questo genere è Xen.
In Xen ogni macchina virtuale ospitata viene detta Dominio. Esistono due domini principali: il Dom0 è riferito al kernel principale con supporto alla virtualizzazione, in cui vengono creati e gestiti gli altri domini. I domini DomU sono invece associati alle macchine virtuali ospitate da Xen. Il solo Dom0 è in grado di accedere direttamente all'hardware fisico del server.
Una volta installato Xen (dai pacchetti della propria distribuzione o dai sorgenti disponibili sul sito http://www.xen.org) è necessario effettuare l'avvio dal nuovo kernel. Nell'esempio che segue viene indicato come creare una nuova macchina virtuale Xp. In primo luogo si crea una cartella per memorizzare le macchine virtuali, ed un Disco Virtuale da utilizzare per l'installazione.
$ mkdir -p /home/xen/vm/winxp $ sudo dd if=/dev/zero of=/home/xen/vm/winxp/disk.img bs=1M count=4096 |
A questo punto bisogna creare un file di configurazione in /etc/xen/, ad esempio /etc/xen/winxp.cfg, ed aggiungervi la descrizione della nuova macchina virtuale:
kernel = '/usr/lib/xen/boot/hvmloader' builder = 'hvm' memory = '1024' device_model='/usr/lib/xen/bin/qemu-dm'# Disks disk = [ 'file:/home/xen/vm/winxp/disk.img,ioemu:hda,w','file:$PERCORSO_ISO/winxp.iso ,ioemu:hdc:cdrom,r' ] # Nome della macchina virtuale name = 'winxp' # Rete vif = ['type=ioemu, bridge=xenbr0'] # Comportamento boot='d' vnc=1 vncvi |
Molti dei parametri di configurazione sono abbastanza intuitivi. Si osservi che Xen utilizza una tipologia di virtualizzazione nota come HVM (Macchine Virtuali Hardware) in grado di sfruttare le estensioni VT e AMD-V. Il parametro vnc=1 serve per consentire l'accesso alla macchina virtuale tramite il comando vnc winxp, ed è molto utile pensando al controllo di un server dedicato alla virtualizzazione.
Una volta editato il file di configurazione, è possibile lanciare la macchina virtuale e proseguire con l'installazione. Al termine dell'installazione si dovrà modificare il parametro di boot (in 'c') per consentire l'avvio da disco e non da cd. Il comando per avviare la macchina virtuale è xm create /etc/xen/winxp.cfg.
Come si può immaginare, in questo articolo abbiamo solamente "graffiato" la superfice di un argomento complesso come la Virtualizzazione dei sistemi operativi. Per ragioni di spazio e tempo non sono state considerate tutte le problematiche relative alla configurazione delle reti virtuali, o dei backup in sistemi virtualizzati.
Abbiamo però evidenziato parecchi vantaggi della virtualizzazione :
- In primo luogo il ritorno di investimento dovuto all'utilizzo di un server di virtualizzazione. Spesso i server non lavorano a pieno carico, e tramite virtualizzazione è possibile ottenere un miglior sfruttamento delle risorse hardware.
- Le macchine virtuali create tramite QEMU, KVM o VirtualBox possono essere facilmente spostate da un PC a un'altro, dando un nuovo significato alla mobilità degli utenti ed alla portabilità dei sistemi operativi
- Tramite l'emulazione è possibile eseguire applicativi o sistemi non più supportati, oppure creati per differenti architetture hardware.
- Sfruttando la virtualizzazione dei sistemi possiamo dimenticarci dei sistemi dual boot e lavorare direttamente su più sistemi. Si pensi alla comodità di effettuare operazioni di copia/incolla tra diverse macchine virtuali, una funzionalità avanzata offerta da VirtualBox.
Di certo la virtualizzazione sarà sempre più presente nel futuro di tutti.
fonte: Pluto
Nessun commento:
Posta un commento
Non inserire link cliccabili altrimenti il commento verrà eliminato. Metti la spunta a Inviami notifiche per essere avvertito via email di nuovi commenti.