Izgradnja jeftinog kućnog NAS sistema na Linuxu

Izgradnja jeftinog kućnog NAS sistema na Linuxu

I ja sam se, kao i mnogi drugi korisnici MacBook Pro-a, suočili s problemom nedovoljne interne memorije. Da budem precizniji, rMBP koji sam svakodnevno koristio bio je opremljen SSD-om kapaciteta samo 256 GB, što, naravno, nije bilo dovoljno za dugo vremena.

A kada sam, povrh svega, počeo da snimam video zapise tokom svojih letova, situacija se samo pogoršala. Obim snimljenog materijala nakon ovakvih letova bio je 50+ GB, a moj jadni SSD od 256GB se vrlo brzo napunio, primoravši me da kupim eksterni disk od 1TB. Međutim, nakon godinu dana više nije mogao podnijeti količinu podataka koju sam generirao, a da ne spominjemo nedostatak redundantnosti i sigurnosne kopije učinili su ga neprikladnim za smještaj važnih informacija.

Tako sam u jednom trenutku odlučio da napravim veliki NAS u nadi da će ovaj sistem trajati barem nekoliko godina bez potrebe za još jednom nadogradnjom.

Napisao sam ovaj članak prvenstveno kao podsjetnik na to što sam tačno radio i kako sam to uradio u slučaju da to trebam ponoviti. Nadam se da će i vama biti od koristi ako se odlučite na isto.

Možda je lakše kupiti?

Dakle, znamo šta želimo da dobijemo, ostaje pitanje: kako?

Prvo sam se osvrnuo na komercijalna rješenja, a posebno na Synology, koji je trebao pružiti najbolje NAS sisteme za potrošače na tržištu. Međutim, ispostavilo se da je cijena ove usluge prilično visoka. Najjeftiniji sistem sa 4 ležišta košta 300$+ i ne uključuje čvrste diskove. Osim toga, samo unutrašnje punjenje takvog kompleta nije posebno impresivno, što dovodi u pitanje njegove stvarne performanse.

Onda sam pomislio: zašto ne bih sam napravio NAS server?

Pronalaženje odgovarajućeg servera

Ako ćete sastaviti takav server, prije svega morate pronaći pravi hardver. Korišteni server bi trebao biti sasvim prikladan za ovu verziju, jer nam neće trebati mnogo performansi za zadatke skladištenja. Među potrebnim stvarima treba istaknuti veliku količinu RAM-a, nekoliko SATA konektora i dobre mrežne kartice. Budući da će moj server raditi u mjestu mog stalnog boravka, bitna je i razina buke.

Počeo sam pretragu na eBayu. Iako sam tamo pronašao mnogo polovnih Dell PowerEdge R410/R210 za manje od 100 dolara, s iskustvom rada u serverskoj sobi, znao sam da ove 1U jedinice prave previše buke i da nisu pogodne za kućnu upotrebu. Po pravilu, tower serveri su često manje bučni, ali, nažalost, na eBayu ih je bilo malo, a svi su bili ili skupi ili slabije snage.

Sljedeće mjesto za traženje bio je Craiglist, gdje sam pronašao nekoga ko prodaje polovni HP ProLiant N40L za samo 75 dolara! Bio sam upoznat s ovim serverima, koji obično koštaju oko 300 dolara čak i korišteni, pa sam poslao e-mail prodavcu u nadi da je oglas još uvijek aktivan. Saznavši da je to tako, bez razmišljanja sam se zaputio u San Mateo po ovaj server, koji mi je na prvi pogled definitivno prijao. Imao je minimalno trošenje i osim malo prašine, sve ostalo je bilo odlično.

Izgradnja jeftinog kućnog NAS sistema na Linuxu
Slika servera, odmah nakon kupovine

Evo specifikacija za komplet koji sam kupio:

  • CPU: AMD Turion(tm) II Neo N40L Dual-Core procesor (64-bit)
  • RAM: 8 GB non-ECC RAM (instalirao prethodni vlasnik)
  • blic: 4 GB USB disk
  • SATA konektori:4+1
  • NIŠTA: 1 Gbps ugrađena NIC

Nepotrebno je reći, uprkos tome što je star nekoliko godina, specifikacije ovog servera su i dalje superiorne u odnosu na većinu NAS opcija na tržištu, posebno u pogledu RAM-a. Nešto kasnije, čak sam nadogradio na 16 GB ECC sa povećanom veličinom bafera i povećanom zaštitom podataka.

Odabir tvrdih diskova

Sada imamo odličan sistem koji radi i preostaje samo da za njega odaberete čvrste diskove. Očigledno, za tih 75 dolara dobio sam samo sam server bez HDD-a, što me nije iznenadilo.

Nakon malog istraživanja, otkrio sam da su WD Red HDD-ovi najpogodniji za rad NAS sistema 24/7. Da ih kupim, obratio sam se Amazonu, gdje sam kupio 4 kopije od po 3 TB. U osnovi, možete spojiti bilo koji HDD koji želite, ali provjerite jesu li istog kapaciteta i brzine. Ovo će vam pomoći da izbjegnete moguće probleme sa performansama RAID-a na duge staze.

Postavljanje sistema

Mislim da će mnogi koristiti sistem za svoje NAS verzije FreeNAS, i nema ništa loše u tome. Međutim, i pored mogućnosti instaliranja ovog sistema na moj server, radije sam koristio CentOS, pošto je ZFS na Linux sistem inicijalno pripremljen za proizvodno okruženje, a generalno, upravljanje Linux serverom mi je poznatije. Osim toga, nisam bio zainteresovan za fensi interfejs i karakteristike koje pruža FreeNAS - RAIDZ niz i AFP deljenje su mi bili dovoljni.

