Construirea unui sistem NAS acasă ieftin pe Linux

Construirea unui sistem NAS acasă ieftin pe Linux

Eu, ca mulți alți utilizatori de MacBook Pro, m-am confruntat cu problema memoriei interne insuficiente. Mai precis, rMBP-ul pe care îl foloseam zilnic era echipat cu un SSD cu o capacitate de doar 256GB, ceea ce, firește, nu a fost suficient pentru o lungă perioadă de timp.

Și când, pe lângă toate celelalte, am început să înregistrez videoclipuri în timpul zborurilor mele, situația s-a înrăutățit. Volumul materialului filmat după astfel de zboruri a fost de peste 50 GB, iar săracul meu SSD de 256 GB sa umplut foarte curând, forțându-mă să cumpăr o unitate externă de 1TB. Cu toate acestea, după un an, nu a mai putut face față cantității de date pe care o generam, ca să nu mai vorbim de lipsa redundanței și de backup l-au făcut inadecvat pentru găzduirea informațiilor importante.

Așa că, la un moment dat, am decis să construiesc un NAS mare în speranța că acest sistem va dura cel puțin câțiva ani fără a mai necesita un alt upgrade.

Am scris acest articol în primul rând pentru a reaminti exact ce am făcut și cum am făcut-o în cazul în care trebuie să o fac din nou. Sper că îți va fi de folos și ție dacă te hotărăști să faci la fel.

Poate este mai ușor de cumpărat?

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

M-am uitat mai întâi la soluții comerciale și m-am uitat în special la Synology, care trebuia să ofere cele mai bune sisteme NAS pentru consumatori de pe piață. Cu toate acestea, costul acestui serviciu s-a dovedit a fi destul de mare. Cel mai ieftin sistem cu 4 locații costă peste 300 USD și nu include hard disk-uri. În plus, umplerea internă a unui astfel de kit în sine nu este deosebit de impresionantă, ceea ce pune sub semnul întrebării performanțele sale reale.

Apoi m-am gândit: de ce să nu construiesc eu un server NAS?

Găsirea unui server potrivit

Dacă aveți de gând să asamblați un astfel de server, atunci în primul rând trebuie să găsiți hardware-ul potrivit. Un server folosit ar trebui să fie destul de potrivit pentru această versiune, deoarece nu vom avea nevoie de multă performanță pentru sarcinile de stocare. Printre lucrurile necesare, ar trebui să remarcăm o cantitate mare de RAM, mai mulți conectori SATA și plăci de rețea bune. Întrucât serverul meu va funcționa în locul rezidenției mele permanente, contează și nivelul de zgomot.

Mi-am început căutarea pe eBay. Deși am găsit acolo o mulțime de Dell PowerEdge R410/R210 folosite la sub 100 USD, având experiență de lucru într-o cameră de servere, știam că aceste unități 1U făceau prea mult zgomot și nu erau potrivite pentru uz casnic. De regulă, serverele turn sunt adesea mai puțin zgomotoase, dar, din păcate, erau puține dintre ele pe eBay și toate erau fie scumpe, fie cu putere redusă.

Următorul loc de căutare a fost Craiglist, unde am găsit pe cineva care vinde un HP ProLiant N40L folosit pentru doar 75 USD! Eram familiarizat cu aceste servere, care de obicei costă în jur de 300 USD chiar și folosite, așa că i-am trimis un e-mail vânzătorului în speranța că anunțul este încă activ. Aflând că așa este, eu, fără să mă gândesc de două ori, m-am îndreptat spre San Mateo pentru a ridica acest server, care la prima vedere m-a încântat cu siguranță. A avut o uzură minimă și, cu excepția unui pic de praf, totul a fost grozav.

Construirea unui sistem NAS acasă ieftin pe Linux
Poza serverului, imediat după cumpărare

Iată specificațiile pentru kitul pe care l-am achiziționat:

  • Procesor: Procesor AMD Turion(tm) II Neo N40L Dual-Core (64 de biți)
  • RAM: 8 GB RAM non-ECC (instalat de proprietarul anterior)
  • bliț: 4 GB unitate USB
  • Conectori SATA:4+1
  • NIC: NIC la bord de 1 Gbps

Inutil să spun că, în ciuda vechimii de câțiva ani, specificația acestui server este în continuare superioară majorității opțiunilor NAS de pe piață, mai ales în ceea ce privește RAM. Puțin mai târziu, chiar am făcut upgrade la 16 GB ECC cu o dimensiune crescută a bufferului și o protecție sporită a datelor.

Selectarea hard disk-urilor

Acum avem un sistem de lucru excelent și tot ce rămâne este să selectăm hard disk-uri pentru el. Evident, pentru cei 75 USD am primit doar serverul în sine fără HDD, ceea ce nu m-a surprins.

După ce am făcut puțină cercetare, am aflat că HDD-urile WD Red sunt cele mai potrivite pentru rularea sistemelor NAS 24/7. Pentru a le achiziționa, am apelat la Amazon, de unde am achiziționat 4 exemplare a câte 3 TB fiecare. Practic, puteți conecta orice HDD pe care îl preferați, dar asigurați-vă că au aceeași capacitate și viteză. Acest lucru vă va ajuta să evitați posibile probleme de performanță RAID pe termen lung.

Configurarea sistemului

Cred că mulți vor folosi sistemul pentru construirea lor NAS FreeNAS, și nu este nimic în neregulă cu asta. 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 un mediu de producție și, în general, gestionarea unui server Linux îmi este mai familiară. În plus, nu m-au interesat interfața și funcțiile de lux oferite de FreeNAS - matricea RAIDZ și partajarea AFP au fost suficiente pentru mine.

