giovedì 8 marzo 2012

Eseguire il boot da dispositivo USB in una macchina virtuale Virtualbox su host Windows



Come sappiamo Virtualbox include la possibilità di mappare, all'interno delle macchine virtuali, i dispositivi periferici collegati al sistema, come ad esempio i device USB. Possiamo quindi portare sulle macchine virtuali eventuali dischi esterni USB collegati al sistema ospite, senza la necessità di abilitare la funzione cartelle condivise o porre il sistema guest in rete con l'host e trasferire contenuti via ethernet.

Questa caratteristica tuttavia presenta un limite nei casi in cui abbiamo la necessità di collegare un dispositivo USB abilitato al boot. Il montaggio effettivo del dispositivo, all'interno del sistema guest, avviene solo nel momento in cui la macchina virtuale abbia completato la fase di boot ed il controllo sia trasferito al sistema operativo.

Abbiamo ad esempio creato un dispositivo USB bootable che contenga del software di diagnostica. Oppure abbiamo salvato un'immagine di un host fisico e vogliamo testarne il ripristino 'from scratch' in ambiente virutale. Per farlo abbiamo la necessità che il contenuto del dispositivo USB venga letto prima che un eventuale sistema operativo guest sia caricato. Per fare questo viene in aiuto l'interfaccia a riga di comando integrata in VirtualBox ed in particolare l'utility VBoxManage.exe < /p>

Questo metodo prevede 3 passaggi distinti:
1. Collegamento del dispositivo USB all'host fisico, riconoscimento ed installazione dei driver da parte del sistema operativo
2. Creazione del puntamento al dispositivo
3. Collegamento del file di puntamento a Virtualbox.

La prima fase non necessita di spiegazioni. L'unico inconveniente che possiamo incontrare è l'eventuale richiesta di driver da parte del sistema operativo per dispositivi non correttamente riconosciuti (ad esempio periferiche USB 3.0 su sistemi Windows XP o pendrive particolari). In tal caso è opportuno disporre del software fornito a corredo dal produttore.

Nella seconda fase si concentra in pratica il lavoro da svolgere: lo scopo è quello di creare un disco fisso virtuale che non contenga effettivamente dati, ma solo un puntamento al dispositivo hardware collegato al sistema host. Nelle recenti versioni VirtualBox ha aggiunto il supporto ad altri formati di dischi virtuali, oltre a quello VDI nativo; sono quindi supportati i file con estensione VHD di Microsoft, i VMDK di VMware e il formato HDD di Parallels. Al nostro scopo andremo a creare un file disco virtuale in formato VMDK.

Una volta installato il pendrive nel nostro sistema host, abbiamo la necessità di conoscere il puntamento fisico assegnato dal sistema operativo. Essendo in ambiente Windows possiamo utilizzare un comodo comando in PowerShell che ci restituisca questa informazione:

Get-WmiObject -Class Win32_diskdrive

L'output restituito potrebbe essere simile al seguente:


Partitions : 3
DeviceID : \\.\PHYSICALDRIVE0
Model : ST9120823ASG ATA Device
Size : 120031511040
Caption : ST9120823ASG ATA Device

Partitions : 1
DeviceID : \\.\PHYSICALDRIVE1
Model : SMI USB DISK USB Device
Size : 2023418880
Caption : SMI USB DISK USB Device

In questo caso vengono visualizzati due dispositivi distinti corrispondenti rispettivamente al disco fisico di sistema ed al pendrive inserito nello slot USB. E' facile distinguere i dispositivi oltre che dal nome dalla dimensione del supporto. L'informazione che ci interessa memorizzare è quella relativa al campo DeviceID. Ad esempio, per il nostro dispositivo esterno il DeviceID corrisponde a \\.\PHYSICALDRIVE1.

Ora dobbiamo creare il disco virtuale che punti a questo device. Sempre all'interno della console di PowerShell (o anche dal prompt classico dei comandi), dobbiamo digitare il seguente comando:

%ProgramFiles%\Oracle\VirtualBox\VBoxManage.exe internalcommands createrawvmdk -filename \image_name.vmdk -rawdisk \\.\PhysicalDrive1

Viene creato un file di testo con estensione .vmdk nel percorso specificato. Aprendo il file con un qualsiasi editor di testo, ci accorgiamo immediatamente che esso non contiene i dati estratti dal pendrive usb come ci si aspetterebbe.

Ecco come si presenta il contenuto del file

# Disk DescriptorFile
version=1
CID=23e97fbf
parentCID=ffffffff
createType="fullDevice"

# Extent description
RW 3956736 FLAT "\\.\PHYSICALDRIVE1" 0

# The disk Data Base
#DDB

ddb.virtualHWVersion = "4"
ddb.adapterType="ide"
ddb.geometry.cylinders="3925"
ddb.geometry.heads="16"
ddb.geometry.sectors="63"
ddb.uuid.image="0891a957-bf2a-4b0d-adfa-853e06c6e970"
ddb.uuid.parent="00000000-0000-0000-0000-000000000000"
ddb.uuid.modification="00000000-0000-0000-0000-000000000000"
ddb.uuid.parentmodification="00000000-0000-0000-0000-000000000000"

Il file svolge solo il ruolo di puntatore, ma i dati sul pendrive non vengono copiati, il che può risultare molto vantaggioso nel caso lo stesso contenga una grossa mole di informazioni, evitando tempi inutili di copia nel sistema host.
A questo punto, supposto che disponiamo già di una macchina virtuale di test, altrimenti la creiamo, non ci resta che collegare il file .vmdk appena creato alla stessa, tramite il menu impostazioni; l'operazione è quella classica di aggiunta di un nuovo disco ad una macchina virtuale effettuata tramite l'interfaccia grafica di VirtualBox.
Con il pendrive sempre collegato all'host, avviamo la macchina virtuale e, prontamente, spostiamo il focus all'interno della finestra di esecuzione della stessa, quindi premiamo F12 per selezionare il dispositivo di boot.

A questo punto compare il menu per la scelta del dispositivo di avvio. Selezionare il device esterno e proseguire con il boot. Nel nostro caso abbiamo creato un'immagine contenente Paragon Backup & Recovery 2012 Free.
Come ulteriore prova che il nostro disco virtuale non contiene dati, proviamo a rimuovere il pendrive dal sistema ospite prima di avviare la macchina virtuale; VirtualBox presenterà un errore come questo, ad indicare che un dispositivo, di cui abbiamo specificato la locazione, non è presente:

Ricolleghiamo il pendrive sulla stessa porta USB di prima (pena la reinstallazione del dispositivo e la probabile assegnazione di un percorso fisico diverso).
Ad un primo avvio la macchina potrebbe bloccarsi e visualizzare messaggi come questo:

Niente paura, non si tratta di eventuali errori legati all'incompatibilità del device, quanto alle impostazioni della macchina virtuale non adeguate al sistema che vogliamo avviare. Nel caso specifico, Paragon Backup & Recovery ci chiede espressamente di attivare la modalità PAE del processore. Spegniamo la macchina, andiamo nelle impostazioni e attiviamo la funzionalità richiesta.

A questo punto riavviamo la macchina virtuale, selezioniamo come prima il dispositivo di boot corretto ed attendiamo il caricamento del sistema. Ecco che dopo qualche istante il nostro sistema si avvia e possiamo procedere con il resto delle operazioni

Nessun commento:

Posta un commento