Collegare un hard disk esterno al Pi

Nei post precedenti abbiamo visto come preparare una scheda SD contenente il sistema operativo Raspbian, e abbiamo parlato della configurazione iniziale da fare al primo avvio, attivando anche il server SSH per controllare il Raspberry Pi da remoto. Ora vedremo come collegare un hard disk esterno USB, per poter espandere lo spazio di archiviazione oltre quello della scheda SD di sistema.

Prima di iniziare, un paio di precisazioni. La prima riguarda il tipo di disco utilizzato: tipicamente in commercio si trovano dischi USB da 3.5″ e da 2.5″. I primi hanno un contenitore di dimensioni maggiori e sono tipicamente alimentati esternamente tramite un classico “mattoncino” da collegare a una presa di corrente. In questo caso il cavo USB porta solo i dati e non ci sono problemi di sorta collegandoli al Pi. I dischi da 2.5″, invece, sono quelli con il contenitore piu’ piccolo, e di solito sono autoalimentati, ovvero usano il cavo USB (a volte un particolare cavo sdoppiato), oltre che per portare i dati, anche per assorbire la corrente necessaria dal PC o dal dispositivo a cui sono collegati; in questo caso e’ necessario procurarsi un hub multiporta USB alimentato esternamente, da collegare al Raspberry e a cui collegare il disco da 2.5″, dato che il Pi da solo non riuscirebbe a fornire la corrente necessaria a far funzionare l’hard disk.

Una volta collegato correttamente il disco, la seconda precisazione riguarda la scelta del filesystem da utilizzare, ovvero il formato con cui inizializzarlo. Ogni sistema operativo utilizza almeno un diverso tipo di filesystem, e spesso non è in grado di leggere o scrivere dischi formattati diversamente. Per scegliere bene e non pentirsene più avanti (cambiare il tipo di filesystem usato, di solito, richiede una formattazione del disco con conseguente perdita dei dati) dobbiamo prima ragionare su che genere di file ci metteremo sopra e se avremo bisogno di usare il disco con altri computer. Qui di seguito sono elencati alcuni tipi di filesystem con pro e contro.

  • Le versioni recenti di Windows (XP, Vista, Seven, 8) usano tipicamente dischi formattati in NTFS. Questo filesystem permette di memorizzare file più grandi di 2GB, ma viene usato in sola lettura dai sistemi Linux e OSX, e non supporta i permessi sui file e le cartelle. E’ possibile aggiungere il supporto alla scrittura usando il driver open-source e gratuito ntfs-3g. Tuttavia, ad oggi, sul Raspberry questo driver ha grossi problemi di prestazioni, rendendo la scrittura di file su dischi NTFS estremamente lenta.
  • Le versioni più vecchie di Windows usavano il filesystem FAT, di cui ancora oggi esistono diverse varianti come FAT32 e ExFAT. In particolare, FAT32 è il filesystem in assoluto più compatibile fra i vari sistemi operativi, dato che tutti sono in grado di leggerlo e scriverlo, ma ha una limitazione sulla dimensione massima dei file, che non possono superare i 4GB, e non supporta i permessi sui file. Se questo non è un problema, usando FAT32 potete usare facilmente il disco del Raspberry su quasi tutti gli altri computer.
  • Apple usa per OSX il filesystem HFS+ e le sue varianti con e senza journaling. Linux e’ in grado di leggere i dischi HFS+ ma non di scriverli se il journaling è abilitato. Windows non può nemmeno leggerli a meno di non installare software commerciali.
  • Infine, su Linux viene utilizzato nativamente il filesystem EXT, che sul Raspberry garantisce le massime prestazioni in lettura e scrittura senza sovraccaricare la CPU. EXT supporta i permessi Unix su file e cartelle, e si tratta inoltre di un filesystem robusto e affidabile. Lo svantaggio è che per poterlo leggere sotto Windows e OSX sono necessari driver o utility di terze parti.

Nel mio caso, le considerazioni che ho fatto prima di formattare il disco da collegare al Raspberry sono state le seguenti: avevo bisogno di poter salvare file di dimensioni grandi (anche piu’ grandi di 4GB), quindi FAT32 era da escludere; ho escluso NTFS per via delle prestazioni molto scarse del driver ntfs-3g necessario per utilizzarlo; infine, ho ragionato sul fatto che probabilmente non avrò necessità di collegare direttamente il disco ad un pc con Windows o con OSX per leggere i dati contenuti, ma sarà sufficiente condividerlo sulla rete locale per accedere ai file.

Ho quindi scelto il filesystem EXT4, e ho iniziato collegando al Pi un vecchio disco esterno Lacie 3,5″ da 320GB alimentato esternamente.

Vediamo ora la procedura da seguire per attivare il disco sul Pi, formattarlo (in EXT4) e montarlo, ovvero assegnargli un percorso nel filesystem. I comandi possono essere dati direttamente sul Raspberry se vi abbiamo collegato una tastiera e un monitor, oppure usando una sessione SSH collegandoci da un altro computer della rete locale.

