Assemblaggio di un economico sistema NAS domestico su Linux

Assemblaggio di un economico sistema NAS domestico su Linux

Come molti altri utenti di MacBook Pro, ho avuto a che fare con il problema della mancanza di spazio di archiviazione. Per essere più precisi, il mio rMBP, utilizzato quotidianamente, era dotato di un SSD da soli 256 GB, il che, naturalmente, non era sufficiente a lungo termine.

E quando ho iniziato a registrare video durante i miei voli, la situazione è ulteriormente peggiorata. Lo spazio occupato dai materiali registrati dopo tali voli superava i 50+ GB, e il mio sfortunato SSD da 256 GB si è riempito molto rapidamente, costringendomi a comprare un disco esterno da 1 TB. Tuttavia, dopo un anno, anche questo ha smesso di essere sufficiente per gestire il volume di dati che producevo, senza contare che la mancanza di ridondanza e backup lo rendeva inadeguato per conservare informazioni importanti.

Così, a un certo punto, ho deciso di assemblare un NAS di grande capacità nella speranza che questo sistema potesse durare almeno un paio d'anni senza richiedere un nuovo aggiornamento.

Ho scritto quest'articolo prima di tutto come promemoria di cosa e come ho fatto nel caso avessi bisogno di ripetere il processo. Spero che anche per voi sia utile, se decidete di fare altrettanto.

Non sarebbe più semplice comprare?

Quindi, sappiamo cosa vogliamo, resta da chiedersi come fare?

Inizialmente mi sono informato sulle soluzioni commerciali, in particolare sulla compagnia Synology, nota per fornire i migliori sistemi NAS consumer sul mercato. Tuttavia, il costo di questo servizio si è rivelato piuttosto elevato. Il sistema più economico con 4 alloggiamenti costa oltre $300, e i dischi rigidi non sono inclusi. Inoltre, l'hardware stesso di tale set non era particolarmente impressionante, il che mette in discussione le sue reali prestazioni.

Allora ho pensato: perché non assemblare un NAS da solo?

Ricerca del server giusto

Se intendi assemblare un server del genere, la prima cosa da fare è trovare l'hardware giusto. Per questa configurazione, un server usato dovrebbe andare bene, poiché per i compiti di archiviazione non è necessaria una prestazione eccezionale. Tra le specifiche necessarie, è importante avere una grande quantità di RAM, diversi connettori SATA e buone schede di rete. Poiché il mio server funzionerà nel luogo in cui risiedo, anche il livello di rumore è importante.

Ho iniziato la mia ricerca su eBay. Anche se ho trovato molti Dell PowerEdge R410/R210 usati a meno di $100, avendo esperienza in sale server, sapevo che questi modelli 1U producono troppo rumore e non sono adatti per l'uso domestico. Di solito, i server in formato tower tendono a essere più silenziosi, ma sfortunatamente ce ne erano pochi su eBay, e tutti erano o troppo costosi o poco potenti.

Il posto successivo dove cercare è stato Craigslist, dove ho trovato una persona che vendeva un HP ProLiant N40L usato per soli $75! Conoscevo questi server, che anche usati di solito costano intorno ai $300, quindi ho inviato un'email al venditore sperando che l'annuncio fosse ancora valido. Scoprendo che così era, sono andato a San Mateo per ritirare questo server, che a prima vista mi ha subito soddisfatto. Era in ottime condizioni, con un minimo di usura e, a parte un po' di polvere, tutto il resto era perfetto.

Assemblaggio di un economico sistema NAS domestico su Linux
Foto del server subito dopo l'acquisto

Ecco le specifiche del set che ho acquistato:

  • CPU: AMD Turion(tm) II Neo N40L Dual-Core Processor (64-bit)
  • RAM: 8 GB di RAM non-ECC (installata dal proprietario precedente)
  • Flash: 4 GB di unità USB
  • Connettori SATA: 4 + 1
  • NIC: NIC on-board da 1 Gbps

Non c'è bisogno di dire che, nonostante l'età di alcuni anni, le specifiche di questo server superano comunque la maggior parte delle opzioni di sistemi NAS disponibili sul mercato, soprattutto per quanto riguarda la RAM. Poco dopo ho persino eseguito un upgrade a 16 GB ECC con un buffer maggiore e una protezione dati migliorata.

Scelta dei dischi rigidi

Ora abbiamo un sistema funzionante eccezionale e dobbiamo solo trovare i dischi rigidi giusti. È ovvio che per quei $75 ho ricevuto solo il server senza HDD, e questo non mi ha sorpreso.

Dopo aver effettuato una piccola ricerca, ho scoperto che per lavorare con sistemi NAS in modalità 24/7, i migliori HDD sono i WD Red. Per acquistarli, mi sono rivolto ad Amazon, dove ho comprato 4 unità da 3 TB ciascuna. In sostanza, puoi collegare qualsiasi HDD a tua scelta, ma assicurati che siano di capacità e velocità identiche. Questo ti aiuterà a evitare problemi di prestazioni con il RAID in futuro.

Configurazione del sistema

Penso che molti utilizzeranno un sistema per le proprie assemblaggi NAS. FreeNAS, e non c'è nulla di male in questo. Tuttavia, nonostante la possibilità di installare questo sistema sul proprio server, ho preferito usare CentOS, poiché ZFS on Linux è inizialmente configurato per ambienti di produzione, e in generale la gestione di server Linux mi è più familiare. Inoltre, non ero interessato all'interfaccia alla moda e alle funzionalità fornite da FreeNAS: mi bastava un'array RAIDZ e la condivisione AFP.

Installare CentOS su USB è piuttosto semplice: basta selezionare la USB come sorgente di avvio, e all'avvio, la procedura guidata di installazione ti guiderà attraverso tutti i suoi passaggi.

Costruzione RAID

Dopo aver installato con successo CentOS, ho anche installato ZFS on Linux seguendo i passaggi elencati qui.

Una volta completato questo processo, ho caricato il modulo ZFS Kernel:

$ sudo modprobe zfs

E ho creato un array RAIDZ1 usando il comando zpool:

$ sudo zpool create data raidz1 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609145 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609146 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609147 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609148
$ sudo zpool add data log ata-SanDisk_Ultra_II_240GB_174204A06001-part5
$ sudo zpool add data cache ata-SanDisk_Ultra_II_240GB_174204A06001-part6

Nota che qui utilizzo gli ID dei dischi rigidi invece dei loro nomi visualizzati (sdx), per ridurre la possibilità di errore nel loro montaggio dopo il riavvio a causa del cambiamento della lettera di identificazione.

Ho anche aggiunto ZIL e una cache L2ARC, eseguendo su un SSD separato, suddividendo questo SSD in due partizioni: 5GB per ZIL e il resto per L2ARC.

Per quanto riguarda RAIDZ1, può sopportare il guasto di 1 disco. Molti affermano che questo tipo di pool non dovrebbe essere utilizzato a causa della probabilità di guasto di un secondo disco durante la ricostruzione RAID, il che è rischioso per la perdita di dati. Io, d'altra parte, ho ignorato questo consiglio, poiché facevo regolarmente backup dei dati importanti su un dispositivo remoto, e il guasto di un array intero potrebbe influenzare solo la disponibilità dei dati, ma non la loro integrità. Se non hai possibilità di fare backup, è meglio utilizzare soluzioni come RAIDZ2 o RAID10.

Per verificare il successo della creazione del pool, puoi eseguire:

$ sudo zpool status

e

$ sudo zfs list
NAME                               USED  AVAIL  REFER  MOUNTPOINT
data                               510G  7.16T   140K  /mnt/data

Per impostazione predefinita, ZFS monta il pool appena creato direttamente in /, il che di solito è indesiderato. Puoi modificare ciò eseguendo:

zfs set mountpoint=/mnt/data data

Da qui, puoi scegliere di creare uno o più dataset per l'archiviazione dei dati. Ne ho creati due, uno per il backup di Time Machine e l'altro per la condivisione di file. Ho limitato il volume del dataset di Time Machine a 512 GB per prevenire una crescita infinita.

Ottimizzazione

zfs set compression=on data

Questo comando abilita la supporto per la compressione ZFS. La compressione utilizza una minima potenza della CPU, ma può migliorare notevolmente la larghezza di banda I/O, quindi è sempre consigliata.

zfs set relatime=on data

Con questo comando riduciamo il numero di aggiornamenti a atime, per ridurre la generazione di IOPS durante l'accesso ai file.

Per impostazione predefinita, ZFS on Linux utilizza il 50% della memoria fisica per ARC. Nel mio caso, dato che il numero totale di file è piuttosto limitato, questo importo può essere tranquillamente aumentato al 90%, poiché altre applicazioni non verranno eseguite sul server.

$ cat /etc/modprobe.d/zfs.conf 
options zfs zfs_arc_max=14378074112

Poi, usando arc_summary.py , puoi verificare che le modifiche siano effettive:

$ python arc_summary.py
...
ARC Size:				100.05%	11.55	GiB
	Target Size: (Adaptive)		100.00%	11.54	GiB
	Min Size (Hard Limit):		0.27%	32.00	MiB
	Max Size (High Water):		369:1	11.54	GiB
...

Impostazione di attività ripetitive

Ho usato systemd-zpool-scrub per impostare timer systemd per eseguire la manutenzione settimanale e zfs-auto-snapshot per la creazione automatica di snapshot ogni 15 minuti, 1 ora e 1 giorno.

Installazione di Netatalk

Netatalk è un'implementazione open source di AFP (Apple Filing Protocol). Seguendo le istruzioni ufficiali di installazione per CentOS, ho ottenuto un pacchetto RPM compilato e installato in pochi minuti.

Impostazione della configurazione

$ cat /etc/netatalk/afp.conf
[datong@Titan ~]$ cat /etc/netatalk/afp.conf 
;
; File di configurazione Netatalk 3.x
;

[Global]
; Impostazioni globali del server
mimic model = TimeCapsule6,106

; [Homes]
; regex base = /home

; [Il mio volume AFP]
; path = /path/to/volume

; [Il mio volume Time Machine]
; path = /path/to/backup
; time machine = yes

[I file di Datong]
path = /mnt/data/datong
valid users = datong

[I backup di Time Machine di Datong]
path = /mnt/data/datong_time_machine_backups
time machine = yes
valid users = datong

Nota che vol dbnest è per me un miglioramento significativo, poiché per impostazione predefinita Netatalk scrive il database CNID nella radice del filesystem, cosa assolutamente indesiderabile, poiché il mio filesystem principale opera su USB e quindi lavora relativamente lentamente. Abilitando vol dbnest si ottiene la conservazione del database nella radice del Volume, che in questo caso si riferisce al pool ZFS ed è già significativamente più veloce.

Abilitazione delle porte nel Firewall

$ sudo firewall-cmd --permanent --zone=public --add-service=mdns
$ sudo firewall-cmd --permanent --zone=public --add-port=afpovertcp/tcp

sudo firewall-cmd —permanent —zone=public —add-port=afpovertcp/tcp
Se tutto è stato configurato correttamente, il tuo computer dovrebbe apparire in Finder e Time Machine dovrebbe funzionare correttamente.

Impostazioni aggiuntive
Monitoraggio S.M.A.R.T

È consigliabile monitorare lo stato dei tuoi dischi per prevenire guasti.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Demon per UPS

Monitora la carica dell'UPS APC e spegne il sistema quando la carica diventa criticamente bassa.

$ sudo yum install epel-release
$ sudo yum install apcupsd
$ sudo systemctl enable apcupsd

Aggiornamento hardware

Dopo una settimana dalla configurazione del sistema, ho iniziato a preoccuparmi sempre di più del fatto che nel server fosse installata della RAM senza ECC. Inoltre, nel caso di ZFS, ulteriore RAM per la cache sarebbe molto utile. Così sono tornato su Amazon, dove ho acquistato 2x Kingston DDR3 8GB ECC RAM a $80 ciascuna e ho sostituito la RAM desktop installata dal precedente proprietario. Il sistema si è avviato correttamente al primo tentativo e ho verificato che il supporto ECC fosse attivato:

$ dmesg | grep ECC
[   10.492367] EDAC amd64: DRAM ECC abilitato.

Risultato

Il risultato mi ha molto soddisfatto. Ora posso caricare continuamente una connessione LAN da 1Gbps sul server copiando file, e Time Machine funziona senza intoppi. In generale, sono soddisfatto della configurazione.

Costo totale:

  1. 1 * HP ProLiant N40L = $75
  2. 2 * 8 GB ECC RAM = $174
  3. 4 * WD Red 3 TB HDD = $440

Totale = $689

Ora posso dire che ne è valso la pena.

Costruisci tu stesso server NAS?

Assemblaggio di un economico sistema NAS domestico su Linux

Assemblaggio di un economico sistema NAS domestico su Linux

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster