Vybudování levného domácího NAS systému na Linuxu

Vybudování levného domácího NAS systému na Linuxu

Stejně jako mnoho dalších uživatelů MacBooku Pro jsem se potýkal s problémem nedostatečné vnitřní paměti. Abych byl přesnější, rMBP, který jsem denně používal, bylo osazeno SSD s kapacitou pouhých 256 GB, což samozřejmě dlouho nestačilo.

A když jsem ke všemu začal během svých letů natáčet videa, situace se jen zhoršila. Objem natočeného materiálu po takových úletech byl 50+ GB a můj ubohý 256GB SSD se velmi brzy zaplnil, což mě donutilo pořídit si externí 1TB disk. Po jednom roce však již nezvládal množství dat, které jsem generoval, nemluvě o nedostatku redundance a zálohování, které jej učinilo nevhodným pro hostování důležitých informací.

V jednu chvíli jsem se tedy rozhodl postavit velký NAS v naději, že tento systém vydrží alespoň pár let bez nutnosti dalšího upgradu.

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

Možná je jednodušší koupit?

Takže, víme, co chceme získat, zůstává otázka: jak?

Nejprve jsem se podíval na komerční řešení a podíval jsem se zejména na Synology, která měla poskytovat nejlepší NAS systémy pro spotřebitele na trhu. Náklady na tuto službu se však ukázaly být poměrně vysoké. Nejlevnější 4šachtový systém stojí 300 $+ a nezahrnuje pevné disky. Navíc vnitřní náplň takové stavebnice sama o sobě není nijak zvlášť působivá, což zpochybňuje její reálný výkon.

Pak jsem si řekl: proč si nepostavit server NAS sám?

Nalezení vhodného serveru

Pokud se chystáte postavit takový server, pak musíte nejprve najít správný hardware. Použitý server by měl být pro toto sestavení docela vhodný, protože pro úlohy úložiště nebudeme potřebovat velký výkon. Mezi nezbytnými věcmi bychom měli zaznamenat velké množství paměti RAM, několik konektorů SATA a dobré síťové karty. Vzhledem k tomu, že můj server bude fungovat v místě mého trvalého bydliště, záleží i na hlučnosti.

Začal jsem hledat na eBay. Přestože jsem tam našel hodně použitých Dell PowerEdge R410/R210 za méně než 100 USD, měl jsem zkušenosti s prací v serverové místnosti, ale věděl jsem, že tyto 1U jednotky vydávají příliš mnoho hluku a nejsou vhodné pro domácí použití. Věžové servery jsou zpravidla méně hlučné, ale na eBay jich bohužel bylo málo a všechny byly buď drahé, nebo nedostatečně výkonné.

Dalším místem, kam se podívat, byl Craiglist, kde jsem našel někoho, kdo prodává použitý HP ProLiant N40L za pouhých 75 $! Byl jsem obeznámen s těmito servery, které obvykle stojí kolem 300 $, i když jsem je použil, a tak jsem poslal e-mail prodejci v naději, že reklama je stále aktivní. Když jsem se dozvěděl, že tomu tak je, bez přemýšlení jsem zamířil do San Matea vyzvednout tento server, který mě na první pohled rozhodně potěšil. Měl minimální opotřebení a až na trochu prachu bylo vše ostatní skvělé.

Vybudování levného domácího NAS systému na Linuxu
Foto serveru ihned po zakoupení

Zde jsou specifikace pro sadu, kterou jsem koupil:

  • procesor: Dvoujádrový procesor AMD Turion(tm) II Neo N40L (64bitový)
  • RAM: 8 GB non-ECC RAM (instalováno předchozím vlastníkem)
  • blesk: 4 GB USB disk
  • SATA konektory:4+1
  • NIC: 1 Gbps onboard NIC

Netřeba dodávat, že navzdory tomu, že je již několik let starý, specifikace tohoto serveru je stále lepší než většina možností NAS na trhu, zejména pokud jde o RAM. O něco později jsem dokonce upgradoval na 16 GB ECC se zvýšenou velikostí vyrovnávací paměti a zvýšenou ochranou dat.

Výběr pevných disků

Nyní máme skvěle fungující systém a zbývá jen vybrat pro něj pevné disky. Je zřejmé, že za těch 75 $ jsem dostal pouze samotný server bez HDD, což mě nepřekvapilo.

Po malém průzkumu jsem zjistil, že HDD WD Red jsou nejvhodnější pro provoz NAS systémů 24/7. Abych je koupil, obrátil jsem se na Amazon, kde jsem zakoupil 4 kopie po 3 TB. V zásadě můžete připojit jakýkoli pevný disk, který chcete, ale ujistěte se, že mají stejnou kapacitu a rychlost. To vám pomůže vyhnout se možným problémům s výkonem RAID v dlouhodobém horizontu.

Nastavení systému

Myslím, že mnozí budou systém používat pro své NAS sestavení FreeNASa není na tom nic špatného. I přes možnost instalace tohoto systému na můj server jsem však raději použil CentOS, protože systém ZFS na Linuxu je zpočátku připraven pro produkční prostředí a obecně je mi správa linuxového serveru známější. Kromě toho mě nezajímalo ani fešné rozhraní a funkce, které poskytuje FreeNAS - stačilo mi pole RAIDZ a sdílení AFP.

Instalace CentOS na USB je poměrně jednoduchá – stačí zadat USB jako spouštěcí zdroj a po spuštění vás průvodce instalací provede všemi jeho fázemi.

Sestavení RAID

Po úspěšné instalaci CentOS jsem také nainstaloval ZFS na Linux podle uvedeného kroky zde.

Jakmile byl tento proces dokončen, načetl jsem modul jádra ZFS:

$ sudo modprobe zfs

A vytvořil 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

Vezměte prosím na vědomí, že zde používám ID pevných disků namísto jejich zobrazovaných názvů (sdx), aby se snížila šance, že se po spuštění nezdaří připojit kvůli změně písmene.

Také jsem přidal mezipaměť ZIL a L2ARC běžící na samostatném SSD, čímž jsem tento SSD rozdělil na dva oddíly: 5 GB pro ZIL a zbytek pro L2ARC.

Co se týče RAIDZ1, tak ten vydrží 1 poruchu disku. Mnozí tvrdí, že tato možnost fondu by se neměla používat kvůli pravděpodobnosti selhání druhého disku během procesu přestavby RAID, což může vést ke ztrátě dat. Toto doporučení jsem ignoroval, protože jsem pravidelně pořizoval záložní kopie důležitých dat na vzdáleném zařízení a selhání i celého pole může ovlivnit pouze dostupnost dat, nikoli však jejich bezpečnost. Pokud nemáte možnost vytvářet zálohy, pak by bylo lepší použít řešení jako RAIDZ2 nebo RAID10.

Úspěšné vytvoření fondu můžete ověřit spuštěním:

$ sudo zpool status

и

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

Ve výchozím nastavení ZFS připojí nově vytvořený fond přímo /, což je obecně nežádoucí. Můžete to změnit spuštěním:

zfs set mountpoint=/mnt/data data

Zde si můžete vybrat vytvoření jedné nebo více datových sad pro uložení dat. Vytvořil jsem dva, jeden pro zálohování Time Machine a jeden pro sdílené ukládání souborů. Velikost datové sady Time Machine jsem omezil na kvótu 512 GB, abych zabránil jejímu nekonečnému růstu.

Optimalizace

zfs set compression=on data

Tento příkaz umožňuje podporu komprese ZFS. Komprese využívá minimální výkon procesoru, ale může výrazně zlepšit propustnost I/O, takže se vždy doporučuje.

zfs set relatime=on data

Tímto příkazem snížíme počet aktualizací na atimeke snížení generování IOPS při přístupu k souborům.

Ve výchozím nastavení používá ZFS na Linuxu 50 % fyzické paměti pro ARC. V mém případě, když je celkový počet souborů malý, může být bezpečně zvýšen 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 Můžete ověřit, že se změny projevily:

$ 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 úkolů

Použil jsem systemd-zpool-scrub nakonfigurovat časovače systemd tak, aby prováděly čištění jednou týdně a zfs-auto-snapshot automaticky vytvářet snímky každých 15 minut, 1 hodinu a 1 den.

Instalace Netatalk

nettalk je open source implementace AFP (Protokol podávání Apple). Následující oficiální instalační pokyny pro CentOS, doslova jsem během několika minut obdržel sestavený a nainstalovaný balíček RPM.

Nastavení konfigurace

$ 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

Vezměte prosím na vědomí, že vol dbnest je v mém případě zásadní zlepšení, protože Netatalk ve výchozím nastavení zapisuje databázi CNID do kořenového adresáře souborového systému, což nebylo vůbec žádoucí, protože můj hlavní souborový systém běží na USB a je tedy relativně pomalý. Zapínání vol dbnest má za následek uložení databáze do Volume root, který v tomto případě patří do fondu ZFS a je již o řád produktivnější.

Povolení portů v brá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
Pokud bylo vše nakonfigurováno správně, váš stroj by se měl zobrazit ve Finderu a Time Machine by měl také fungovat.

Další nastavení
SMART monitorování

Doporučuje se sledovat stav vašich disků, abyste předešli selhání disku.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Démon pro UPS

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

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

Upgrade hardwaru

Týden po nastavení systému jsem se začal stále více znepokojovat serverovou pamětí bez ECC. V případě ZFS se navíc bude velmi hodit přídavná paměť pro ukládání do vyrovnávací paměti. Vrátil jsem se tedy do Amazonu, kde jsem koupil 2x Kingston DDR3 8GB ECC RAM za 80 $ za kus a nahradil jsem stolní RAM nainstalovanou předchozím majitelem. Systém se nastartoval poprvé bez problémů a ujistil jsem se, že je aktivována podpora ECC:

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

Výsledek

Výsledek mě velmi potěšil. Nyní mohu neustále zaměstnávat 1Gbps LAN připojení serveru kopírováním souborů a Time Machine funguje bezchybně. Celkově jsem tedy s nastavením spokojený.

Celková cena:

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

Celkem = $ 689

Nyní mohu říci, že cena za to stála.

Vyrábíte si vlastní NAS servery?

Vybudování levného domácího NAS systému na Linuxu

Vybudování levného domácího NAS systému na Linuxu

Zdroj: www.habr.com

Přidat komentář