martedì 16 giugno 2009

Ubuntu e HFS+ extended

Ho da poco acquistato un hard disk esterno da 500GB della Western Digital, precisamente il My Book Studio Edition (come da figura).
Per questa serie di hard disk la formattazione iniziale era in HFS+, il formato esteso journalled di MacOS X, dato che questi hard disk sono preformattati e ottimizzati per sistemi MAC.
Non era un problema, dato che l'ho scelto apposta con questa caratteristica, ed infatti su macos mi funziona a potenza, va molto veloce e non rischio mai di perdere l'interno contenuto dell'hard disk perché grazie alla caratteristica journalled il mio bambino mantiene sempre un indice aggiornato dei file contenuti in esso per riportarlo ad una condizione di "buono stato" in caso di errore nel disco, nel sistema oppure a fronte di guasto nell'alimentazione.
Riferimento ai file system HFS+ della apple.
Oltretutto in macos utilizzo la periferica FireWire 800 che va molto più veloce dell'altra concorrente USB 2.1. Ora, è vero che per poter utilizzare questa porta ci vuole l'interfaccia, ma il MacBook ce l'ha già di suo!! :D :D

Comunque, dato che una tecnologia che per MacOS X funziona, io da buon macboontu user non posso starmene con le mani in mano. Voglio che tale tecnologia giri anche su Ubuntu.
Ho scoperto con mia grande sorpresa due particolarità di ubuntu:
La prima è che il supporto per file system HFS+ in ubuntu è già presente in maniera nativa (da quando scrivo ho una ubuntu 8.04 Hardy). Ed ogni volta che monto l'hard disk lui me lo apre quasi immediatamente, e c'è da dire che lo attacco con la FireWire. Orgasmico.
La seconda è che, con altrettanta mia sorpresa, mi sono accorto di non poter scrivere su tale hard disk. (?_?)''
Come mai? All'inizio ho pensato che era per qualcosa che avevo sbagliato io oppure per qualche modulo che mancava nel mio macboontu.
Invece, googleggiando un pò, ho scoperto che è un problema comune, dato dal fatto che il supporto per file system HFS+ in ubuntu presente al giorno d'oggi prevede la possibilità di poter solo leggere un fs HFS+.
Questo se però l'opzione journalling è ancora abilitata.
Navigando ancora ho scoperto ulteriormente che se da MacOS X si disabilita l'opzione "journalling" per l'hard disk (qualunque esso sia formattato in HFS+), sotto linux a quel punto sarà possibile anche scrivere oltre che leggere.
Mi sono detto: facciamolo! Ma poi c'ho pensato per un secondo ed ho fatto questa considerazione: se fosse un hard disk interno al pc, in caso di mancata alimentazione (che poi è il tipo di guasto che si verifica più frequentemente), a quel punto ci pensa la batteria a mantenere il pc alimentato, e non c'è rischio che l'hard disk si spenga.
Mentre nel mio caso, che ho un hard disk esterno alimentato dalla corrente, se dovesse andar via la luce, come si dice da me, l'hard disk si spegnerebbe immediatamente, senza essere smontato e senza salvare ulteriori ultime modifiche che porterebbero alla non integrità dei dati.
Mentre, se lo lascio journalled, se anche dovesse spegnersi, così com'è potrei anche riuscire a rispristinare tutti i dati sotto macosx.
E quindi, questo post è puramente descrittivo, dato che non ho disabilitato l'opzione "journalling", però se qualcuno di voi all' "ascolto" volesse provarci vi indico un paio di riferimenti sul web su come fare per 1- disabilitare l'opzione journalling per un hd HFS+ sotto macosx 2- come fare sotto linux per poter montare un hd HFS+ in lettura/scrittura.

