Raspberry Pi con drive esterno

In questa guida mostriamo come configurare sul Raspberry Pi, dei drive esterni, Samba e l’SFTP. Per immagazzinare dunque file su un hard disk esterno o una pendrive usb. E trasferirli in lan usando il server Samba o l’SFTP.

Nota bene: Se volete connettere un hard disk esterno da 2,5″ dovete utilizzare un Hub USB alimentato, altrimenti le porte USB del raspberry non saranno in grado di alimentarlo. L’alternativa se volete una soluzione più flessibile, è di utilizzare un hard disk di rete (NAS) oppure una memoria flash abbastanza capiente (il numero di letture e scritture in un flash drive è sempre limitato..).

1. Facciamo l’update

La prima cosa da fare, prima di metterci a lavoro è quella di aggiornare i pacchetti installati sulla nostra board, con questo comando:

sudo apt-get update && sudo apt-get upgrade

Collegare un Hard Disk o una PenDrive

Prima di collegare qualcosa, assicuriamoci che il nostro raspberry pi sia spento:

sudo poweroff

Quindi staccate l’alimentazione e collegate l’HDD all’hub (se una pen drive, potete collegarla direttamente alle usb del raspberry).
Avviate la bord, e dopo il boot da SSH (se operate da remoto) o da normale Terminale, digitate:

sudo blkid

Che mostra la lista dei dischi connessi, assieme ad altre info, nel mio caso ottengo qualcosa del genere:


/dev/mmcblk0p1: LABEL="RECOVERY" UUID="C6EE-9EC7" TYPE="vfat"
/dev/mmcblk0p3: LABEL="SETTINGS" UUID="8572a59f-6036-41c0-948a-7ef730900a76" TYPE="ext4"
/dev/mmcblk0p5: LABEL="BOOT" UUID="023C-3156" TYPE="vfat"
/dev/mmcblk0p6: LABEL="root" UUID="767b7649-4ca4-40f6-84b6-15974ed17385" TYPE="ext4"
/dev/sda1: LABEL="SKYNET" UUID="7B0D-EFD4" TYPE="vfat"

Le prime voci, sono partizioni RASPBIAN sulla scheda SD, mentre l’ultima voce descrive la pendrive usb connessa, chiamata “SKYNET”, con file system di tipo fat32 (vfat) e UUID uguale a 7B0D-EFD4. L’UUID identifica in modo univoco il dispositivo connesso. E’ un’informazione molto importante. Sul rasberry piuttosto che montare automaticamente il dispositivo utilizzando la risorsa assoluta /dev/sda1, possiamo utilizzare l’UUID, in questo modo siamo sicuri che se colleghiamo altri device differenti, non utilizzino lo stesso mounting point (cioè non vengano montati sulla stessa directory).

Possiamo dunque creare una cartella che fungerà da mounting point:

sudo mkdir /mnt/pennetta

E poi aprire il file di configurazione dei file system:

sudo nano /etc/fstab

Aggiungiamo la configurazione sotto a quelle già presenti nel file e salviamo con Ctrl+O e poi Ctrl+X


UUID=7B0D-EFD4 /mnt/pennetta auto uid=pi,gid=pi,noatime 0 0

Il dispositivo verrà montato ad ogni avvio del sistema, per montarlo nella sessione corrente, usate:

sudo mount -a

Siete dunque in grado di accedere al Drive, navigando nella directory /mnt/pennetta:

cd /mnt/pennetta

E mostrarne il contenuto con:

ls -lah

Gestire il FileSystem NTFS

E’ possibile che il vostro Hard Disk esterno sia formattato con NTFS. Il vostro RPi sarà in grado di navigarci dentro fra file e cartelle, ma non sarà in grado di effettuare alcuna modifica.
Per farlo dobbiamo installare un modulo aggiuntivo:


sudo apt-get install ntfs-3g
sudo mount -a

Riavviamo la board e riaccediamoci tramite SSH. Dovreste dunque essere in grado di creare e cancellare una directory di prova:


cd /media/shares/data
mkdir test-folder
rmdir test-folder

Samba

Samba è un protocollo multipiattaforma che ti permette di stabilire una connessione fra te e il tuo HDD connesso al Raspberry tramite Wifi/Ethernet in LAN. Per farlo funzionare però dobbiamo installarlo, configurarlo e aprire alcune porte:

1. Installazione:


sudo apt-get install samba samba-common-bin

2. Settiamo una password per l’utente pi:


sudo smbpasswd -a pi

3. Impostiamo la directory accessibile da Samba:


sudo nano /etc/samba/smb.conf

E decommentate la seguente linea nella sezione Autenticazione:


security = user

Ora, scrolliamo verso il basso il file, e aggiungete questo blocco di testo:


[shares]
comment = Raspberry Pi shares
path = /media/shares
valid users = @users
force group = users
create mask = 0660
directory mask = 0771
read only = no

4. Riavviamo Samba:


sudo service samba restart

5. Ora abbiamo bisogno di aggiungere le porte di Samba alla nostra IpTables per poterci connettere a Samba in LAN:


sudo nano /etc/network/iptables

E aggiungiamo delle linee per la porta 137, 138, 139, 445:


*filter
:INPUT DROP [23:2584]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1161:105847]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --dport 137 -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --dport 138 -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --dport 139 -j ACCEPT
-A INPUT -i wlan0 -p tcp -m tcp --dport 445 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT

Salviamo tutto:


sudo iptables-restore /etc/network/iptables
sudo iptables-save

E verifichiamo che funzioni correttamente 😉

SFTP

Per accedere al raspberry tramite SFTP, non c’è bisogno di installare nulla di nuovo.
Per accedervi potete ad esempio usare FileZilla, impostare l’indirizzo IP del raspberry, come username “pi” poi la password impostata (di default è “raspberry”) e come porta la 22. (SFTP infatti è un protocollo per la trasmissione dei file, proprio come FTP, con l’unica differenza che il traffico è cifrato (SSH). Di conseguenza, trasferire un file tramite SFTP da un lato ha il vantaggio che la comunicazione è sicura, dall’altro, è un task che può affaticare il raspberry, perchè la codifica del file viene effettuata dal server, per l’appunto il RPi).