Condivisione di una cartella tra Linux e Windows su un sistema dualboot usando una macchina virtuale

Avete un sistema dual boot Linux/Windows, usate LVM e/o raid e/o un filesystem esotico/cifrato e avete la necessità di condividere una grossa cartella, grossa abbastanza da scartare l’opzione di copiarne il contenuto, da Linux a Windows?

La prima opzione sarebbe quella di creare una partizione FAT32 o NTFS che faccia da tramite tra i due sistemi e spostarci dentro la cartella in questione. Questa è senza dubbio la soluzione più rapida e indolore. E però non avevo né spazio sufficiente per creare un’altra partizione così grossa all’esterno di LVM, né voglia di stare a ridimensionare i volumi logici, i gruppi di volumi e infine il volume fisico per far spazio ad una partizione del genere. Farlo avrebbe sovvertito completamente il senso dell’uso di LVM, non trovate? Perciò, scartata!

La seconda opzione a cui ho pensato è stata usare un driver ext2/ext3 per Windows: sfortunatamente questo tipo di driver sono piuttosto banali e non prevedono che la vostra partizione si trovi anche solo all’interno di un volume LVM come nel mio caso, immaginatevi se il volume in questione fosse addirittura cifrato. Stessa situazione se al posto di una normale partizione ext3 o ext4 state usando un filesystem più intrigante quale brtfs, xfs, reiserfs o altri.

Lo so.. alcuni di voi stanno già storcendo il muso chiedendosi quale sia l’operazione che devo svolgere per forza da Windows e perdipiù coinvolgendo Linux.. Potrei rispondervi che trovare la soluzione a questo problema rappresenta già uno stimolo sufficiente a cercare di risolverlo. Ma non sarebbe del tutto vero. In realtà mi serviva poter usare Reaper su Windows dandogli accesso alla cartella su Linux. Si, so anche che Reaper gira tranquillamente su Linux usando wine e l’ho anche fatto, tuttavia la stessa cosa non si può dire di alcuni plugin VST (ad esempio Grace) che diventano piuttosto instabili e/o rallentano subito oppure si visualizzano male. E poi ve lo dico chiaramente: se dovete fare un lavoro lungo e farlo comodamente, passare da Wine rende tutto molto più difficile.

Rimaneva la terza opzione: una virtual machine con Linux come sistema guest usando Windows come macchina host e che abbia fisicamente accesso al disco su cui è installato l’altro Linux, quello su cui lavorate abitualmente. Questo è quello che io definisco:”complicarsi amabilmente la vita” ed è la soluzione che mi piaceva di più.

Per farlo ho usato VirtualBox 5 e ci ho installato sopra Ubuntu Mini Remix 15.04, una distribuzione mai provata prima, che mi è sembrata piccola e veloce da fare al caso mio.

Vi suggerisco di configurare la vostra virtual machine con due schede di rete, la prima in NAT, in modo da essere connessa a internet e poter scaricare gli aggiornamenti del s.o. e almeno i pacchetti necessari per montare e condividere la partizione. Ad esempio, se vi serve LVM, su Ubuntu Mini Remix va installato manualmente il pacchetto lvm2, oppure mdadm per il raid. Inoltre vi servirà quasi certamente Samba se volete condividere la partizione con Windows senza dover fare ulteriori sbattimenti. La seconda scheda di rete, invece, andrà impostata come host-only networking, in modo da permettere la comunicazione tra la macchina virtuale Linux e la macchina reale Windows. Su questa scheda andrete poi ad impostare un indirizzo IP statico, uno sulla vm Linux e uno sulla scheda di rete di VirtualBox su Windows.

Quando avrete finito di installare la virtual machine e vi suggerisco di farlo scegliendo solo l’essenziale, niente interfaccia grafica o altro, dovrete scoprire qual’è secondo Windows il numero della partizione sulla quale avete installato l’altro Linux, quello vero, che usate abitualmente. Potete usare il Logical Disk Management andando su Strumenti di amministrazione ->disk-management Gestione computer, oppure potete usare DISKPART da un prompt comandi elevato.

NOTA: Da questo punto in avanti NON mi prendo responsabilità se cercando di seguire i miei consigli distruggete il vostro computer, cancellate la vostra tesi di laurea appena ultimata o l’importantissimo dossier che vostro padre deve consegnare in ufficio domani, perciò procedete a vostro rischio e pericolo..

In ques’tultimo caso, scegliete il disco su cui è installato Linux con

SELECT DISK n

dove n è il numero dell’hardisk sul quale si trova e poi date

LIST VOLUME

per conoscere quale sia la partizione Linux dal punto di vista di Windows. Ovviamente non troverete scritto Linux da nessuna parte…

Una volta capito quale sia la partizione giusta, dovete creare un file vmdk che fungerà da tramite tra la macchina virtuale e il disco reale. Prima di fare questo passaggio, però, dovete sapere questo: da Windows Vista in poi, l’accesso fisico agli hard disk è consentito solo agli utenti con i privilegi di amministratore. Cercando su google troverete scritto che esistono dei modi di aggirare il problema, ad esempio resettando i permessi del disco tramite diskpart oppure disattivando lo UAC temporaneamente. Non perdete tempo a fare queste prove, le ho già fatte io e su Windows 7 non funzionano. Otterrete sempre E_ACCESS_DENIED al momento cruciale.

A proposito, avete installato la virtual machine su un utente che non ha i diritti di amministratore? Bravi pirla! L’ho fatto anche io, adesso reimportatela aprendo VirtualBox con un utente amministratore..

dicevamo della creazione del file vmdk..

[batch]
VBoxManage internalcommands createrawvmdk -filename
“C:\Users\il_vostro_utente_administrator\VirtualBox VMs\nome_della_vostra_VM\quellochevipare.vmdk”
-rawdisk \\.\PhysicalDrive# -partitions x
[/batch]

dove al posto del cancellato # dovete mettere  il numero dell’hardisk e al posto della x dovete mettere il numero della partizione Linux che volete condividere. Notate che sto usando il parametro -partitions, questo fa si che la virtual machine possa accedere solo a quella determinata partizione ed in sola lettura, il che è cosa buona e giusta nel mio caso.

Ha funzionato? Andiamo avanti.. bisogna ancora “agganciare” il nuovo disco vmdk alla vostra virtual machine. Potete farlo dalla GUI di VirtualBox andando a modificare le impostazioni della vostra VM oppure, se siete dei veri duri e vi scrivete i device driver da soli:
[batch]
VBoxManage storageattach nomedellavostraVM –storagectl “SATA” –port 1 –device 0 –type hdd –medium
c:\Users\il_vostro_utente_administrator\VirtualBox VMs\nome_della_vostra_VM\quellochevipare.vmdk
[/batch]
Avete ottenuto E_ACCESS_DENIED? Rileggetevi quello che ho scritto sopra. Siete riusciti? Ottimo! Notate che ho usato il controller SATA, anzichè il controller IDE che c’è nella documentazione ufficiale di VirtualBox, perché se agganciate il disco al controller IDE, quello su cui tipicamente si trova anche il lettore cdrom virtuale, al boot la vostra VM cercherà di avviarsi dall’hardisk linux ma non è questo quello che volete.

Avviate la vostra VM e verificate che il nuovo disco venga riconosciuto, tipicamente come /dev/sdb e che /dev/sdb1 contenga effettivamente quello che volevate voi. Se i conti vi tornano, potete inserire la nuova partizione in /etc/fstab in modo da montarla automagicamente al boot. Attenzione a montare la partizione sempre in read-only onde evitare di fare danni sul vostro sistema Linux di uso quotidiano:

/dev/sdb1     /PartizioneFisica          ext4(o altro)              ro            0              0

Infine installate samba e create una share accessibile a tutti, oppure protetta da password, relativa al mountpoint su cui avete montato la partizione Linux del disco fisico. Qualcosa del genere:

[Guest Share]
        comment = Guest access share
        path = /la/cartella/su/cui/avete/montato/la/partizione
        browseable = yes
        read only = yes
        guest ok = yes

Avviare la vm autoamticamente al boot di Windows in modalità headless lo lascio come esercizio per il lettore.