1- Disabilitare l'opzione "journalling":
Si può utilizzare sia l'applicazione Disk Utility di macosx per disabilitare il journalling di fs HFS+ che la riga di comando.
Per farlo da riga di comando basta fare:
computer:~ user$ sudo diskutil disableJournal force /dev/disk
Dove indica il nodo hard disk che macosx vede come numero.
Ad esempio se il mio hd fosse il secondo, e il sector node di mac fosse nella posizione 10 allora direi che il mio hard disk è il disk1s10 perciò sostituire la riga sopra descritta in questa forma:
computer:~ user$ sudo diskutil disableJournal force /dev/disk1s10
Ovviamente in ogni pc il percorso non sarà sempre uguale. Accertarsi sempre del percorso di un hard disk prima di utilizzare la riga di comando, altrimenti si rischia di togliere il journalling ad un hd a cui magari volevate tenerlo.
http://support.apple.com/kb/HT2355?viewlocale=en_US
http://julipedia.blogspot.com/2007/04/how-to-disable-journaling-on-hfs-volume.html

2- Preparare l'hard disk per il mount in lettura/scrittura:
Beh, qui la cosa si fa ovviamente più complessa, data la molteplice casistica di sistemi linux, computer che li ospitano ed utenti che li utilizzano! :D
Comunque, diciamo che il vademecum per, almeno iniziare, si ha (dopo aver seguito il passo 1) nel cercare il disco nella radice /dev.
Non sto qui ad aprrofondire la gerarchia del file system di linux ne per approfondire le opzioni di montaggio dischi sotto linux.
Spero che ne abbiate un idea, altrimenti iniziate una bella ricerca con google, vedrete che non è difficile.
Diciamo che avete identificato il vostro disco. Dato che utilizzando una periferica USB, FireWire oppure un hard disk S-ATA, in tutti i casi linux interpella questa periferica come una periferica SCSI (cos'è?di cosa parli? ask google). Perciò è possibile affermare, con lo 0,1% di errore, che quando si monta un hard disk esso si troverà nella voce /dev/sd.
Ad esempio, nel mio caso l'hd Western Digital me lo monta utilizzando il device node /dev/sdb3.
Una breve panoramica sui device node: sd significa SCSI Device, ma di convenzione sd si utilizza anche per hd S-ATA e USB.
Ogni sd ha al suo seguito una lettera che indica il primo disco SCSI, il secondo, il terzo eccetera, e linux le individua in ordine alfabetico.
Perciò se il mio hd utilizza la lettera b significa che il mio hd è il secondo hard disk che linux vede. Ogni percorso, poi, può avere più numeri che identificano le partizioni.
Non mi dilungo su partizione fisiche e logiche, ma supponendo che il mio hd abbia 4 partizioni, linux mi vede 4 nodi in /dev sotto sdb.
$ ls /dev/sdb*
/dev/sdb /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4
Nel mio caso, le prime due partizioni sono usate da MacOS X e quindi sono partizioni, cosiddette di "sistema", mentre nella terza partizione si trovano i miei dati veri e proprio.
Perciò se voglio montare il mio hd per leggere i dati, e sò che il mio hd linux lo vede come /dev/sdb3, una volta individuato il device node la cosa necessaria e sufficiente per poter montare il disco è quella di fare da riga di comando:
$ sudo mount -t hfsplus /dev/sdb3 /mnt/osx
Ovviamente la cartella osx dentro mnt è previsto che ci sia. Se non c'è createla, ovviamente come super utente, quindi utilizzate sudo.
E tanto basta, ma voglio darvi un paio di siti che approfondiscono meglio la questione, di cui il primo molto ma molto valido.
http://ubuntuforums.org/showthread.php?p=2346494#post2346494
http://ubuntuforums.org/archive/index.php/t-239370.html

Vi saluto, divertitevi a montare e smontare......i vostri mattoncini lego!!! :D :D

-=MoUsE=-

2 commenti:

Unknown ha detto...

ciao!

ho un errore quando cerco di togliere il journaling dell'HD INTERNO..

computer:~ utente$ sudo diskutil disableJournal force /dev/disk0s2
Password:
An error occured journaling the filesystem: This operation requires an unmounted disk (-9942)

magari era anche ovvio.. come si può fare?

grazie della guida!

Unknown ha detto...

devi prima smontare il Device,
sudo umount /dev/disk0s2

;)