Questo post è stato ampiamente discusso su Hacker News.
Alex Buznik, nas.net.ua gentilmente fornito una traduzione in russo in due parti: part1 e part2.
Questo post discute considerazioni hardware, l’installazione di Linux, la creazione di RAID software, robustezza e trattare con la corruzione dei dati.,
Ho eseguito per un decennio un NAS auto-costruito a casa, quindi ho pensato di scrivere la mia esperienza in modo che gli altri potessero gongolare sui miei molti fallimenti e ansimare per i miei pochi trionfi.
Il NAS è perfetto perché è semplice, sicuro, modulare ed estensibile ed è a buon mercato, perché è costruito di seconda mano, materie prime parti.,
Il NAS memorizza principalmente i file (documenti e supporti) su un RAID software 6 e li serve su condivisioni Windows alla rete locale. Mi sto allontanando dalle soluzioni NAS proprietarie perché un errore hardware renderebbe il recupero dei dati difficile da impossibile senza la stessa identica sostituzione dell’hardware. Ogni pezzo di hardware, dai dischi rigidi al caso e la scheda madre sono stati commutati fuori per qualcos’altro in questo decennio, a volte più di una volta, così l’attenzione sulla modularità pagato per se stesso., Poiché l’integrità e la robustezza dei dati a lungo termine sono un problema, il NAS dovrebbe eseguire una sorta di livello RAID ridondante.,
Obiettivi
Obiettivo | Descrizione | Soluzione |
Funzione | Il NAS serve come un network attached file di sistema per uso domestico; il NAS funziona un paio di ore al giorno ed è spento o in standby la maggior parte del tempo | hardware, software open source, modularità, mantenere le cose semplici |
Interoperabilità | Comunemente utilizzato le piattaforme di computer dovrebbe essere in grado di accedere ai file sul NAS. L’hardware Commodity dovrebbe essere in grado di connettersi al NAS., | Samba (aka azioni di Windows) su Ubuntu, USB, SATA. Collegare LAN al router Wifi, fa nome risoluzione e time server. Accesso e gestione con SSH. |
Modularità | componenti Hardware e software dovrebbero essere intercambiabili senza dover riprogettare l’intero sistema | x86 piattaforma PC, Linux, Mobile |
di Controllo | voglio controllare che il software è installato sul NAS e cosa fa | Ubuntu 18.,04 LTS |
Integrità dei dati | File di dimensioni arbitrarie (entro limiti ragionevoli) e contenuti devono essere memorizzati sul NAS e non corrodere o perdere l’integrità nel tempo | RAID 6 con 4 dischi rigidi, ext4fs con checksumming, scrubbing, RAID assemblato manualmente, ECC RAM. Firma archivi con par2., |
Rumore | Rumore deve essere bassa e tollerabile | Hdd in modalità di attesa, SSD come primario OS disco, scrittura, soprattutto, un sacco di RAM, raffreddamento passivo |
Costo | Utilizzare hardware e software open source e gratuito | 2 ° mano commodity hardware, hard disk invece di Ssd |
Bassa manutenzione | Evitare tempi di manutenzione critiche | firewall ufw accettare connessioni solo da rete interna, non si auto-aggiorna, solo il software, Mobile, non accessibile da Internet., |
Compact | Fisico NAS dimensioni dovrebbero essere di piccole dimensioni; senza spazio sprecato | 2 ° mano di HP proliant microsever gen8 |
Non obiettivi
- Tipico dei media-server compiti: streaming, la codifica, la transcodifica ecc
- Bitcoin mining
- l’esecuzione dei torrent
- Tutto il resto 🙂
Ottenere l’Hardware
Ottenere il giusto hardware è l’hard-(pun)-parte est in quanto è la piattaforma per la modularità, il prezzo, il consumo di energia, le dimensioni e tanti altri obiettivi che mi interessa., Ci sono molti server NAS proprietari di seconda mano, economici in giro, ma non mi piace l’idea di sistemi hardware e software chiusi. Ad esempio, se un controller RAID hardware memorizza i dati in un formato proprietario sui dischi rigidi, avrei bisogno dello stesso controller sostitutivo per recuperare i dati in caso di guasto del controller.
Anche lo spazio è un problema, quindi il server dovrebbe essere compatto pur consentendo l’esecuzione di Linux su di esso; questo è abbastanza difficile da trovare poiché la maggior parte dei NAS compatti esistono sistemi proprietari e non consentono l’installazione del proprio sistema operativo., Ci sono molti PC e server x86 usati, ma sono per lo più troppo grandi o non hanno abbastanza alloggiamenti per unità o porte SATA. Anche il collegamento delle unità tramite USB non è un’opzione a causa della bassa velocità, del consumo energetico più elevato e dei requisiti di spazio. Il primo paio di mie revisioni NAS intorno 2010 utilizzato un barebone compatto e poi un caso mini torre intorno al quale aveva 3 o 4 alloggiamenti per dischi rigidi, ma trovo quei formati box più difficili da trovare in questi giorni. Fortunato se si ottiene uno ad un prezzo accessibile!
Mi sono imbattuto in un microserver HP proliant gen8 usato e da allora non me ne sono pentito., Il modello base è venuto con 2GB ECC RAM, una CPU Celeron 2-core e nessun disco rigido per circa 100€. C’è un’eccellente recensione di quel server su Louwrentius. Il server è estremamente compatto (circa 26cm ogni dimensione), ragionevolmente a basso rumore (anche se non silenzioso) in standby, ha una CPU raffreddata passivamente, due porte ethernet GBit, quattro 3,5″ alloggiamenti per dischi rigidi e uno slot formato proprietario un po ‘nascosto per un quinto basso profilo 2,5″ disco che uso per uno SSD., Gli alloggiamenti delle unità possono ricevere direttamente dischi SATA mentre lo slot 5 richiede un adattatore FDD maschio-SATA a 4 pin e un cavo SATA per collegare un SSD 2,5 ” alla scheda madre. Come bonus aggiuntivo, il server dispone diLO che consente l’accesso remoto al server con un browser web-quindi non c’è bisogno di una tastiera o uno schermo!
Ammetto che il server non è al 100% parti di materie prime; ad es. un errore della scheda madre o della CPU richiederebbe l’ordinazione degli stessi pezzi di ricambio (che probabilmente sarà costoso) o la costruzione di un server completamente nuovo su una piattaforma diversa., Tuttavia RAM, rete e storage sono abbastanza standard, eseguo Ubuntu su di esso e i benefici delineati in precedenza pesano abbastanza da correre questo rischio. Circa 6 anni dopo il server funziona ancora senza problemi; salvo pregiudizio sopravvissuto, penso che l’approccio abbia funzionato bene.
Il server che ho acquistato aveva firmware da 2014 e HP per fortuna ha iniziato a pubblicare aggiornamenti gratuitamente di recente, l’ultimo da fine 2019 con cui ho fatto lampeggiare il microserver per un’interfaccia utente di gestione HTML5 slick.,
Il server ha subito vari aggiornamenti nel corso degli anni; da un array RAID5 di tre dischi rigidi da 2 TB all’attuale configurazione di 3x6TB + 1x8TB + 1x 512MB SSD e un aggiornamento della CPU a un modello Xeon e un aggiornamento della RAM a 16GB ECC., Ho quasi esclusivamente riutilizzare i dischi rigidi esterni USB (dopo l’apertura , estrarre l’HDD e baciare la garanzia addio) che sono più convenienti rispetto a quelli interni… in un primo momento che è sorprendente considerando l’hardware aggiuntivo (caso, USB-to-SATA adattatore, cavi, alimentatore) sono dotati; tuttavia la garanzia e specifiche tecniche sono significativamente inferiori a quelli delle unità interne che spiega la differenza di prezzo. Dal momento che il server esegue un RAID 6 (l’intero punto di cui è sopravvivere ai guasti del disco) penso che sia un rischio ok da correre.,
Il server è collegato tramite un cavo Ethernet al router Wifi di casa; velocità di rete sono vicino a 100 mb/s che è ok, le porte USB3 può fare circa 40 mb/s.
Installazione
LO rende la configurazione del server facile anche senza una tastiera fisica e lo schermo. Ho iniziato con Ubuntu server LTS 14.04, passato a 16.04 e attualmente sto eseguendo 18.04. Gli aggiornamenti non hanno mai funzionato, in ogni caso è stata richiesta una nuova installazione.
Ti consiglio di installare una VM (come VirtualBox) sulla tua workstation, avviando Ubuntu Server 18.,04 da un’immagine dal vivo e l’installazione di Ubuntu su un hard disk USB. Non sono riuscito a far avviare il microserver Proliant con UEFI, quindi è necessaria un’installazione del BIOS grub tradizionale.
I quattro dischi rigidi sono partizionati secondo lo schema seguente: una partizione da 1 MB all’inizio per il boot loader GRUB, una partizione da 50 GB per Ubuntu e una partizione da 5,5 TB per il RAID.
Ho usato il programma di installazione alternativo di Ubuntu Server 18.04 per impostare le partizioni di Ubuntu come RAID 1 che rispecchia quella partizione su tutti i dischi rigidi., Il programma di installazione è in grado di installare Ubuntu in quel RAID 1 e GRUB è in grado di avviare da esso. In caso di guasto del disco rigido, la semplice rimozione del disco rigido consentirà al server di riavviarsi.
+-------------------+| 1MB bios_grub || |+-------------------+| 50GB Ubuntu ext4 || RAID 1 |+-------------------+| 5.5TB Data || RAID 6 |+-------------------+
Affinché l’installatore funzioni, devono esserci almeno due dischi nel RAID. Più dischi possono essere aggiunti in seguito. Assicurati di installare il bootloader GRUB su tutti i dischi con:
grub-install /dev/sdX
Nei miei primi esperimenti Ubuntu è stato in grado di avviarsi bene, ma non avrebbe attivato le schede ethernet. Ciò richiede un po ‘ di giocherellare con netplan.
/etc/netplan / 01-netcfg.,yaml
network: version: 2 ethernets: eno1: dhcp4: true dhcp6: true optional: true eno2: dhcp4: true dhcp6: true optional: true
Considerazioni sul RAID di avvio
Come discusso in “installazione”, Ubuntu si avvia da un RAID 1. md rispecchia le modifiche a tutte le partizioni di avvio, il che è fantastico. Il RAID di avvio è mappato in / dev / md0-Non ho trovato un modo per assegnare un nome ad esso, ma ho trovato il nome del dispositivo per essere stabile. Sfortunatamente Ubuntu accederà costantemente all’unità di avvio durante il normale funzionamento, il che nel mio caso significa che quattro unità girano sempre., Ho provato varie cose come rimappare le directory di log su un disco ram e pre-caricare i file, ma la giungla risultante di script è impossibile da mantenere. La soluzione si è rivelata abbastanza semplice ed elegante, dopo un hack: ho installato un SSD nel 5 ° alloggiamento del disco rigido e l’ho aggiunto al RAID di avvio 1. Mentre il mirroring ha funzionato, il BIOS Proliant (gen8) non si avvia dal 5 ° bay se trova dischi rigidi da qualche altra parte., La soluzione è uno script che viene eseguito dopo l’avvio e fallisce tutti i dischi rigidi meccanici nel RAID:
mdadm --manage /dev/md0 --fail /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2
Lo script è un po ‘ più complesso di quello in quanto i nomi dei dispositivi non sono stabili e varie condizioni di errore devono essere prese in considerazione (ad es. il RAID non dovrebbe essere toccato se un disco rigido sta fallendo) – ma questo è un argomento per un post diverso. MD dimenticherà che i dischi sono stati contrassegnati come falliti dopo un riavvio, che è un valore predefinito utile, in quanto consente al server di avviarsi da qualsiasi disco rigido disponibile.,
Importante: Come ho scritto in precedenza, molto raramente aggiorno il software sul server, ma le poche volte che è necessario un aggiornamento, gli hard disk mancanti devono essere reinseriti nel RAID in modo che gli aggiornamenti siano rispecchiati su tutte le partizioni di avvio.
Considerazioni RAID dati
Il secondo RAID software in esecuzione sul server è anche quello importante: il RAID dati., Le mie esigenze di archiviazione hanno storicamente gareggiato con i progressi della tecnologia di archiviazione, quindi il RAID dei dati ha subito tutti i tipi di trasformazioni a partire da un RAID a doppio disco 1 a un RAID a 3 dischi 5 a un RAID a 3 dischi 1 a un RAID a 4 dischi 6 dove è attualmente.
RAID 1 è imho la soluzione migliore se te lo puoi permettere; è il più semplice da gestire, offre il massimo livello di coerenza e disponibilità dei dati, le migliori prestazioni ed è, come piacevole effetto collaterale, anche il più silenzioso da utilizzare grazie alla modalità write mostly che consente di far girare tutti tranne un disco quando i dati vengono letti solo, Purtroppo, le mie esigenze di dati superano quello che posso fare con un RAID 1.
RAID 5 è un buon compromesso tra ridondanza ed efficienza di archiviazione, quindi ho gestito il RAID dati per molti anni in quella modalità. Tuttavia la configurazione è un po ‘ rischiosa, come dimostra un esperimento: immagina un disco rigido che si rompe improvvisamente nel cuore della notte. Nel momento in cui noto l’errore, procurare una sostituzione e installarlo almeno 2 giorni sono passati, più un altro 12 ore per una risincronizzazione completa., Così l’array rimane degradato e non protetto per 2,5 giorni – qualsiasi ulteriore guasto in quel lasso di tempo distrugge tutti i dati irrevocabilmente.
RAID 6 è attualmente il livello di scelta per il mio caso d’uso: offre metà della capacità totale a due volte la disponibilità, essendo in grado di sopravvivere a un doppio errore del disco. L’unico inconveniente è che la modalità “write mostly” di mdadm non funziona, quindi qualsiasi accesso al RAID richiede quattro dischi attivi ed è piuttosto rumoroso.
Durante la creazione del RAID con mdadm mi sono assicurato di assegnargli un nome, quindi ora è mappato sotto /dev/md/data.,
Al fine di aumentare la coerenza dei dati, ho il NAS eseguire uno script che scrubs il RAID di dati. Si tratta di un processo di lunga durata, I/O intenso e rumoroso che mantiene i dischi occupati e probabilmente dovrebbe essere eseguito quando il NAS non è necessario; per un NAS domestico che è nei giorni feriali durante le ore di ufficio. Cron è tuo amico.
Una nota sul partizionamento: è possibile utilizzare dispositivi raw (/dev /sdb,/dev / sdc…) senza partizioni, ma non è raccomandato., Avere partizioni (con etichette come RAID_1) assicura che in caso di ricostruzione o scambio di dischi l’unità non sia installata accidentalmente in un computer diverso e che i dati non vengano sovrascritti (un’unità non partizionata apparirà sempre senza dati e quindi “sicura” per la formattazione).
Crittografia RAID
Il passo successivo è impostare la crittografia per il RAID dati. Ho usato dmcrypt LUKS per questo, memorizzando la chiave su una chiavetta USB. Assicurati di eseguire il backup sia della chiave che dell’intestazione LUKS, altrimenti i dati non saranno accessibili in caso di intestazione danneggiata., Il vantaggio della crittografia è che posso spostare il server senza il timore del furto di dati, a patto che il RAID crittografato e la chiave vengano trasportati su percorsi diversi.,
I dati crittografati RAID è un dispositivo di blocco mappata /dev/mapper/dati
Il filesystem
I file di sistema di scelta è ext4 con un paio di modifiche:
mkfs.ext4 -O metadata_csum -E lazy_itable_init=0,lazy_journal_init=0 /dev/mapper/data
Queste opzioni consentono di metadati di checksum che aumenta la coerenza dei dati e disattivare pigro inizializzazione; quest’ultimo è particolarmente importante per una matrice di grandi dimensioni con dischi meccanici come inode inizializzazione vorranno diversi giorni, altrimenti.
Nello spirito della modularizzazione il RAID dei dati non è montato in /etc/fstab, ma invece montato con uno script e mdadm durante l’avvio., Questo script monta anche il file system RAID dati con le opzioni noatime, nodiratime e data=journal, esegue fsck prima di montarlo, regola il stripe_cache_size e tweaks power management.
Si noti inoltre che per i file system ext4 di grandi dimensioni, il primo accesso in scrittura può richiedere molto tempo, quindi dai un’occhiata a questa soluzione.
La CPU Celeron di Proliant divenne un collo di bottiglia con dmcrypt poiché mancava di crittografia assistita dall’hardware, ma un aggiornamento economico a un Xeon E3-1220L per lo stesso socket lo risolse dimezzando anche il TDP a 17 Watt.,
Aggiornamento settembre 2020: non ricordo se questo è sempre stato il caso o ha iniziato a verificarsi dopo un aggiornamento, ma i dischi rigidi RAID dei dati non si abbasseranno mai anche se inattivi. Il motivo è la protezione multi mount di ext4 che scrive costantemente sul filesystem. La protezione a montaggio multiplo può essere ottimizzata o disabilitata (è quello che ho fatto) con tune2fs.
Più sicurezza dei dati!
Nel 2020 ext4 e md non sono, purtroppo, ancora in grado di contrastare efficacemente il bit rot che corrompe silenziosamente i file., Sento e leggo testimonianze contrastanti su ZFS che presumibilmente gestisce meglio la corruzione dei dati e farà un tentativo ad un certo punto. Per ora, uso md5sum per creare e verificare i checksum del mio backup .impeciare.gz archives e parchive per creare file di recupero di errore. Ho scritto su parchive prima e rimanere fino ad oggi un fan dedicato.
Automazione
Ho menzionato “script” inquietanti qua e là, ma la brutta verità rimane che l’attuale configurazione richiede una notevole quantità di scripting per funzionare senza intoppi., Il lato positivo, la maggior parte del funzionamento giorno per giorno è ora script e automatizzato, richiesto nessun intervento manuale: raid assemblare da soli, sono fault tolerant e il server funziona anche quando uno o due dischi rigidi si rompono. I backup vengono archiviati e checksummed automaticamente e un controllo periodico avvisa sui file danneggiati che poi manualmente (mi piace essere coinvolto in queste cose correct) corretto. Alcuni degli script del server sono disponibili sul mio repository github, altri seguiranno presto.,
Rete
Il server utilizza i seguenti componenti di rete:
- netplan per gestire i due a bordo di schede ethernet (vedi installazione)
- UFW per bloccare tutto il traffico in entrata, ma SSH, samba e netbios
- netbios per annunciare il nome del server al router di casa e gli altri computer
- samba per la condivisione di file in rete locale
sto usando samba in modalità di sola lettura; un paio di directory (come musica e film) sono condivisi con accesso guest, un paio di altre cartelle con i documenti personali sono protetti da password, ma di nuovo sola lettura., Qualsiasi operazione di scrittura nel file system dei dati richiede l’accesso SSH. Dal momento che ext4 non offre istantanee, sono ancora preoccupato per quel “cancella per errore” dopo la mezzanotte dopo un paio di drink; Non ho ancora trovato una buona soluzione per questo. Browsing azioni samba in Ubuntu nautilus può essere lento per le directory di grandi dimensioni – se diventa troppo da gestire, considerare l’utilizzo di CIFS o sshfs.,
Video & Graphics
Non ho mai pensato di averne bisogno, ma alla fine è arrivato il giorno in cui avevo bisogno di collegare uno schermo fisico e una tastiera al gen8 – e non potevo far funzionare un ambiente desktop. Il gen8 ha una scheda grafica Matrox g200 per la quale Ubuntu ha abbandonato il supporto molto tempo fa, ma c’è un modo per ottenere alcuni elementi grafici fuori di esso.
Primo passo: installa il supporto desktop sull’ambiente server:
apt install ubuntu-desktop
Dopo il riavvio noterai una schermata di accesso 640×480. Non ci sono altre modalità disponibili nelle impostazioni di visualizzazione., Questo commento su un problema correlato ha aiutato:
# Install vesa xserver. Was not needed in my case.apt-get install xserver-xorg-video-vesa # Boot into text modeinit 3 # Create new X-server configurationX -configure # Install configuration. The original post says to replace mga with vesa; in my case, vesa was already pre-filled.mv xorg.conf.new /etc/X11/xorg.conf# Boot into graphicsinit 5
Giusto avviso: l’accelerazione grafica non è disponibile e la risoluzione massima è 1280×1024.
Fatto divertente che ho scoperto durante la ricerca: il gen8 ha un connettore DisplayPort non standard nella parte anteriore dietro la porta.