Instalacija CentOS-a na USB je prilično jednostavna - samo navedite USB kao izvor za pokretanje, a nakon pokretanja čarobnjak za instalaciju će vas voditi kroz sve njegove faze.

RAID build

Nakon uspješne instalacije CentOS-a, također sam instalirao ZFS na Linux slijedeći navedeno koraka ovdje.

Kada je ovaj proces završen, učitao sam ZFS Kernel modul:

$ sudo modprobe zfs

I kreirao RAIDZ1 niz koristeći naredbu 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

Imajte na umu da ovdje koristim ID-ove tvrdih diskova umjesto njihovih prikaza (sdx) kako bi se smanjila mogućnost da se ne mogu montirati nakon pokretanja zbog promjene slova.

Također sam dodao ZIL i L2ARC keš memoriju koji radi na zasebnom SSD-u, podijelivši taj SSD na dvije particije: 5 GB za ZIL i ostatak za L2ARC.

Što se tiče RAIDZ1, on može izdržati 1 kvar diska. Mnogi tvrde da se ova opcija bazena ne bi trebala koristiti zbog vjerovatnoće da će drugi disk otkazati tokom procesa ponovne izgradnje RAID-a, što može dovesti do gubitka podataka. Ignorirao sam ovu preporuku, jer sam redovno pravio rezervne kopije važnih podataka na udaljenom uređaju, a kvar čak i čitavog niza može uticati samo na dostupnost podataka, ali ne i na njihovu sigurnost. Ako nemate mogućnost pravljenja sigurnosnih kopija, onda bi bilo bolje koristiti rješenja poput RAIDZ2 ili RAID10.

Možete provjeriti da li je kreiranje bazena bilo uspješno tako što ćete pokrenuti:

$ sudo zpool status

и

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

Po defaultu, ZFS montira novokreirani bazen direktno na /, što je generalno nepoželjno. Ovo možete promijeniti pokretanjem:

zfs set mountpoint=/mnt/data data

Odavde možete odabrati da kreirate jedan ili više skupova podataka za pohranjivanje podataka. Napravio sam dva, jedan za pravljenje rezervne kopije Time Machinea i jedan za zajedničko skladištenje datoteka. Ograničio sam veličinu skupa podataka Time Machine na kvotu od 512 GB kako bih spriječio njegov beskrajni rast.

Optimizacija

zfs set compression=on data

Ova naredba omogućava podršku za ZFS kompresiju. Kompresija koristi minimalnu snagu procesora, ali može značajno poboljšati I/O propusnost, pa se uvijek preporučuje.

zfs set relatime=on data

Ovom naredbom smanjujemo broj ažuriranja na atimeda smanjite generisanje IOPS-a prilikom pristupanja datotekama.

Prema zadanim postavkama, ZFS na Linuxu koristi 50% fizičke memorije za ARC. U mom slučaju, kada je ukupan broj fajlova mali, ovo se može sigurno povećati na 90% jer se na serveru neće pokretati nijedna druga aplikacija.

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

Zatim koristeći arc_summary.py Možete provjeriti da li su promjene stupile na snagu:

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

Postavljanje ponavljajućih zadataka

koristio sam systemd-zpool-scrub da konfigurišete systemd tajmere za izvođenje čišćenja jednom nedeljno i zfs-auto-snapshot da automatski kreirate snimke svakih 15 minuta, 1 sat i 1 dan.

Instaliranje Netatalka

nettalk je open source implementacija AFP-a (Apple Filing Protocol). Praćenje službene upute za instalaciju za CentOS, bukvalno sam dobio sastavljen i instaliran RPM paket za samo par minuta.

Podešavanje konfiguracije

$ 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

Zapiši to vol dbnest je veliko poboljšanje u mom slučaju, jer po defaultu Netatalk upisuje CNID bazu podataka u korijen fajl sistema, što nije bilo nimalo poželjno jer moj glavni sistem datoteka radi na USB-u i stoga je relativno spor. Uključuje se vol dbnest rezultira pohranjivanjem baze podataka u korijenu volumena, koji u ovom slučaju pripada ZFS spremištu i već je za red veličine produktivniji.

Omogućavanje portova u Firewall-u

$ 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
Ako je sve bilo ispravno konfigurirano, vaša mašina bi se trebala pojaviti u Finderu, a i vremenska mašina bi također trebala raditi.

Dodatne postavke
SMART monitoring

Preporučuje se da pratite status vaših diskova kako biste spriječili kvar diska.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Daemon za UPS

Nadgleda punjenje APC UPS-a i isključuje sistem kada napunjenost postane kritično niska.

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

Nadogradnja hardvera

Nedelju dana nakon postavljanja sistema, počeo sam da postajem sve zabrinutiji za serverovu ne-ECC memoriju. Osim toga, u slučaju ZFS-a, dodatna memorija za baferovanje će biti vrlo korisna. Zato sam se vratio na Amazon gdje sam kupio 2x Kingston DDR3 8GB ECC RAM-a za 80 dolara po komadu i zamijenio desktop RAM koji je instalirao prethodni vlasnik. Sistem se pokrenuo prvi put bez ikakvih problema, a ja sam se uvjerio da je ECC podrška aktivirana:

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

rezultat

Bio sam veoma zadovoljan rezultatom. Sada mogu stalno održavati LAN vezu servera od 1Gbps zauzetim kopiranjem datoteka, a Time Machine radi besprijekorno. Dakle, generalno, zadovoljan sam postavkom.

Ukupan trošak:

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

Ukupno = $ 689

Sada mogu reći da se cijena isplatila.

Da li pravite sopstvene NAS servere?

Izgradnja jeftinog kućnog NAS sistema na Linuxu

Izgradnja jeftinog kućnog NAS sistema na Linuxu

izvor: www.habr.com

Dodajte komentar