Construir un sistema NAS domèstic econòmic a Linux

Construir un sistema NAS domèstic econòmic a Linux

Jo, com molts altres usuaris de MacBook Pro, em vaig enfrontar al problema de la memòria interna insuficient. Per ser més precisos, l'rMBP que utilitzava diàriament estava equipat amb un SSD amb una capacitat de només 256 GB, que, naturalment, no va ser suficient durant molt de temps.

I quan, a més de tota la resta, vaig començar a gravar vídeos durant els meus vols, la situació només va empitjorar. El volum de metratge filmat després d'aquests vols va ser de més de 50 GB i el meu pobre SSD de 256 GB es va omplir molt aviat, i em va obligar a comprar una unitat externa d'1 TB. No obstant això, després d'un any, ja no podia gestionar la quantitat de dades que estava generant, sense oblidar la manca de redundància i còpia de seguretat la feia inadequada per allotjar informació important.

Així que, en un moment donat, vaig decidir construir un NAS gran amb l'esperança que aquest sistema durés almenys un parell d'anys sense necessitat d'una altra actualització.

Vaig escriure aquest article principalment com a recordatori del que vaig fer exactament i com ho vaig fer per si ho necessito tornar a fer. Espero que també us sigui útil si decidiu fer el mateix.

Potser és més fàcil de comprar?

Per tant, sabem què volem aconseguir, la pregunta segueix sent: com?

Primer vaig mirar solucions comercials i vaig mirar en particular Synology, que se suposava que proporcionava els millors sistemes NAS de consum del mercat. No obstant això, el cost d'aquest servei va resultar ser força elevat. El sistema de 4 badies més barat costa més de 300 dòlars i no inclou discs durs. A més, l'ompliment intern d'aquest kit no és especialment impressionant, cosa que posa en dubte el seu rendiment real.

Aleshores vaig pensar: per què no construir jo mateix un servidor NAS?

Trobar un servidor adequat

Si voleu muntar un servidor d'aquest tipus, primer heu de trobar el maquinari adequat. Un servidor utilitzat hauria de ser molt adequat per a aquesta compilació, ja que no necessitarem gaire rendiment per a les tasques d'emmagatzematge. Entre les coses necessàries, cal destacar una gran quantitat de memòria RAM, diversos connectors SATA i bones targetes de xarxa. Com que el meu servidor funcionarà al lloc de la meva residència permanent, el nivell de soroll també és important.

Vaig començar la meva cerca a eBay. Tot i que hi vaig trobar molts Dell PowerEdge R410/R210 usats per menys de 100 dòlars, tenint experiència treballant en una sala de servidors, sabia que aquestes unitats 1U feien massa soroll i no eren adequades per a ús domèstic. Per regla general, els servidors de torre solen ser menys sorollosos, però, malauradament, n'hi havia pocs a eBay i tots eren cars o amb poca potència.

El següent lloc per buscar va ser Craiglist, on vaig trobar algú que venia un HP ProLiant N40L usat per només 75 dòlars! Estava familiaritzat amb aquests servidors, que normalment costaven uns 300 dòlars fins i tot utilitzats, així que vaig enviar un correu electrònic al venedor amb l'esperança que l'anunci encara estigués actiu. Després d'haver sabut que això era així, jo, sense pensar-m'ho dues vegades, em vaig dirigir a San Mateo per recollir aquest servidor, que a primera vista em va agradar definitivament. Tenia un desgast mínim i, excepte una mica de pols, tota la resta era genial.

Construir un sistema NAS domèstic econòmic a Linux
Foto del servidor, immediatament després de la compra

Aquí teniu les especificacions del kit que vaig comprar:

  • CPUProcessador AMD Turion(tm) II Neo N40L de doble nucli (64 bits)
  • RAM: 8 GB de RAM no ECC (instal·lada pel propietari anterior)
  • flash: Unitat USB de 4 GB
  • Connectors SATA: 4 + 1
  • NIC: NIC a bord d'1 Gbps

No cal dir que, tot i tenir diversos anys, l'especificació d'aquest servidor segueix sent superior a la majoria d'opcions NAS del mercat, sobretot pel que fa a la memòria RAM. Una mica més tard, fins i tot vaig actualitzar a 16 GB ECC amb una mida de memòria intermèdia més gran i una protecció de dades més gran.

Selecció de discs durs

Ara tenim un sistema de treball excel·lent i només queda seleccionar discs durs per a ell. Òbviament, per aquests 75 dòlars només vaig aconseguir el propi servidor sense el disc dur, cosa que no em va sorprendre.

Després d'investigar una mica, vaig descobrir que els HDD WD Red són els més adequats per executar sistemes NAS les 24 hores del dia. Per comprar-los, vaig recórrer a Amazon, on vaig comprar 7 còpies de 4 TB cadascuna. Bàsicament, podeu connectar qualsevol disc dur que preferiu, però assegureu-vos que tinguin la mateixa capacitat i velocitat. Això us ajudarà a evitar possibles problemes de rendiment RAID a llarg termini.

Configuració del sistema

Crec que molts utilitzaran el sistema per a les seves compilacions NAS FreeNAS, i no hi ha res dolent en això. Tanmateix, malgrat la possibilitat d'instal·lar aquest sistema al meu servidor, vaig preferir utilitzar CentOS, ja que el sistema ZFS a Linux està preparat inicialment per a un entorn de producció i, en general, la gestió d'un servidor Linux em resulta més familiar. A més, no m'interessava la interfície fantàstica i les funcions que ofereix FreeNAS: la matriu RAIDZ i l'ús compartit d'AFP eren suficients per a mi.