Una volta che il disco è collegato e acceso, iniziamo usando il comando fdisk per elencare i dischi riconosciuti dal sistema:

pi@raspberry ~ $ sudo fdisk -l

Il primo disco che verrà elencato sarà probabilmente la scheda SD su cui risiede il sistema operativo del Raspberry, indicata dal nome di device /dev/mmcblk0; il secondo disco elencato, in questo caso /dev/sda, è il disco USB connesso (possiamo riconoscerlo anche dalla capacità, indicata immediatamente a fianco del device name, come in figura, cerchiati in giallo).

 

In giallo troviamo il nome logico del disco e la sua capacità, mentre in rosso il nome assegnato alla partizione (/dev/sda1).

In giallo troviamo il nome logico del disco e la sua capacità, mentre in rosso il nome assegnato alla partizione (/dev/sda1).

Una volta individuato il disco, nella stessa schermata troveremo anche la lista delle partizioni in cui esso è eventualmente diviso: nella figura di cui sopra, ad esempio, la scheda SD è divisa in due partizioni, chiamate /dev/mmcblk0p1 e /dev/mmcblk0p2, mentre il disco USB ha una sola partizione chiamata /dev/sda1 (cerchiata in rosso). Prendiamo nota del nome completo di questa partizione e andiamo avanti.

Per formattarla usando il filesystem EXT4, usiamo il comando seguente (attenzione, come sempre succede formattando, viene eliminato tutto ciò che si trova sul disco!), dove /dev/sda1 è il nome della partizione da formattare e l’opzione -L ci permette di assegnare una etichetta alla partizione stessa

pi@raspberry ~ $ sudo mkfs.ext4 /dev/sda1 -L etichetta_volume

Una volta completata la formattazione, è necessario creare un mount point, ovvero una cartella da usare come “punto di aggancio” della struttura di file e cartelle del disco al filesystem principale del sistema, che parte dalla cartella radice o root ( / ). Per convenzione, i dischi esterni vengono sempre montati in sottocartelle dentro la directory /mnt: creiamo quindi una sottodirectory /mnt/usbhdd con il comando mkdir, e poi cambiamone i permessi di accesso con chmod per renderla leggibile e scrivibile da tutto gli utenti del sistema (incluso l’utente predefinito pi):

pi@raspberry ~ $ sudo mkdir /mnt/usbhdd
pi@raspberry ~ $ sudo chmod 777 /mnt/usbhdd

Una volta creata la directory che fungerà da mount point, “montiamo” il disco sulla stessa con il comando mount:

pi@raspberry ~ $ sudo mount /dev/sda1 /mnt/usbhdd

Ora possiamo navigare la struttura dei file e delle cartelle del disco USB entrando in /mnt/usbhdd e usando ls:

pi@raspberry ~ $ cd /mnt/usbhdd
pi@raspberry ~ $ ls -l

Importante: prima di spegnere o scollegare il disco esterno, è sempre bene smontare il disco dal filesystem, in modo che vengano chiuse eventuali scritture in sospeso. Il comando da usare è umount, seguito dal nome della partizione:

pi@raspberry ~ $ sudo umount /dev/sda1

Se non si smonta il disco prima di scollegarlo o spegnerlo, il filesystem potrebbe risultare danneggiato e potrebbero andare persi dei dati. Il comando umount non è necessario quando si arresta il sistema con shutdown -h (o lo si riavvia con shutdown -r).

Vediamo infine come impostare il sistema per montare automaticamente il disco esterno ogni volta che si effettua un riavvio; per farlo è necessario fare una modifica al file di testo /etc/fstab (usando nano o un altro editor come vi):

pi@raspberry ~ $ sudo nano /etc/fstab

Una volta aperto il file nell’editor, le prime due righe sono relative alle due partizioni di sistema presenti sulla sdcard; sotto di esse aggiungiamo una terza riga per la partizione del disco esterno, con il testo seguente (fra una voce e l’altra c’e’ una tabulazione):

/dev/sda1    /mnt/usbhdd     auto     defaults,user   0   1

Come modificare il file /etc/fstab per montare automaticamente la partizione /dev/sda1.

Come modificare il file /etc/fstab per montare automaticamente la partizione /dev/sda1.

Dopodichè salviamo il file (con nano ctrl-o) e usciamo (ctrl-x); al riavvio il disco, se acceso prima del Pi, verrà rimontato automaticamente. Nel caso ci dimenticassimo di accendere il disco prima del Raspberry, è sempre possibile montarlo in un secondo momento con uno dei seguenti comandi:

pi@raspberry ~ $ sudo mount /dev/sda1 /mnt/usbhdd

oppure, se si è modificato il file fstab, con il comando

pi@raspberry ~ $ sudo mount -a

A questo punto è possibile utilizzare il Raspberry come storage di file; in un prossimo post vedremo come poter accedere al contenuto del disco esterno tramite rete locale, utilizzando sFTP oppure installando e configurando Samba.

Leave a Reply

Your email address will not be published. Required fields are marked *