Asamblarea unui sistem NAS ieftin pe Linux

Asamblarea unui sistem NAS ieftin pe Linux

Eu, la fel ca mulți alți utilizatori de MacBook Pro, m-am confruntat cu problema lipsei de memorie internă. Mai exact, rMBP-ul pe care îl folosesc în fiecare zi era echipat cu un SSD de doar 256GB, ceea ce, desigur, nu era suficient pe termen lung.

Și când, pe deasupra, am început să înregistrez videoclipuri în timpul zborurilor mele, situația s-a agravat și mai mult. Volumul materialelor filmate după astfel de zboruri era de peste 50 GB, iar nefericitul meu SSD de 256GB s-a umplut foarte repede, obligându-mă să cumpăr un hard disk extern de 1TB. Totuși, după un an, nici acesta nu mai făcea față volumul de date generate de mine, fără a mai menționa că lipsa redundanței și a copiilor de rezervă îl făceau inadecvat pentru stocarea informațiilor importante.

Așadar, într-un moment, am decis să construiesc un NAS de mari dimensiuni, în speranța că acest sistem va rezista măcar câțiva ani fără a necesita o nouă actualizare.

Am scris acest articol în primul rând ca o notă de memorie despre ceea ce am făcut și cum, în cazul în care va trebui să fac asta din nou. Sper că va fi util și pentru voi, dacă doriți să faceți același lucru.

Poate ar fi mai simplu să cumpăr?

Așadar, știm ce vrem să obținem, rămâne întrebarea cum?

Mai întâi, m-am familiarizat cu soluțiile comerciale și am analizat, în special, compania Synology, care, se presupune, oferă cele mai bune sisteme NAS de consum de pe piață. Totuși, prețul acestui serviciu s-a dovedit a fi destul de ridicat. Cel mai ieftin sistem cu 4 compartimente costă peste 300$, iar hard diskurile nu sunt incluse. În plus, componentele interioare ale acestui kit nu sunt foarte impresionante, ceea ce pune la îndoială performanța sa reală.

Atunci m-am gândit: de ce să nu construiești un server NAS singur?

Căutarea unui server potrivit

Dacă intenționezi să equipi un astfel de server, trebuie mai întâi să găsești componentele potrivite. Pentru această construcție, un server second-hand ar trebui să fie suficient, deoarece nu avem nevoie de o performanță deosebită pentru sarcinile de stocare. Este necesar un volum mare de RAM, câteva conectori SATA și plăci de rețea bune. Deoarece serverul meu va funcționa în locuința mea permanentă, nivelul de zgomot contează de asemenea.

Am început căutările mele pe eBay. Deși am găsit multe Dell PowerEdge R410/R210 folosite cu prețuri de sub 100 $, având experiență în camerele serverelor, știam că aceste unități de 1U emit prea mult zgomot și nu sunt potrivite pentru utilizarea acasă. De obicei, serverele de tip tower sunt mai puțin zgomotoase, dar, din păcate, pe eBay erau puține oferte, iar toate erau fie scumpe, fie cu putere redusă.

Următorul loc în care am căutat a fost site-ul Craiglist, unde am găsit o persoană care vindea un HP ProLiant N40L folosit cu doar 75 $! Eram familiarizat cu aceste servere, care, chiar și la mâna a doua, costă de obicei în jur de 300 $, așa că am trimis un mesaj vânzătorului, sperând că anunțul este încă activ. Aflând că așa este, nu am stat pe gânduri și am plecat spre San Mateo pentru a ridica acest server, care m-a încântat de la prima vedere. Avea uzură minimă și, în afară de un strat mic de praf, totul era excelent.

Asamblarea unui sistem NAS ieftin pe Linux
Fotografia serverului, imediat după achiziție

Iată specificația setului pe care l-am achiziționat:

  • CPU: Procesor AMD Turion(tm) II Neo N40L Dual-Core (64-bit)
  • RAM: 8 GB RAM non-ECC (instalat de fostul proprietar)
  • Flash: Unitate USB de 4 GB
  • Conectori SATA: 4 + 1
  • NIC: NIC integrat de 1 Gbps

Nu trebuie să spun că, în ciuda vârstei de câțiva ani, specificația acestui server depășește în continuare majoritatea opțiunilor de sisteme NAS disponibile pe piață, în special în ceea ce privește RAM-ul. La scurt timp după aceea, am făcut chiar un upgrade la 16 GB ECC cu un buffer mai mare și protecție sporită a datelor.

Alegerea hard disk-urilor

Acum avem un sistem excelent care funcționează, iar acum trebuie să alegem hard disk-urile pentru acesta. Evident, pentru cei 75 $ am primit doar serverul, fără HDD, ceea ce nu m-a surprins.

După ce am făcut puțin cercetare, am descoperit că pentru sistemele NAS care funcționează non-stop 24/7, HDD-urile WD Red sunt cele mai potrivite. Am cumpărat patru bucăți de 3 TB de pe Amazon. Practic, poți conecta orice HDD preferat, dar asigură-te că acestea sunt de aceeași capacitate și viteză. Acest lucru te va ajuta să eviți problemele de performanță RAID în viitor.

Configurarea sistemului

Cred că mulți vor folosi pentru construcțiile lor NAS un sistem FreeNAS, și în asta nu este nimic rău. Cu toate acestea, în ciuda posibilității de a instala acest sistem pe serverul meu, am preferat să folosesc CentOS, deoarece sistemul ZFS pe Linux este pregătit inițial pentru medii de producție, iar gestionarea serverelor Linux îmi este mai familiară. În plus, nu m-a interesat interfața modernă și funcțiile oferite de FreeNAS - mi-a fost suficient un RAIDZ și partajarea AFP.

Instalarea CentOS pe USB este destul de simplă - este suficient să specifici USB ca sursă de boot, iar la început, asistentul de instalare te va ghida prin toate etapele.

Construirea RAID

După instalarea reușită a CentOS, am instalat și ZFS pe Linux, urmând pașii enumerați aici.

La finalizarea acestui proces, am încărcat modulul ZFS Kernel:

$ sudo modprobe zfs

Și am creat un RAIDZ1 folosind comanda 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

Rețineți că aici folosesc ID-urile hard disk-urilor în locul numelui lor afișat (sdx), pentru a reduce șansa de eșec în montarea lor după boot din cauza schimbării literei desemnate.

Am adăugat, de asemenea, ZIL și cache L2ARC, care se desfășoară pe un SSD dedicat, împărțind acest SSD în două partiții: 5GB pentru ZIL și restul pentru L2ARC.

În ceea ce privește RAIDZ1, acesta poate suporta eșecul unui singur disc. Mulți susțin că această variantă de pool nu ar trebui utilizată din cauza probabilității de eșec a celui de-al doilea disc în timpul reconstrucției RAID, ceea ce ar fi fatal pentru date. Eu, însă, am ignorat această recomandare, deoarece am făcut în mod regulat copii de siguranță ale datelor importante pe un dispozitiv extern, iar un eșec chiar și al întregului pool poate afecta doar accesibilitatea datelor, dar nu și integritatea acestora. Dacă nu aveți posibilitatea de a face copii de siguranță, ar fi mai bine să utilizați soluții precum RAIDZ2 sau RAID10.

Pentru a te asigura de succesul creării pool-ului, poți rula:

$ sudo zpool status

și

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

Implicit, ZFS montează pool-ul creat recent direct în /, ceea ce, în general, nu este dorit. Acest lucru se poate schimba rulând:

zfs set mountpoint=/mnt/data data

Din acest loc puteți alege să creați unul sau mai multe seturi de date pentru stocarea datelor. Am creat două, unul pentru backup-ul Time Machine și altul pentru stocarea comună a fișierelor. Am limitat dimensiunea setului de date Time Machine la o cotă de 512 GB, pentru a preveni creșterea sa infinită.

