Raspberry Pi | Collegare hard disk esterno alternativa scheda SD

Raspberry Pi | Collegare hard disk esterno alternativa scheda SD

Stufo di corrompere la scheda SD del tuo Raspberry Pi ? E’ arrivato il momento di collegare un hard disk esterno !

Raspberry Pi e scheda SD

Raspberry Pi e’ stato progettato, in tutte le sue versioni, per funzionare con una scheda SD quale supporto di memoria:

Raspberry SD Card

Una scheda SD, per quanto normalmente si misurino esclusivamente le performance in termini di velocità di lettura e scrittura, ha un numero massimo di scritture dopo le quali può diventare non più affidabile e di fatto richiedere la sostituzione (in modo non prevedibile !).

Quando dovete scegliere la scheda SD per il vostro nuovo Raspberry Pi ricordate sempre che:

  • la capacita’ minima raccomandata con NOOBS o Raspbian e’ di 8 GB
  • la classe della scheda SD, che definisca la velocita’ di scrittura continua, non e’ normalmente importante (come lo e’ diventata invece per la registrazione di video 4K)
  • tutti i modelli recenti di Raspberry Pi utilizzando il formato micro SD

La frequenza di scrittura delle applicazioni che utilizzate, inclusi i log, determinano la durata effettiva: il risultato e’ comunque il rischio di perdere i dati.

Per gestire questo problema ci sono due azioni:

  • ridurre la frequenza delle scritture sulla scheda SD
  • collegare un hard disk esterno che diventi la memoria primaria

Raspberry Pi e scheda SD: riduzione scritture

Il primo passo per ridurre le scritture sulla scheda SD e’ quello di disabilitare molti dei log di sistema. Potete farlo facilmente modificando il file /etc/rsyslog.conf aggiungendo all’inizio della sezione
###############
#### RULES ####
###############

la riga seguente:

*.* ~

Potete anche eventualmente disattivarli in modo più fine commentando invece le singole righe del file di configurazione. Nel mio caso specifico ho disabilitato solamente
daemon.log e syslog che erano di gran lunga i file più voluminosi.

Il passo successivo e’ quello di identificare i file che vengono scritti dalle applicazioni più frequentemente mediante il comando iotop:

sudo apt-get install iotop
sudo iotop -bktoqqq

Il cui output indica i processi che hanno maggiormente contributo all’I/O sul vostro sistema.

Se conoscete bene le vostre applicazioni, il miglior approccio e’ anche in questo caso quello di abbassare la verbosità dei log a quanto effettivamente necessario.

L’idea e’ quella di mettere in RAM disk i file di log modificati più frequentemente. Se non lo avete ancora fatto vi raccomando di far loggare tutto nella stessa directory.

Nel mio caso ho creato i seguenti drive in RAM:

tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=50m 0 0
tmpfs /home/pi/log tmpfs defaults,noatime,nosuid,mode=0755,size=100m 0 0
tmpfs /tmp tmpfs defaults,noatime,mode=1777,size=30m

Collegare un hard disk esterno a Raspberry Pi

Per poter espandere lo spazio di archiviazione oltre quello della scheda SD di sistema e’ possibile collegare un hard disk esterno USB.

Sul mercato si trovano dischi USB in formato 2.5″ e 3.5″ con le caratteristiche seguenti:

  • hard disk esterno USB 2.5″: hanno un contenitore di dimensioni ridotte e sono di solito auto-alimentati attraverso il cavo USB stesso
  • hard disk esterno USB 3.5″: hanno un contenitore di dimensioni maggiori e solitamente dispongo di proprio alimentatore da collegare alla presa elettrica

Nel caso di alimentazione mediante il cavo USB abbiamo le ulteriori opzioni:

  • collegamento diretto alla presa USB del Raspberry Pi, ma attenzione ai limiti di potenza
  • collegamento tramite un bus USB

Per semplificare il numero di componenti, ho deciso di procedere con l’alimentazione dell’hard disk esterno utilizzando direttamente una presa USB del mio Raspberry Pi.

Il primo dubbio e’ verificare se i consumi totali siano compatibili col mio alimentatore da 2.000 mA / 10 W:

Siccome non mi ricordavo, ho verificato il mio modello effettivo:

cat /proc/device-tree/model
Raspberry Pi 3 Model B Rev 1.2

Tramite un paio di siti disponibili in rete:

possiamo confrontare i consumi dei vari modelli di Raspberry Pi:

Che ci dicono che in condizioni di massima occupazione della CPU gli assorbimenti massimi sono:

  • modello 3 B = 3,7 W / 730 mA
  • modello 3 B+ = 5,1 W / 980 mA

Occorre anche aggiungere gli eventuali assorbimenti delle periferiche aggiuntive collegate al vostro Raspi.

Ho quindi ordinato uno degli hard disk esterni più venduti:

Verificandone la scheda tecnica, vediamo che l’assorbimento massimo dal bus USB e’ pari a 900
mA.

Sommando i consumi massimi del mio Raspberry Pi 3 B (730 mA) e dell’hard disk esterno (900 mA) otteniamo una potenza massima assorbita pari a 8,15 W / 1.630 mA.

Direi che il mio alimentatore dovrebbe farcela in agilità, ci sono comunque molte opzioni tra cui scegliere:

Visto che ci siamo vediamo come ottimizzare al massimo i consumi, ad esempio leggendo Raspberry Pi Zero – Conserve power and reduce draw to 80mA.

I principali accorgimento possibili per risparmiare energia sono i seguenti:

AzioneRisparmio
(mA)
 
Disattivare HDMI25Se il vostro Raspberry non e' collegato ad un display o TV, potete risparmiare energia disattivando l'HDMI mediante il comando /usr/bin/tvservice -o (-p per attivarlo).
Per disattivare l'HDMI all'accensione basata aggiungere la linea di comando al file di configurazione /etc/rc.local.
Disattivare i LED5 per LEDPotete risparmiare ulteriore energia spegnendo i LED del vostro Raspberry.
Ridurre gli accessori> 50Ogni dispositivo collegato al Raspberry consuma energia: un mouse o una tastiera consumano fino a 50-100 mA. Se non li utilizzate effettivamente scollegateli.
Attenzione al software installato> 100Se sul vostro Raspberry girano innumerevoli applicazioni in background, la CPU viene consumata comunque. Rimuovete tutte le applicazioni che non vi servono effettivamente.

Collegamento hard disk esterno

Una volta collegato l’hard disk esterno e verificato che il sistema continua a funzionare occorre configurarlo.

Step 1 – Scelta file system

Attenzione: la scelta del formato e’ irreversibile pena una nuova formattazione del disco con conseguente perdita dei dati.

Le opzioni sono le seguenti:

  • NTFS: formato di Windows ma con grossi problemi di prestazioni su Raspberry Pi. Sconsigliato.
  • FAT: vecchio formato di Windows con massima compabilita’ nella versione FAT32 (con limite di 4 GB sulla dimensione dei file).
  • OSX: formato di Apple non compatibile con Windows.
  • EXT: formato nativo di Linux con massime prestazioni. Utilizzabile comunque su Windows ed Apple.

La mia scelta e’ EXT4 poiché conto di utilizzare il disco esclusivamente col Raspberry Pi.

Step 2 – Verifica disco

Per verificare l’effettivo collegamento del disco esterno, potete eseguire questo comando:

sudo blkid

/dev/mmcblk0p1: LABEL="boot" UUID="0F5F-3CD8" TYPE="vfat" PARTUUID="19f14882-01"
/dev/mmcblk0p2: UUID="0aed834e-8c8f-412d-a276-a265dc676112" TYPE="ext4" PARTUUID="19f14882-02"
/dev/sda1: LABEL="TOSHIBA EXT" UUID="C826CBA726CB94BA" TYPE="ntfs" PARTUUID="0d6345c3-01"
/dev/mmcblk0: PTUUID="19f14882" PTTYPE="dos"

Che ci indica chiaramente come il nostro disco TOSHIBA EXT sia effettivamente visibile dal sistema.

Step 3 – Verifica partizione del disco

Ora possiamo verificare il nome della partizione corrispondente al nostro disco esterno:

sudo fdisk -l

Disk /dev/sda: 931,5 GiB, 1000204883968 bytes, 1953525164 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0d6345c3

Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 1953521663 1953519616 931,5G 7 HPFS/NTFS/exFAT

Il secondo disco elencato, nel mio caso /dev/sda, è il disco USB connesso (possiamo riconoscerlo anche dalla capacità molto grande). Potete notare come fosse già formattato e pronto all’uso con Windows.

Step 4 – Formattazione del disco

Per formattare la partizione del nuovo disco col filesystem EXT4, perdendo tutti i dati eventualmente memorizzati, usiamo il comando seguente:

sudo mkfs.ext4 /dev/sda1 -L etichetta_volume

dove /dev/sda1 è il nome della partizione da formattare e l’opzione -L permette di assegnare un’etichetta.

Potete verificare l’elenco delle partizioni mediante il comando lsblk.

Step 5 – Directory e permessi del disco

Completata la formattazione del disco, possiamo montare una directory associata all’hard disk esterno da agganciare al file system principale del sistema. Per convenzione i dischi esterni sono sempre montati all’interno della directory /mnt.

Creiamo quindi una sottodirectory /mnt/ext_hdd con il comando mkdir:

sudo mkdir /mnt/ext_hdd

Cambiamone i permessi di accesso con chmod per renderla accessibile in lettura e scrittura da tutti gli utenti del sistema:

sudo chmod 777 /mnt/ext_hdd

Step 6 – Mount del disco

Finalmente montiamo il disco sulla stessa directory con il comando mount:

sudo mount /dev/sda1 /mnt/ext_hdd

Step 7 – Mount automatico del disco

Per impostare il sistema in modo da montare automaticamente il disco esterno ogni volta che si effettua un riavvio basta fare una modifica al file di configurazione /etc/fstab:

sudo nano /etc/fstab

Aggiungendo, dopo le partizioni di sistema associate alla scheda SD, una riga per la partizione del disco esterno:

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

Al riavvio il disco, se acceso prima del Raspberry Pi, verrà rimontato automaticamente. Nel caso ci dimenticassimo di accendere il disco, è sempre possibile montarlo manualmente in un secondo momento come già descritto in precedenza.

Boot da disco esterno con Raspberry Pi 3

A partire dalla versione Raspberry Pi 3 non è più necessaria un’alimentazione supplementare per i dischi esterni, dunque possiamo pensare di spostare tutto sul nostro hard disk esterno.

Step 8 – Installazione rsync

Ora possiamo installare rsync, un tool che tiene sincronizzati i dati tra diverse directory:

sudo apt-get install rsync

Step 9 – Copia scheda SD su disco esterno

Copiamo l’intero contenuto della scheda SD all’interno del disco esterno tramite rsync:

sudo rsync -axv / /mnt/ext_hdd

Step 10 – Modifica cmdline.txt

Ora indichiamo il nuovo disco di boot modificando il file cmdline.txt, di cui e’ meglio creare una copia di backup preliminare:

sudo cp /boot/cmdline.txt /boot/cmdline.txt.bak
sudo vi /boot/cmdline.txt

In particolare ci interessa la voce root=, dova va scritta la posizione del disco esterno (ovvero /dev/sda1). Inoltre occorre aggiungere la voce rootdelay=5 alla fine del file, in modo da impostare un tempo di attesa prima di montare il file system di root.

La nuova riga di configurazione sara’ dunque la seguente:

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait rootdelay=5

Infine blocchiamo il boot dalla scheda SD andando a commentare la riga della sua partizione sul file /etc/fstab:

#/dev/mmcblk0p2 / ext4 defaults,noatime 0 1

df -k
File system 1K-blocchi Usati Disponib. Uso% Montato su
/dev/root 960378896 2224584 909299940 1% /
devtmpfs 495484 0 495484 0% /dev
tmpfs 500092 0 500092 0% /dev/shm
tmpfs 500092 12900 487192 3% /run
tmpfs 5120 4 5116 1% /run/lock
tmpfs 500092 0 500092 0% /sys/fs/cgroup
/dev/mmcblk0p1 43436 22138 21298 51% /boot
tmpfs 100016 0 100016 0% /run/user/1000

Notate che ora tutto il sistema si trova nel disco esterno, ad eccezione dei file di boot ancora presenti nella scheda SD che sarà necessario tenere sempre inserita nel Raspberry Pi.

E’ possibile configurare il firmware su scheda in modo da abilitare il boot da hard disk esterno senza ricorrere più alla scheda SD come spiegato in HOW TO BOOT FROM A USB MASS STORAGE DEVICE ON A RASPBERRY PI 3.

Se vuoi scoprire come ho usato il mio Raspberry Pi per hackerare la mia pompa di calore, leggi Rotex HPSU Compact hack con Raspberry Pi e PiCAN2: prima parte.

Potrebbe interessarti anche

Rispondi

This site uses Akismet to reduce spam. Learn how your comment data is processed.