La instal·lació de CentOS a USB és bastant senzilla: només cal que especifiqueu USB com a font d'arrencada i, en iniciar-lo, l'assistent d'instal·lació us guiarà a través de totes les seves etapes.

Construcció RAID

Després d'instal·lar amb èxit CentOS, també vaig instal·lar ZFS a Linux seguint la llista passos aquí.

Un cop finalitzat aquest procés, vaig carregar el mòdul del nucli ZFS:

$ sudo modprobe zfs

I va crear la matriu RAIDZ1 mitjançant l'ordre 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

Tingueu en compte que aquí estic fent servir els ID dels discs durs en lloc dels seus noms de visualització (sdx) per reduir la possibilitat que no es muntin després de l'arrencada a causa d'un canvi de lletra.

També he afegit la memòria cau ZIL i L2ARC que s'executa en un SSD independent, dividint aquest SSD en dues particions: 5 GB per a ZIL i la resta per a L2ARC.

Pel que fa a RAIDZ1, pot suportar una fallada de disc. Molts argumenten que aquesta opció de conjunt no s'hauria d'utilitzar a causa de la probabilitat que el segon disc falli durant el procés de reconstrucció del RAID, cosa que pot provocar la pèrdua de dades. Vaig ignorar aquesta recomanació, ja que feia regularment còpies de seguretat de dades importants en un dispositiu remot i la fallada de tota la matriu només pot afectar la disponibilitat de les dades, però no la seva seguretat. Si no teniu la possibilitat de fer còpies de seguretat, seria millor utilitzar solucions com RAIDZ1 o RAID2.

Podeu verificar que la creació de l'agrupació ha estat correcta executant:

$ sudo zpool status

и

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

De manera predeterminada, ZFS munta directament el grup recentment creat /, que generalment no és desitjable. Podeu canviar-ho executant:

zfs set mountpoint=/mnt/data data

Des d'aquí, podeu triar crear un o més conjunts de dades per emmagatzemar les dades. N'he creat dos, un per a la còpia de seguretat de Time Machine i un altre per a l'emmagatzematge de fitxers compartits. Vaig limitar la mida del conjunt de dades Time Machine a una quota de 512 GB per evitar el seu creixement interminable.

Optimització

zfs set compression=on data

Aquesta ordre activa el suport de compressió ZFS. La compressió utilitza una potència mínima de la CPU, però pot millorar significativament el rendiment d'E/S, per la qual cosa sempre es recomana.

zfs set relatime=on data

Amb aquesta ordre reduïm el nombre d'actualitzacions a atimeper reduir la generació d'IOPS en accedir als fitxers.

Per defecte, ZFS a Linux utilitza el 50% de la memòria física per a ARC. En el meu cas, quan el nombre total de fitxers és petit, es pot augmentar amb seguretat fins al 90%, ja que no s'executarà cap altra aplicació al servidor.

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

Després utilitzant arc_summary.py Podeu comprovar que els canvis han tingut efecte:

$ 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
...

Configuració de tasques recurrents

jo solia systemd-zpool-scrub per configurar temporitzadors del sistema per dur a terme la neteja un cop a la setmana i zfs-auto-snapshot per crear instantànies automàticament cada 15 minuts, 1 hora i 1 dia.

Instal·lació de Netatalk

netatalk és una implementació de codi obert d'AFP (Protocol de presentació d'Apple). Seguint instruccions oficials d'instal·lació de CentOS, literalment vaig rebre un paquet RPM muntat i instal·lat en només un parell de minuts.

Configuració de configuració

$ 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

Tingueu en compte que vol dbnest és una millora important en el meu cas, ja que per defecte Netatalk escriu la base de dades CNID a l'arrel del sistema de fitxers, cosa que no era gens desitjable ja que el meu sistema de fitxers principal funciona amb USB i, per tant, és relativament lent. Encenent vol dbnest resulta en desar la base de dades a l'arrel del volum, que en aquest cas pertany al grup ZFS i ja és un ordre de magnitud més productiu.

Habilitació de ports al tallafoc

$ 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
Si tot s'ha configurat correctament, la vostra màquina hauria d'aparèixer al Finder i Time Machine també hauria de funcionar.

Configuracions addicionals
Monitorització SMART

Es recomana supervisar l'estat dels vostres discs per evitar fallades del disc.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Daemon per a UPS

Supervisa la càrrega del SAI APC i apaga el sistema quan la càrrega es torna molt baixa.

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

Actualització de maquinari

Una setmana després de configurar el sistema, vaig començar a preocupar-me cada cop més per la memòria no ECC del servidor. A més, en el cas de ZFS, la memòria addicional per a la memòria intermèdia serà molt útil. Així que vaig tornar a Amazon on vaig comprar 2x Kingston DDR3 8GB ECC RAM per 80 dòlars cadascun i vaig substituir la RAM d'escriptori instal·lada pel propietari anterior. El sistema va arrencar la primera vegada sense cap problema i em vaig assegurar que el suport ECC estava activat:

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

Resultat

Vaig quedar molt satisfet amb el resultat. Ara puc mantenir constantment ocupada la connexió LAN d'1 Gbps del servidor copiant fitxers i Time Machine funciona perfectament. Per tant, en general, estic content amb la configuració.

El cost total:

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

En total = $ 689

Ara puc dir que el preu ha valgut la pena.

Creeu els vostres propis servidors NAS?

Construir un sistema NAS domèstic econòmic a Linux

Construir un sistema NAS domèstic econòmic a Linux

Font: www.habr.com

Afegeix comentari