Instalarea CentOS pe USB este destul de simplă - trebuie doar să specificați USB ca sursă de pornire, iar la lansare asistentul de instalare vă va ghida prin toate etapele sale.

Construire RAID

După ce am instalat cu succes CentOS, am instalat și ZFS pe Linux urmând cele enumerate pași aici.

Odată ce acest proces a fost finalizat, am încărcat modulul ZFS Kernel:

$ sudo modprobe zfs

Și a creat matricea 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

Vă rugăm să rețineți că aici folosesc ID-urile hard disk-urilor în loc de numele lor afișate (sdx) pentru a reduce șansa ca acestea să nu se monteze după pornire din cauza unei schimbări de litere.

De asemenea, am adăugat cache ZIL și L2ARC care rulează pe un SSD separat, împărțind acel SSD în două partiții: 5GB pentru ZIL și restul pentru L2ARC.

În ceea ce privește RAIDZ1, poate rezista la o eroare de disc. Mulți susțin că această opțiune de pool nu ar trebui utilizată din cauza probabilității ca cel de-al doilea disc să eșueze în timpul procesului de reconstrucție RAID, ceea ce poate duce la pierderea datelor. Am ignorat această recomandare, deoarece am făcut în mod regulat copii de rezervă ale datelor importante pe un dispozitiv de la distanță, iar eșecul chiar și a întregii matrice poate afecta doar disponibilitatea datelor, dar nu și siguranța acestora. Dacă nu aveți posibilitatea de a face copii de rezervă, atunci ar fi mai bine să utilizați soluții precum RAIDZ1 sau RAID2.

Puteți verifica dacă crearea pool-ului a avut succes rulând:

$ sudo zpool status

и

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

În mod implicit, ZFS montează pool-ul nou creat direct pe /, ceea ce este în general nedorit. Puteți schimba acest lucru rulând:

zfs set mountpoint=/mnt/data data

De aici puteți alege să creați unul sau mai multe seturi de date pentru a stoca datele. Am creat două, unul pentru backup Time Machine și unul pentru stocarea fișierelor partajate. Am limitat dimensiunea setului de date Time Machine la o cotă de 512 GB pentru a preveni creșterea lui nesfârșită.

Optimizare

zfs set compression=on data

Această comandă activează suportul de compresie ZFS. Compresia utilizează puterea CPU minimă, dar poate îmbunătăți semnificativ randamentul I/O, așa că este întotdeauna recomandată.

zfs set relatime=on data

Cu această comandă reducem numărul de actualizări la atimepentru a reduce generarea de IOPS la accesarea fișierelor.

În mod implicit, ZFS pe Linux utilizează 50% din memoria fizică pentru ARC. În cazul meu, atunci când numărul total de fișiere este mic, acesta poate fi crescut în siguranță la 90%, deoarece nicio altă aplicație nu va rula pe server.

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

Apoi folosind arc_summary.py Puteți verifica dacă modificările au intrat în vigoare:

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

obisnuiam systemd-zpool-scrub pentru a configura cronometrele de sistem pentru a efectua curățarea o dată pe săptămână și zfs-auto-snapshot pentru a crea automat instantanee la fiecare 15 minute, 1 oră și 1 zi.

Instalarea Netatalk

netalk este o implementare open source a AFP (Protocolul de înregistrare Apple). Ca urmare a instrucțiuni oficiale de instalare pentru CentOS, am primit literalmente un pachet RPM asamblat și instalat în doar câteva minute.

Configurarea configurației

$ 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

Vă rugăm să rețineți faptul că vol dbnest este o îmbunătățire majoră în cazul meu, deoarece Netatalk scrie în mod implicit baza de date CNID la rădăcina sistemului de fișiere, ceea ce nu era deloc de dorit, deoarece sistemul meu de fișiere principal rulează pe USB și, prin urmare, este relativ lent. Pornire vol dbnest are ca rezultat salvarea bazei de date în rădăcina de volum, care în acest caz aparține pool-ului ZFS și este deja cu un ordin de mărime mai productiv.

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, mașina dvs. ar trebui să apară în Finder și Time Machine ar trebui să funcționeze.

Setari aditionale
Monitorizare SMART

Este recomandat să monitorizați starea discurilor pentru a preveni defecțiunea discului.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Daemon pentru UPS

Monitorizează încărcarea UPS-ului APC și oprește sistemul atunci când încărcarea devine extrem de scăzută.

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

Upgrade hardware

La o săptămână după configurarea sistemului, am început să devin din ce în ce mai preocupat de memoria non-ECC a serverului. În plus, în cazul ZFS, memoria suplimentară pentru buffering va fi foarte utilă. Așa că m-am întors la Amazon unde am achiziționat 2x Kingston DDR3 8GB ECC RAM pentru 80 USD fiecare și am înlocuit RAM-ul desktop instalat de proprietarul anterior. Sistemul a pornit prima dată fără probleme și m-am asigurat că a fost activat suportul ECC:

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

Rezultat

Am fost foarte multumit de rezultat. Acum pot menține constant ocupată conexiunea LAN de 1 Gbps a serverului prin copierea fișierelor, iar Time Machine funcționează impecabil. Deci, în general, sunt mulțumit de configurație.

Costul total:

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

În total = $ 689

Acum pot spune că prețul a meritat.

Îți faci propriile servere NAS?

Construirea unui sistem NAS acasă ieftin pe Linux

Construirea unui sistem NAS acasă ieftin pe Linux

Sursa: www.habr.com

Adauga un comentariu