Costruire un sistema NAS domestico Linux economico

Costruire un sistema NAS domestico Linux economico

Come molti altri utenti di MacBook Pro, ho dovuto affrontare il problema della memoria interna insufficiente. Per essere più precisi, l'rMBP che ho utilizzato quotidianamente era dotato di un SSD di soli 256 GB, che ovviamente non è stato sufficiente per molto tempo.

E quando ho iniziato a registrare video durante i miei voli, la situazione non ha fatto altro che peggiorare. Il volume delle riprese dopo tali voli era di oltre 50 GB e il mio sfortunato SSD da 256 GB si è riempito molto presto, costringendomi ad acquistare un'unità esterna da 1 TB. Tuttavia, dopo un anno, non riusciva a tenere il passo con i volumi di dati che stavo generando, per non parlare della mancanza di ridondanza e di backup che lo rendevano inadatto a ospitare informazioni importanti.

Quindi, a un certo punto, ho deciso di costruire un NAS di grande capacità nella speranza che questo sistema durasse almeno un paio d'anni senza richiedere un altro aggiornamento.

Ho scritto questo articolo principalmente per ricordare esattamente cosa e come ho fatto nel caso avessi bisogno di farlo di nuovo. Spero che ti sarà utile se deciderai di fare lo stesso.

Forse è più facile acquistare?

Quindi, sappiamo cosa vogliamo ottenere, la domanda rimane: come?

Per prima cosa ho esaminato le soluzioni commerciali e ho guardato in particolare a Synology, che avrebbe dovuto fornire i migliori sistemi NAS di livello consumer sul mercato. Tuttavia, il costo di questo servizio era piuttosto elevato. Il sistema a 4 alloggiamenti più economico costa oltre 300 dollari e non include i dischi rigidi. Inoltre, il riempimento interno di un kit del genere non è particolarmente impressionante, il che mette in discussione le sue reali prestazioni.

Poi ho pensato: perché non costruire tu stesso un server NAS?

Trovare il server giusto

Se hai intenzione di completare un server del genere, prima di tutto devi trovare l'hardware giusto. Un server usato dovrebbe andare bene per questa build, poiché non abbiamo bisogno di molte prestazioni per le attività di archiviazione. Tra i necessari, va notato una grande quantità di RAM, diversi connettori SATA e buone schede di rete. Poiché il mio server funzionerà nel mio luogo di residenza permanente, anche il livello di rumore è importante.

Ho iniziato la mia ricerca su eBay. Anche se lì ho trovato molti Dell PowerEdge R410/R210 usati a meno di $ 100, avendo lavorato in una sala server, sapevo che queste unità 1U erano troppo rumorose e non adatte all'uso domestico. Di norma, i server tower sono spesso meno rumorosi, ma sfortunatamente ce n'erano pochi elencati su eBay ed erano tutti costosi o poco potenti.

Il posto successivo in cui cercare è stato Craiglist, dove ho trovato un uomo che vendeva un HP ProLiant N40L usato per soli $ 75! Conoscevo questi server, che di solito costano circa $ 300 anche usati, quindi ho inviato un'e-mail al venditore sperando che l'elenco fosse ancora attivo. Avendo saputo che è così, senza pensarci due volte, sono andato a San Mateo a ritirare questo server, che già a prima vista mi ha decisamente soddisfatto. Aveva un'usura minima e, a parte un po' di polvere, tutto il resto era fantastico.

Costruire un sistema NAS domestico Linux economico
Foto del server, subito dopo l'acquisto

Ed ecco le specifiche del kit che ho acquistato:

  • CPU: Processore AMD Turion(tm) II Neo N40L dual-core (64 bit)
  • RAM: 8 GB di RAM non ECC (installata dal proprietario precedente)
  • Cromatografia: unità USB da 4 GB
  • Connettori SATA: 4 + 1
  • NIC: Scheda di rete integrata da 1 Gbps

Inutile dire che, nonostante siano vecchie di diversi anni, le specifiche di questo server surclassano ancora la maggior parte delle opzioni NAS sul mercato, soprattutto in termini di RAM. Poco dopo sono addirittura passato a 16 GB ECC con più spazio buffer e una migliore protezione dei dati.

Selezione dei dischi rigidi

Ora disponiamo di un eccellente sistema di lavoro e resta da scegliere i dischi rigidi per questo. Ovviamente, per quei 75 dollari ho ottenuto solo il server stesso senza l'HDD, il che non mi ha sorpreso.

Dopo aver fatto un po' di ricerche, ho scoperto che le unità NAS 24 ore su 7, 4 giorni su 3, sono più adatte per gli HDD WD Red. Per acquistarli mi sono rivolto ad Amazon, dove ho acquistato XNUMX copie da XNUMX TB ciascuna. In effetti, puoi collegare qualsiasi HDD preferito, ma assicurati che abbiano le stesse dimensioni e velocità. Ciò ti aiuterà a evitare potenziali problemi di prestazioni RAID nel lungo periodo.

Configurazione di sistema

Penso che molti utilizzeranno il sistema per le loro build NAS. FreeNAS, e non c'è niente di sbagliato in questo. Tuttavia, nonostante la possibilità di installare questo sistema sul mio server, ho preferito utilizzare CentOS, poiché il sistema ZFS su Linux è inizialmente predisposto per un ambiente di produzione, e in generale ho più dimestichezza con la gestione di un server Linux. Inoltre, non ero interessato all'interfaccia elegante e alle funzionalità fornite da FreeNAS: ero soddisfatto dell'array RAIDZ e della condivisione AFP.

