Un NAS Linux economico (quasi) tutto di recupero
Archiviazione dati a basso costo: NAS, Network Attached Storage

Mi permetto una piccola considerazione iniziale: mai come in questo periodo, lo spazio di archiviazione è veloce ed a basso costo.
Non parlo, certamente, dello storage su cloud, cui non affiderei mai i miei dati: non per la scarsa affidabilità delle soluzioni hardware, quanto per la scarsa fiducia che personalmente nutro nei confronti delle organizzazioni esterne che si troverebbero a gestire i miei documenti elettronici.
Pertanto, in questa pagina, parlo dei dischi, sia SSD che meccanici, che è possibile acquistare, ormai, davvero a poco, sul mercato dell'hardware.
In particolare, le capacità dei dischi allo «stato solido» (i veloci SSD) sono sempre in aumento ed i costi sono in discesa: un disco da 2 Terabytes, ormai, possiamo averlo di buona marca a meno di 150 euro. E due terabytes sono più che sufficienti per un utente «normale»... e, oggi come oggi, raramente si usano CD e DVD per archiviare i propri dati...
Partendo da quanto premesso, mi sono recentemente imbarcato nella realizzazione di un server NAS usando schede economiche (e di recupero) che, tuttavia, permettono di ottenere uno strumento professionale.
Una scheda madre di recupero

Tutto è cominciato con il riciclo, quasi quasi traendolo fuori dal cassonetto, di un vecchio dispositivo privo di disco: conteneva una scheda madre da 17 cm per lato (una classica scheda «Mini-ITX») con processore Intel Atom, costruiti, entrambi, dopo il 2010: una scheda molto particolare, in verità; è alimentata, infatti, a 12 volt mediante un apposito circuito di alimentazione che fornisce, al connettore «standard» della scheda madre, tutte le tensioni di cui questa ha bisogno per funzionare.
Nel dettaglio, si tratta di una mainboard Intel, modello D525MW, costruita a partire da giugno 2010; la scheda include anche una CPU Intel Atom Dual-core, non sostituibile in quanto saldata sulla scheda e provvista di raffreddamento passivo. La scheda video è integrata sulla scheda, con un chip Intel GMA 3150. Supporta massimo 4 Gb di RAM non-ECC di tipo DDR3 800/1066/1333 MHz SO-DIMM (le SO-DIMM a 1066 e 1333 possono essere montate ma funzioneranno a 800 Mhz). La scheda è provvista di audio integrato, costruito intorno al chip RealTek ALC662 audio codec in grad di fornire ben 6 canali. La scheda di rete è integrata sulla scheda grazie ad un chip Realtek 8111E Gigabit Ethernet Controller in grado di fornire velocità da 10 a 1000 Mbits/s su connettore RJ45.
Anche lo chassis in metallo è particolarmente interessante: piccolo ed in metallo con alcuni vani per i dischi ed una paratia sul retro, piuttosto bruttina, per tenere in sede due schede PCI in orizzontale (parte che ho rimosso, adattandoci un pezzo di lamiera)
La mia intenzione era usare un disco per il sistema e due SSD, in RAID1, per il backup dei miei dati; c'era, però, un piccolo problema: la scheda madre presenta solo due canali SATA disponibili. Pertanto, diventava quindi indispensabile aggiungere una scheda PCI SATA in quell'unico slot disponibile.
La scelta della scheda PCI

L'hardware vetusto ha ristretto la scelta delle varie schede SATA: pertanto ho usato una economica SIL3114 PCI, robusta e collaudata, con ben quattro canali SATA. Inoltre, questa scheda PCI è ben supportata da qualsiasi distribuzione di Linux.
A causa del ridotto spazio a disposizione, la scheda è stata montata mediante un adattatore PCI ad angolo e, privata della propria staffa metallica, è stata collegata, meccanicamente, alla nuova paratia da me realizzata (anche perché, quella originale, non permetteva un montaggio perfetto).
Con la nuova scheda, le possibilità di connessione salgono a ben 6 dischi SATA!

Pertanto, sul SATA-0 della mainboard ho collegato un disco SSD Kingston da 120 GB (recupero da un sistema che non uso) e a due delle quattro porte della scheda due nuovissimi SSD Samsung EVO da 2 Terabytes. Particolare importante: questa scheda non gestisce hardisk più grandi di due tera o, almeno, non c'è certezza che lo faccia bene... nel dubbio, meglio non rischiare
Per agevolare il montaggio dei dischi, ho comprato un adattatore che permette di montare due SSD da 2,5 pollici in un spazio da 3,5.
Importante sottolineare che i dischi SSD hanno bisogno soltanto di 5 volt (e non più dei 12 volt usati, nei dischi tradizionali meccanici, per alimentare il motore dei piattelli e l'attuatore delle testine) e consumano pochissimo: pertanto sono ideali in situazioni dove la quantità di energia è limitata.
Il piccolo alimentatore della scheda aveva un solo cavo di alimentazione SATA: ho usato un cavo «Y» che mi ha permesso di sdoppiarlo e alimentare i due dischi Samsung; per il disco di sistema ho usato un adattatore da connettore Molex a 4 poli a SATA che mi ritrovavo da un precedente progetto.
Dove ho comprato il materiale

Per gran parte del materiale necessario per il completamento, ho speso meno di 25 euro su Aliexpress; dal megasito cinese ho recuperato la scheda SATA SIL3114, il cavo Y di alimentazione, il frame in metallo per il montaggio dei due dischi e due ventoline 12 volt da 50x10 mm (e relative viti di montaggio) per la ventilazione forzata del cabinet, dato che, originariamente, la scheda madre aveva solo dissipazione passiva.
Il costo maggiore è stato quello dei dischi da 2 Tb: ho preferito andare sul sicuro acquistandoli da un sito certificato ed originali Samsung EVO. I propri dati, come spiegato poc'anzi, non vanno consegnati al primo che capita...

Anche perché si tratta di un backup da usare, magari una volta al giorno o una alla settimana, per salvare il lavoro fatto sui PC della rete locale. Pertanto, come spesso succede in ambiente domestico, da tenere acceso solo quando serve...
Un facile assemblaggio
Disponendo di tutto il materiale è stato velocissimo assemblare il tutto: in meno di trenta minuti il lavoro «meccanico» era fatto, comprese anche alcune piccole modifiche alla paratia autocostruita.
Le foto illustrano meglio materiali e montaggio.
Ed ora, il sistema!
In un hardware così ridotto, il sistema designato è il classico Linux senza ambiente grafico (il NAS non avrà né monitor né tastiera) che sarà usato solo attraverso la sua scheda di rete, anche se la scheda madre dispone di tutte le connessioni (uscita VGA e diverse connessioni USB, oltre a due porte PS/2 per mouse e tastiera).

La scelta è ricaduta su Debian 12 «Bookworm», che recentemente mi trovo ad usare su diversi server ma che gode di supporto sino al 2028; inutile dire che ho combattuto contro la tentazione di installare una solida Slackware 15 la cui gestione, per questo tipo di lavori, è davvero facile.
Tuttavia, anche Debian si difende molto bene: bisogna solo fare un po` attenzione a salvare i parametri del RAID una volta configurato. Basta usare i seguenti comandi alla fine della configurazione del RAID1 Software:
$ sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf
Il file «mdadm.conf» diventa necessario per l'avvio automatico dell'array di dischi la volta successiva che il sistema riparte (in caso contrario, addio RAID1!)... inoltre, dopo aver salvato il file «mdadm.conf» è necessario anche aggiornare «initramfs» (un archivio che contiene il filesystem usato come «root temporaneo» e caricato in memoria durante il processo di avvio) usando il seguente comando:
$ sudo update-initramfs -u
A questo punto, diventa importante andare un po` indietro e configurare, prima di tutto, il nostro nuovo RAID1 software
Come realizzare il RAID1 Software
La piccola scheda PCI scelta per i dischi (la SIL3114) gestisce un RAID mediante un suo software proprietario; trattandosi di una scheda economica, non è in grado di gestire il RAID in totale autonomia.
Pertanto, l'unica opzione valida è puntare ad un RAID1 software gestito dai processi Linux, che funzionano benissimo in ambienti di produzione.
Quindi, dopo aver installato il sistema ed aver avuto accesso dalla rete mediante una connessione SSH, è sufficiente impartire i seguenti comandi al sistema che spiego di seguito; ovviamente il primo passo da compiere sui due dischi, è creare le partizioni (sempre uguali tra loro), con un qualiasi programma di partizionamento (io ho usato fdisk) e del tipo «fd» (Linux RAID Autodetect).
Ho creato due parizioni per disco, ciascuna di almeno 900 Gbytes:
sda1 - sdb1 == 900GB sda2 - sdb2 == 900+GB (Parte restante, 933 Gb)
Il secondo passo è la creazione dei dischi, associando a due a due le partizioni create:
[primo disco /dev/md0 da 930Gb] mdadm --create /dev/md0 --level 1 --raid-devices 2 /dev/sda1 /dev/sdb1 --metadata=1.2 mdadm: array /dev/md0 started. [secondo disco /dev/md1 da 933Gb] mdadm --create /dev/md1 --level 1 --raid-devices 2 /dev/sda2 /dev/sdb2 --metadata=1.2 mdadm: array /dev/md1 started.
La verifica si fa impartendo il seguente comando:
cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : active raid1 sdb2[1] sda2[0] 978205760 blocks super 1.2 [2/2] [UU] resync=DELAYED bitmap: 8/8 pages [32KB], 65536KB chunk md0 : active raid1 sdb1[1] sda1[0] 975043584 blocks super 1.2 [2/2] [UU] [>....................] resync = 0.2% (2072192/975043584) finish=333.4min speed=48623K/sec bitmap: 8/8 pages [32KB], 65536KB chunk unused devices: <none>
Alcune note importanti
Se creiamo e fermiamo un RAID, i dischi sono dischi da formattare nuovamente e tutti i dati registrati sono persi!
Inoltre, se il disco è di recupero ed ha «Disk Label Type GPT», è indispensabile cancellare le partizioni con fdisk e dare il comando «o» che toglie GPT ed usa le classiche DOS partition dove è possibile usare il tipo partizione «fd», necessario per costruire il RAID.
Altra nota importante, ricordare sempre di memorizzare le impostazioni del RAID creato nel file /etc/mdadm/mdadm.conf se non fatto dal sistma operativo.
Inoltre, se diventa necessario fermare il Raid, è necessario impartire, per ogni disco, il seguente comando:
mdadm --stop /dev/mdX
Dove «X» è il numerico del disco da fermare.
Problema surriscaldamento
Da non crederci ma, nonostante i dischi siano alimentati a 5 volt ed abbiano un consumo esiguo, il funzionamento genera parecchio calore se il cabinet è chiuso e non adeguatamente ventilato.
In particolare, una volta creato il RAID1, parte il processo di SYNC da parte del software di gestione; si tratta di una operazione lunga che porta a creare una unica area di archiviazione su due partizioni esattamente uguali... che, oltre ad essere uguali, devono essere sincronizzate...
Il totale completamento della sincronia di due Terabytes è un'operazione che, con questo hardware, ha avuto una durata di oltre 10 ore, fortunatamente ripartite sulle due partizioni da un tera che avevo relizzato: durante questa fase le ventole si sono dimostrate indispensabili per il controllo della temperatura nel piccolo case.
Ho preso su internet due piccole ventole da 12 volt (dimensioni 5 cm x 5 cm x 10 mm) che si adattavano agli spazi ad esse riservati nel piccolo case; il montaggio è avvenuto con delle piccole viti autofilettanti (non ho potuto usare quelle per ventole in quanto i fori erano molto piccoli) e le ho collegate, elettricamente, all'unica presa rimasta disponibile (quella del floppy disk) usando un connettore compatibile. Per evitare che le ventoile girassero sempre alla massima velocità, lo ho rallentate mediante due resistenze da 100 OHm in parallelo, in modo da alimentarle a 9/10 volt al massimo.
L'operazione di sync può essere sospesa: lo spegnimento del server NAS (shutdown -h now) sospende l'operazione che riprende alla successiva accensione; inoltre, le operazioni di formattazione e creazione di directory possono essere eseguite durante la fase di sync accelerando, per quanto possibile, i tempi.
Anche la formattazione in EXT4 (extended 4) dei dischi richiede tempo ma, in questo caso, le operazioni su tantissimi inode sono effettuate in background all'insaputa dell'utente... meglio così.
Ecco il comando di formattazione usato per una delle due partizioni, che è possibile lanciare anche durante la fase di resync:
mkfs.ext4 /dev/md0 mkfs.ext4 /dev/md1
Dopo la formattazione è possibile «montare» a mano i due nuovi dischi in raid con i solito comando:
mount /dev/md0 /mnt/raid00 mount /dev/md1 /mnt/raid01
Inoltre, affinché il mounting dei dischi avvenga in automatico, è necessario modificare il file di configurazione «/etc/fstab»:
vi /etc/fstab /dev/md0 /mnt/raid00 ext4 defaults,nofail,discard 0 0 /dev/md1 /mnt/raid01 ext4 defaults,nofail,discard 0 0
In questo modo, al riavvio, i nuovi dischi saranno disponibili per essere usati.
In conclusione
Sì, certo: un sistema NAS casalingo «già pronto» non è una spesa eccessiva ed i dischi, comunque, non sono mai compresi nel prezzo.
Tuttavia, partire da qualcosa di funzionante che stava per essere dismesso e costruire intorno ad esso qualcosa di nuovo, mettendoci un po` del proprio tempo e mescolando con la propria esperienza, non guasta mai.
Aggiungo che, spesso, i NAS che si trovano in commercio non consentono un totale accesso in SSH, non permettono l'installazione di software «standard» e difficilmente ci puoi fare un server web di «sviluppo»: pertanto, la scelta di farsene uno da sé, non è mai biasimabile... anzi!
A questo aggiungiamo che raramente puoi usare «fish» e «rsync»: pertanto, la strada da me percorsa ha, davvero, una marcia in più!
Come sempre, questa pagina è un promemoria per me stesso (così faccio copia/incolla dai miei stessi comandi) e risparmio tempo se dovessi, un giorno, ripetere l'esperienza... E, alla fine, resta la segreta speranza di essere stato utile a qualcuno: anche solo a fargli nascere un'idea di far qualcosa da sé, riciclando