Optimizare

zfs set compression=on data

Această comandă activează suportul pentru compresia ZFS. Compresia folosește minim putere de procesare CPU, dar poate îmbunătăți semificativ lățimea de bandă I/O, de aceea este întotdeauna recomandată.

zfs set relatime=on data

Cu această comandă, reducem numărul actualizărilor la atime, pentru a reduce generarea de IOPS atunci când se accesează fișierele.

În mod implicit, ZFS pe Linux folosește pentru ARC 50% din memoria fizică. În cazul meu, când numărul total de fișiere este relativ mic, această valoare poate fi mărită în siguranță la 90%, deoarece alte aplicații pe server nu vor rula.

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

Apoi, cu ajutorul arc_summary.py se poate verifica dacă modificările au fost aplicate:

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

Configurarea sarcinilor repetate

Am folosit systemd-zpool-scrub pentru configurarea temporizatoarelor systemd pentru a rula curățarea săptămânal și zfs-auto-snapshot pentru a crea automat instantanee de stare la fiecare 15 minute, 1 oră și 1 zi.

Instalarea Netatalk

Netatalk – este o implementare deschisă a AFP (Apple Filing Protocol). Urmând instrucțiunile oficiale de instalare pentru CentOSS, am reușit să obțin un pachet RPM compilat și instalat în doar câteva minute.

Configurarea fișierului de configurare

$ cat /etc/netatalk/afp.conf
[datong@Titan ~]$ cat /etc/netatalk/afp.conf 
;
; Fișier de configurare Netatalk 3.x
;

[Global]
; Setări globale ale serverului
mimic model = TimeCapsule6,106

; [Homes]
; regex pentru bază = /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

Rețineți că vol dbnest reprezintă în cazul meu o îmbunătățire semnificativă, deoarece în mod implicit Netatalk scrie baza de date CNID în rădăcina sistemului de fișiere, ceea ce era complet nedorit, deoarece sistemul meu principal de fișiere rulează pe USB, ceea ce îl face relativ lent. Activarea vol dbnest conduce la salvarea bazei de date în rădăcina volumului, care în acest caz este legată de pool-ul ZFS și este deja de un ordin de mărime mai rapid.

Activarea porturilor în 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
Dacă totul a fost configurat corect, atunci mașina dvs. ar trebui să apară în Finder, iar Time Machine ar trebui să funcționeze de asemenea.

Setări suplimentare
Monitorizare S.M.A.R.T.

Se recomandă urmărirea stării discurilor dvs. pentru a preveni defecțiunile acestora.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Demon pentru UPS

Monitorizează încărcarea UPS-ului APC și oprește sistemul când încărcarea devine critic de mică.

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

Upgrade hardware

O săptămână după ce am configurat sistemul, am început să mă îngrijorez din ce în ce mai mult că serverul are memorie fără ECC. În plus, în cazul ZFS, memorie suplimentară pentru bufferizare ar fi foarte utilă. Așadar, m-am întors pe Amazon, unde am cumpărat 2x Kingston DDR3 8GB ECC RAM cu 80 USD fiecare și am înlocuit RAM-ul de desktop instalat de proprietarul anterior. Sistemul s-a încărcat din prima fără probleme, iar eu m-am asigurat că suportul ECC a fost activat:

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

Rezultatul

Rezultatul m-a bucurat foarte mult. Acum pot să folosesc constant conexiunea LAN de 1Gbps a serverului pentru a copia fișiere, iar Time Machine funcționează impecabil. Așa că, în general, sunt mulțumit de configurare.

Costul total:

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

În concluzie = $689

Acum pot spune că prețul a meritat.

Îți construiești tu servere NAS?

Asamblarea unui sistem NAS ieftin pe Linux

Asamblarea unui sistem NAS ieftin pe Linux

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster