Sestavení cenově dostupného domácího NAS systému na Linuxu

Sestavení cenově dostupného domácího NAS systému na Linuxu

Jako mnozí další uživatelé MacBook Pro jsem se setkal s problémem nedostatku vnitřní paměti. Jinými slovy, můj každodenně používaný rMBP byl vybaven SSD o velikosti pouze 256GB, což, jak jistě chápete, dlouhodobě nestačilo.

A když jsem navíc začal natáčet videa během svých letů, situace se jen zhoršila. Velikost natočeného materiálu po takových letech přesahovala 50 GB a můj nešťastný SSD o velikosti 256GB se velmi brzy zaplnil, což mě donutilo pořídit externí disk o kapacitě 1TB. Nicméně, po roce přestal i ten zvládat objem dat, které generuji, a nemluvě o tom, že nedostatek redundance a zálohy ho činil nevhodným pro uchovávání důležitých informací.

Jednoho dne jsem se tedy rozhodl sestavit NAS s vysokou kapacitou s nadějí, že tento systém vydrží alespoň pár let, aniž by bylo nutné další upgrade.

Tento článek jsem napsal především jako připomínku toho, co a jak jsem dělal, pro případ, že bych to potřeboval udělat znovu. Doufám, že bude užitečný i pro vás, pokud se rozhodnete udělat totéž.

Není snadnější si to koupit?

Takže víme, co chceme, zůstává však otázka, jak na to?

Nejdříve jsem se seznámil s komerčními řešeními a zvažoval jsem, konkrétně, firmu Synology, která, jak se předpokládalo, nabízí nejlepší NAS systémy pro spotřebitele na trhu. Nicméně, cena tohoto zařízení byla poměrně vysoká. Nejlevnější systém se 4 šachtami stál přes $300 a pevné disky nebyly součástí balení. Kromě toho nebylo vnitřní vybavení této sestavy příliš ohromující, což zpochybňuje její skutečný výkon.

Pak mě napadlo: proč si nesestavit NAS server sám?

Hledání vhodného serveru

Pokud se chystáš sestavit takový server, je nejprve nutné najít správný hardware. Pro tuto sestavu by měla vyhovovat použitá server, protože pro úkoly úložiště nevyžadujeme vysoký výkon. Je potřeba zmínit velký objem RAM, několik SATA konektorů a kvalitní síťové karty. Protože můj server bude pracovat na místě mého trvalého bydliště, má úroveň hlučnosti také význam.

Své hledání jsem začal na eBay. Ačkoliv jsem tam našel mnoho použitých Dell PowerEdge R410/R210 za méně než 100 $, měl jsem zkušenosti z serverové místnosti a věděl jsem, že tyto 1U jednotky vydávají příliš mnoho hluku a pro domácí použití nejsou vhodné. Obecně platí, že servery formátu tower bývají tišší, ale bohužel, na eBay jich bylo vystaveno málo a všechny byly buď drahé, nebo slabé.

Dalším místem pro hledání byl web Craiglist, kde jsem našel člověka prodávajícího použitý HP ProLiant N40L za pouhých 75 $! Byl jsem s těmito servery obeznámen, protože i v použitém stavu obvykle stojí kolem 300 $, takže jsem poslal prodejci zprávu v naději, že inzerát je stále aktuální. Když jsem se dozvěděl, že ano, bez váhání jsem vyrazil do San Mateo, abych si tento server vyzvedl, který mě už na první pohled potěšil. Měl minimální opotřebení a kromě malého množství prachu bylo všechno v pořádku.

Sestavení cenově dostupného domácího NAS systému na Linuxu
Fotka serveru, hned po koupi

Tady je specifikace zakoupeného soupravy:

  • CPU: AMD Turion(tm) II Neo N40L Dual-Core Processor (64-bit)
  • RAM: 8 GB non-ECC RAM (nainstalováno předchozím majitelem)
  • Flash: 4 GB USB disk
  • SATA konektory: 4 + 1
  • NIC: 1 Gbps na palubní NIC

Nehodlám říkat, že navzdory několika letům stáří, specifikace tohoto serveru stále převyšuje většinu variant NAS systémů nabízených na trhu, zejména co se týče operační paměti. O něco později jsem dokonce provedl upgrade na 16 GB ECC s vyšším objemem vyrovnávací paměti a zvýšenou ochranou dat.

Výběr pevných disků

Nyní máme skvěle funkční systém a zbývá nám vybrat k němu pevné disky. Je očividné, že za těch 75 $ jsem získal pouze samotný server bez HDD, což mě vůbec nepřekvapilo.

Po menším výzkumu jsem zjistil, že pro nepřetržitý provoz NAS systémů 24/7 jsou nejlepší HDD WD Red. Pro jejich koupi jsem se obrátil na Amazon, kde jsem zakoupil 4 kusy o velikosti 3 TB. V zásadě můžete připojit jakýkoliv preferovaný HDD, ale mějte na paměti, aby byly stejné velikosti a rychlosti. To vám pomůže vyhnout se možným problémům s výkonem RAID v budoucnosti.

Nastavení systému

Myslím, že mnoho lidí bude pro své NAS sestavy používat systém FreeNAS, na tom není nic špatného. Nicméně, i když je možné tuto distribuci nainstalovat na svém serveru, já jsem se rozhodl použít CentOS, protože systém ZFS na Linuxu je původně připraven pro produkční prostředí, a správa Linux serveru mi je obecně více známá. Kromě toho mě nezajímal módní rozhraní a funkce nabízené FreeNAS – postačil mi pole RAIDZ a sdílení AFP.

Instalace CentOS na USB je dost jednoduchá – stačí zadat USB jako zdroj spuštění, a při spuštění vás instalační průvodce provede všemi jejími fázemi.

Sestava RAID

Po úspěšné instalaci CentOS jsem také nainstaloval ZFS na Linuxu, podle uvedených kroků zde.

Po dokončení tohoto procesu jsem načetl modul ZFS Kernel:

$ sudo modprobe zfs

A vytvořil jsem pole RAIDZ1 pomocí příkazu 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šimněte si, že zde používám ID pevných disků místo jejich zobrazených názvů (sdx), abych snížil šanci na selhání jejich připojení po spuštění kvůli změně písmenového označení.

Také jsem přidal ZIL a L2ARC cache, které běží na samostatném SSD, rozdělením tohoto SSD na dvě oblasti: 5GB pro ZIL a zbytek pro L2ARC.

Pokud jde o RAIDZ1, může odolat selhání jednoho disku. Mnozí tvrdí, že tento typ poolu by neměl být používán kvůli pravděpodobnosti výpadku druhého disku během rekonstrukce RAID, což může vést k ztrátě dat. Já jsem však toto doporučení přehlédl, protože jsem pravidelně vytvářel zálohy důležitých dat na vzdáleném zařízení, a selhání i celého pole může ovlivnit pouze dostupnost dat, ale ne jejich zachování. Pokud nemáte možnost zálohovat, bude lepší použít řešení, jako je RAIDZ2 nebo RAID10.

O úspěšnosti vytvoření poolu se můžete přesvědčit pomocí:

$ sudo zpool status

a

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

Ve výchozím nastavení ZFS mountuje právě vytvořený pool přímo v /, což obvykle není žádoucí. Tento postup lze změnit pomocí:

zfs set mountpoint=/mnt/data data

Odtud můžete vytvořit jednu nebo více datasetů pro ukládání dat. Já jsem vytvořil dva, jeden pro Time Machine backup a druhý pro sdílené úložiště souborů. Kapacitu datasetu Time Machine jsem omezil kvótou 512 GB, aby se předešlo jeho nekonečnému růstu.

Optimalizace

zfs set compression=on data

Tento příkaz aktivuje podporu komprese ZFS. Komprese využívá minimální výkon CPU, ale může významně zlepšit propustnost I/O, a proto se vždy doporučuje k použití.

zfs set relatime=on data

Pomocí tohoto příkazu snižujeme počet aktualizací na atime, abychom snížili generaci IOPS při přístupu k souborům.

Ve výchozím nastavení ZFS na Linuxu používá pro ARC 50 % fyzické paměti. V mém případě, kdy je celkový počet souborů malý, lze tuto hodnotu bezpečně zvýšit na 90 %, protože na serveru nebudou běžet žádné další aplikace.

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

Poté pomocí arc_summary.py se můžete ujistit, že změny nabyly účinnosti:

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

Nastavení opakujících se úloh

Použil jsem systemd-zpool-scrub k nastavení systemd-timerů pro provádění údržby jednou týdně a zfs-auto-snapshot pro automatické vytváření snímků stavu každých 15 minut, 1 hodinu a 1 den.

Instalace Netatalk

Netatalk je otevřená implementace AFP (Apple Filing Protocol). Následujte oficiální instalační pokyny pro CentOSAno, doslova jsem za pár minut obdržel sestavený a nainstalovaný balíček RPM.

Nastavení konfigurace

$ cat /etc/netatalk/afp.conf
[datong@Titan ~]$ cat /etc/netatalk/afp.conf 
;
; Konfigurační soubor Netatalk 3.x
;

[Global]
; Globální nastavení serveru
mimic model = TimeCapsule6,106

; [Homes]
; basový regex = /home

; [Moje AFP jednotka]
; path = /path/to/volume

; [Moje Time Machine jednotka]
; path = /path/to/backup
; time machine = yes

[Soubory Datonga]
path = /mnt/data/datong
valid users = datong

[Zálohy Time Machine Datonga]
path = /mnt/data/datong_time_machine_backups
time machine = yes
valid users = datong

Všimněte si, že vol dbnest je v mém případě vážným zlepšením, protože standardně Netatalk zapisuje databázi CNID do kořene souborového systému, což bylo velmi nežádoucí, protože můj hlavní souborový systém běží na USB, což znamená, že pracuje relativně pomalu. Aktivace vol dbnest vede k uložení databáze do kořene Volume, které v tomto případě patří do ZFS poolu a již je mnohem výkonnější.

Povolení portů ve firewallu

$ 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
Pokud bylo vše správně nakonfigurováno, měla by se vaše zařízení zobrazit ve Finderu a Time Machine by také měla fungovat.

Další nastavení
S.M.A.R.T monitoring

Doporučuje se sledovat stav vašich disků s cílem předejít jejich selhání.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Démon pro UPS

Sleduje nabití UPS APC a vypíná systém, když je nabití kriticky nízké.

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

Hardwarové vylepšení

Týden po nastavení systému jsem začal mít obavy, že v serveru je paměť bez ECC. Navíc v případě ZFS bude další paměť pro vyrovnávací paměť velmi užitečná. Takže jsem se znovu obrátil na Amazon, kde jsem zakoupil 2x Kingston DDR3 8GB ECC RAM za 80 $ každý a vyměnil desktopovou RAM, kterou nainstaloval předchozí vlastník. Systém se při prvním spuštění bez problémů načetl a ujistil jsem se, že podpora ECC byla aktivována:

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

Výsledek

Výsledek mě velmi potěšil. Nyní mohu neustále využívat 1Gbps LAN spojení serveru kopírováním souborů a Time Machine funguje bez problémů. Takže celkově jsem s nastavením spokojen.

Celková cena:

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

Celkem = $689

Teď mohu říct, že cena byla přiměřená.

Děláte také NAS servery sami?

Sestavení cenově dostupného domácího NAS systému na Linuxu

Sestavení cenově dostupného domácího NAS systému na Linuxu

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster