community italiana di domotica personale
 
Avviare Raspberry Pi tramite disco esterno (SSD o altro)

Avviare Raspberry Pi tramite disco esterno (SSD o altro)

7 minuti di lettura
SCOPI DEL PROGETTO:
  • Abbandonare l’uso di microSD in luogo di un disco esterno (più performante e affidabile)
  • Livello di difficoltà: medio/basso
  • Costo: variabile (in base al disco esterno scelto)
CONCETTI AFFRONTATI:
  • Configurazione hardware
COMPONENTI SOFTWARE UTILIZZATE:
  • bootcode.bin (spiegato a seguire)
  • Raspberry Pi OS (Raspbian) – necessario in alcuni casi
DISPOSITIVI FISICI UTILIZZATI:
PROGETTO MAGGIORMENTE INDICATO PER:

Tutti gli ambienti

Note e disclaimer
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata ed realizzata SOLO da personale qualificato;
  • qualsiasi modifica attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno puro scopo didattico);
  • qualsiasi modifica attuata in proprio a un dispositivo ne fa decadere garanzia, omologazioni e certificazioni di qualità.
Revisione progetto: 2.6

Abstract

microSD
una microSD.

Come noto a molti, l’adozione di Raspberry Pi quale micro-computer a basso consumo per l’esecuzione di funzioni più o meno complesse (HUB domotico, postazione di gioco, server eccetera) prevede l’uso di un microscopico hard-disk, ovvero una microSD: tale componente, disponibile sul mercato in tagli diversi, contiene i dati e il sistema operativo in esecuzione sull’unità.

Tale elemento, purtroppo, rappresenta il tallone d’Achille di quello stupendo strumento che è il Raspberry: spesso fragile, la microSD tende a guastarsi con relativa facilità, specialmente nel caso di esemplari bi bassa qualità costruttiva. La soluzione per chi necessiti di alta affidabilità è quella di utilizzare un disco esterno, collegato via USB, il quale “prenda il posto” – operativamente – della microSD.

La procedura descritta in questo progetto si applica ai modelli Raspberry Pi 2B (1.2), 3A+, 3B e 3B+ e 4B: viene spiegato come scegliere il disco esterno, come implementarlo da zero oppure, anche nel caso si stia già usando il Raspberry Pi con microSD, come provvedere ad una migrazione del sistema operativo in uso e dei relativi dati dalla microSD al disco esterno.

N.b. Ovviamente la procedura descritta in questo progetto è reversibile, pertanto se in futuro si volesse tornare alla sola microSD sarà sufficiente disconnettere il disco esterno, reinserire la microSD ed effettuare l’accensione del Raspberry, il quale tornerà ad avviarsi “internamente” come d’abitudine.

ATTENZIONE: Se si è arrivati alla presente guida cercando la modalità di installazione su disco esterno di Home Assistant su Raspberry Pi 4, allora la guida corretta è questa.

Si parte

Disco esterno

Scelta

Ad oggi le tecnologie disponibili sul mercato consumer tra le quali scegliere per l’adozione su Raspberry Pi (e non solo) sono essenzialmente tre:

  • hard disk tradizionali SATA;
  • hard disk SSD SATA;
  • hard disk SSD PCIe M.2.

Il primo caso tratta di dischi tradizionali ormai obsoleti e dunque citati solo per puro dovere di cronaca (che quindi non ci sentiamo di consigliare né tratteremo come oggetto del presente progetto).

Il secondo e il terzo caso rappresentano invece le strade da battere. I dischi SSD (genericamente detti) utilizzano tecnologie “allo stato solido” che stanno conquistando il mercato per grandi prestazioni, grande affidabilità e basso costo. Solitamente, questi dischi presentano un’interfaccia di connessione in standard Serial ATA o, brevemente, SATA. Quelli basati su interfaccia di connessione PCI-Express (PCIe) M.2, invece, sono versioni ulteriormente potenziate, dalle dimensioni ridotte e dal costo più alto, solitamente utilizzati su computer molto potenti.

Per montare un hard disk SSD su Raspberry Pi serve:

Dato che il presente progetto, per il momento, è valido solo per i modelli Raspberry Pi 2B, 3B e 3B+ (quindi dotati di porta USB 2.x, a differenza del Raspberry Pi 4 dotato della veloce USB 3.x), utilizzare un hard disk SSD PCIe M.2 abbinato a un adattatore USB 3.x avrebbe poco senso, perché le notevoli prestazioni interne garantite da questo standard non sarebbero utilizzabili fino in fondo. Meglio quindi utilizzare un SSD SATA applicato a un adattatore o case USB 2.0/SATA.

Preparazione

A questo punto è necessario “montare” il sistema operativo da utilizzarsi sul Raspberry sul nuovo disco realizzato tramite adattatore/case USB e disco.

Coloro che vogliano “migrare” i contenuti dalla vecchia microSD al nuovo disco non dovranno far altro che spegnere il Raspberry e poi seguire la procedura di backup/ripristino effettuando un backup della microSD per ripristinarlo sul disco SSD esterno; diversamente, coloro che vogliano installare la distribuzione Raspberry Pi OS (Raspbian) da zero non dovranno far altro che seguire questa procedura – la quale nei princìpi è adatta anche a qualsiasi altra distribuzione (HassOS, Retropie eccetera). Ovviamente, nella procedura si fa riferimento come supporto storage alla microSD, mentre in questo caso si utilizzerà il disco esterno collegato via USB (ma concettualmente poco cambia).

N.b. In caso di migrazione da microSD, essa deve avvenire verso un disco di dimensioni pari o superiori alla dimensione massima della microSD stessa (eg. non è possibile migrare da una microSD da 32gb a un hard disk da 16). Inoltre, in caso si migri una microSD su un disco di dimensioni maggiori della stessa si consiglia l’adozione di GParted come tool dedicato al successivo ridimensionamento della partizione al fine di sfruttare per intero la dimensione del disco esterno (vedi guide esterne).

Avvio da disco esterno

Utenti 2B (1.2) e 3B+

In caso si utilizzi uno di questi due modelli di Raspberry, la procedura è semplice: è infatti sufficiente spegnerlo, sfilare la microSD, collegare il disco precedentemente preparato ad una porta USB qualsiasi disponibile sul Raspberry e accendere l’unità che, in assenza di problemi, si avvierà come voluto da disco esterno.

Utenti 3A+ e 3B

Chi utilizzi un Raspberry Pi 3A+ o 3B ha invece necessità di eseguire – al fine di rendere l’unità avviabile tramite disco esterno – un comando specifico che abiliti tale possibilità.

Per farlo è necessario, col Raspberry Pi spento, collegare l’hard disk esterno, accederlo e avviare da microSD, collegarsi via SSH (oppure collegandosi fisicamente tramite tastiera e monitor) al sistema operativo Raspberry Pi OS (Raspbian) (installato sulla microSD) ed eseguire via terminale un comando specifico.

N.b. Se l’utente, sulla vecchia microSD, monta già un sistema operativo Raspberry Pi OS (Raspbian), meglio: è sufficiente utilizzare il terminare ed eseguire il comando che segue. L’alternativa è quella di installare Raspberry Pi OS sulla microSD (dopo, ovviamente, aver effettuato l’eventuale migrazione dei suoi contenuti sul nuovo disco) al fine di collegarsi ed effettuare l’esecuzione del comando.

Una volta collegatisi al terminale di Raspberry, eseguire i seguenti due comandi:

echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt
sudo reboot

Al termine del riavvio causato dal secondo comando, l’unità sarà operativa per un eventuale avvio via USB. Per fare ciò spegnere l’unità, sfilare la microSD; infine accendere l’unità che, in assenza di problemi, si avvierà come voluto da disco esterno.


Maggiori informazioni sulla natura del comando sopra indicato sono disponibili sul sito della Raspberry Foundation.

UTENTI 4B

Nel caso del Raspberry Pi 4B, è necessario obbligatoriamente aggiornare il sistema operativo nonché il bootloader alle ultime versioni disponibili.

Per farlo è necessario collegarsi via SSH (oppure collegandosi fisicamente tramite tastiera e monitor) al sistema operativo Raspberry Pi OS (installato sulla microSD) ed eseguire via terminale un comando specifico.

N.b. Se l’utente, sulla vecchia microSD, monta già un sistema operativo Raspberry Pi OS, meglio: è sufficiente utilizzare il terminare ed eseguire il comando che segue. L’alternativa è quella di installare Raspberry Pi OS sulla microSD (dopo, ovviamente, aver effettuato l’eventuale migrazione dei suoi contenuti sul nuovo disco) al fine di collegarsi ed effettuare l’esecuzione del comando.

Dando per scontato di aver provveduto all’installazione di Raspberry Pi OS su microSD, di averla inserita e di aver acceso Raspberry Pi, collegarsi ad esso via SSH (oppure collegandosi fisicamente tramite tastiera e monitor) ed eseguire via terminale una serie di comandi specifici.

Iniziamo dall’aggiornamento del BootLoader, ovvero il componente firmware che provvede all’avvio da disco esterno:

sudo apt update
sudo apt full-upgrade
sudo reboot

terminato il riavvio, ricollegarsi al terminale ed eseguire il seguente comando per modificare il file rpi-eeprom-update:

sudo nano /etc/default/rpi-eeprom-update

al suo interno modificare la stringa “critical” in “default“. Salvare uscendo (ctrl+x, Y, invio).
Riavviamo nuovamente con:

sudo reboot

Al termine del riavvio ricolleghiamoci nuovamente al terminale e avviamo l’aggiornamento:

sudo rpi-eeprom-update -d -a

e poi, per verificare che tutto sia andato a buon fine, eseguire il comando:

sudo vcgencmd bootloader_version

il quale dovrà indicare una data di versione successiva al 15 giugno 2020.


Terminata la procedura, spegnere il Raspberry Pi e rimuovere la microSD.

Perfezionamento con bootcode.bin

Arrivati a questo punto il Raspberry è operativo tramite disco esterno collegato via USB e senza alcuna microSD inserita.

Basta? , ma è stato notato che l’assenza di una microSD nello slot dell’unità causa l’avvio di processi anomali i quali arrivano ad allocare fino al 10% CPU, causandone un’immotivato assorbimento elettrico nonché il parziale, relativo surriscaldamento.

Per evitare ciò, Raspberry Foundation ha messo a disposizione un file chiamato bootcode.bin il quale, letto all’avvio del Raspberry Pi, impedisce questo comportamento. A tal scopo è sufficiente copiarlo – facilmente, tramite un computer di appoggio – sulla microSD (a questo punto inutilizzata), previa sua formattazione in formato FAT32. Ovviamente questa procedura necessita di un adattatore USB/microSD (che si dovrebbe già avere a disposizione).

Una volta preparata la microSD in questo modo è sufficiente inserirla nel Raspberry e accenderlo (ovviamente con il disco USB connesso): l’unità prima cercherà la microSD, la troverà, eseguirà il bootcode.bin in essa contenuta il quale indicherà di cercare il disco esterno e di avviarne (correttamente, senza processi anomali) il sistema operativo.


L’adozione dei bootcode.bin, inoltre, risolve il problema di alcuni dischi esterni che, collegati via USB, al boot non vengono alimentati elettricamente in tempi congrui, rendendoli indisponibili al sistema, il quale non riesce ad effettuare l’avvio.

Maggiori informazioni su bootcode.bin sono disponibili sul sito della Raspberry Foundation.

Problemi noti

Capita talvolta che le procedure sopra descritte possano non portare a risultati positivi. I problemi solitamente sono causati da una mancata attenzione dell’utente nell’eseguirle, ma talvolta non è così.

È per esempio il caso di problemi talvolta legati all’adattatore USB in uso, il quale se non risolti non permettono il boot esterno; un interessante articolo di James Chamber ci spiega come applicare Quirks per, in alcuni casi, risolvere.

Altri eventuali problemi documentati verranno aggiunti a questo paragrafo; si consiglia comunque sempre di far riferimento anche ai commenti relativi alle esperienze di altri utenti, a seguire.

   


Telegram News Channel