Installare CentOS su USB è abbastanza semplice: basta specificare USB come sorgente di avvio e quando avvii la procedura guidata di installazione ti guiderà attraverso tutti i passaggi.

Assemblaggio RAID

Dopo aver installato con successo CentOS, ho installato anche ZFS su Linux seguendo quanto elencato ecco i passaggi.

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

$ sudo modprobe zfs

E ho creato un array RAIDZ1 utilizzando 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

Tieni presente che qui sto utilizzando gli ID del disco rigido invece dei nomi visualizzati (sdx) per ridurre la possibilità che non riescano a montarsi dopo l'avvio a causa di un cambio di lettera.

Ho anche aggiunto la cache ZIL e L2ARC in esecuzione su un SSD separato, dividendo questo SSD in due partizioni: 5 GB per ZIL e il resto per L2ARC.

Per quanto riguarda RAIDZ1, può sopportare il guasto di 1 disco. Molti sostengono che questa opzione di pooling non dovrebbe essere utilizzata a causa della possibilità che un secondo disco si guasti durante la ricostruzione del RAID, il che comporta una perdita di dati. Ho trascurato questa raccomandazione, perché eseguivo regolarmente il backup di dati importanti su un dispositivo remoto e il guasto anche dell'intero array può influire solo sulla disponibilità dei dati, ma non sulla loro sicurezza. Se non hai la possibilità di eseguire backup, sarebbe meglio utilizzare soluzioni come RAIDZ2 o RAID10.

Puoi verificare che il pool sia stato creato correttamente eseguendo:

$ sudo zpool status

и

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

Per impostazione predefinita, ZFS monta direttamente il pool appena creato /il che è generalmente indesiderabile. Puoi cambiarlo facendo:

zfs set mountpoint=/mnt/data data

Da qui puoi scegliere di creare uno o più set di dati per archiviare i tuoi dati. Ne ho creati due, uno per il backup di Time Machine e uno per l'archiviazione dei file condivisi. Ho limitato la dimensione del set di dati di Time Machine a una quota di 512 GB per evitare che cresca all'infinito.

Ottimizzazione

zfs set compression=on data

Questo comando abilita il supporto della compressione ZFS. La compressione utilizza una potenza della CPU minima, ma può migliorare notevolmente la velocità effettiva di I/O, pertanto è sempre consigliata.

zfs set relatime=on data

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

Per impostazione predefinita, ZFS su Linux utilizza il 50% della memoria fisica per ARC. Nel mio caso, quando il numero totale di file è piccolo, questa quantità può essere tranquillamente aumentata al 90%, poiché le altre applicazioni sul server non funzioneranno.

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

Poi con l'aiuto arc_summary.py Puoi verificare che le modifiche abbiano avuto effetto:

$ 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à ricorrenti

ero solito systemd-zpool-scrub per impostare i timer di systemd per la pulizia una volta alla settimana e zfs-auto-istantanea per creare automaticamente istantanee ogni 15 minuti, 1 ora e 1 giorno.

Installazione di Netatalk

Nettalk è un'implementazione open source di AFP (Protocollo di archiviazione Apple). Seguente istruzioni di installazione ufficiali per CentOS, ho creato e installato il pacchetto RPM in appena un paio di minuti.

Impostazione della configurazione

$ cat /etc/netatalk/afp.conf
[datong@Titan ~]$ cat /etc/netatalk/afp.conf 
;
; Netatalk 3.x configuration file
;

[Global]
; Global server settings
mimic model = TimeCapsule6,106

; [Homes]
; basedir regex = /home

; [My AFP Volume]
; path = /path/to/volume

; [My Time Machine Volume]
; path = /path/to/backup
; time machine = yes

[Datong's Files]
path = /mnt/data/datong
valid users = datong

[Datong's Time Machine Backups]
path = /mnt/data/datong_time_machine_backups
time machine = yes
valid users = datong

Si noti che vol dbnest è un notevole miglioramento nel mio caso, poiché per impostazione predefinita Netatalk scrive il database CNID nella radice del file system, il che non era auspicabile poiché il mio file system principale è su USB e quindi è relativamente lento. Accensione lo stesso vol dbnest porta a salvare il database nella radice del volume, che in questo caso appartiene al pool ZFS ed è già molto 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 impostato correttamente, la tua macchina dovrebbe essere visualizzata nel Finder e anche Time Machine dovrebbe funzionare.

Altre impostazioni
Monitoraggio SMART

Si consiglia di monitorare lo stato dei dischi per evitare che si guastino.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Demone 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 dell'hardware

Una settimana dopo aver configurato il sistema, ho iniziato a preoccuparmi sempre di più della memoria non ECC installata nel server. Inoltre, nel caso di ZFS, sarà molto utile memoria aggiuntiva per il buffering. Quindi mi sono rivolto di nuovo ad Amazon, dove ho acquistato 2 RAM ECC Kingston DDR3 da 8 GB per $ 80 ciascuna e ho sostituito la RAM del desktop installata dal precedente proprietario. Il sistema si è avviato la prima volta senza problemi e mi sono assicurato che il supporto ECC fosse attivato:

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

risultato

Il risultato mi ha reso molto felice. Ora posso caricare costantemente la connessione LAN da 1 Gbps del server copiando file e Time Machine funziona perfettamente. Quindi, in generale, sono soddisfatto della configurazione.

Il costo totale:

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

In totale = $ 689

Ora posso dire che ne è valsa la pena.

Realizzi i tuoi server NAS?

Costruire un sistema NAS domestico Linux economico

Costruire un sistema NAS domestico Linux economico

Fonte: habr.com

Aggiungi un commento