Зборка недарагі хатняй NAS-сістэмы на Linux

Зборка недарагі хатняй NAS-сістэмы на Linux

Я, як і шматлікія іншыя карыстачы MacBook Pro, сутыкнуўся з праблемай нястачы ўнутранай памяці. Калі казаць дакладней, то выкарыстоўваны мной штодня rMBP быў абсталяваны SSD аб'ёмам усяго 256GB, чаго, натуральна, надоўга не хапала.

А калі я плюс да ўсяго стаў запісваць відэа падчас сваіх палётаў, сітуацыя толькі пагоршылася. Аб'ём знятых матэрыялаў пасля такіх палётаў складаў 50+ GB, і мой няшчасны SSD на 256GB вельмі хутка запоўніўся, прымусіўшы мяне набыць вонкавую кружэлку на 1TB. Тым не менш, праз адзін год, і ён перастаў спраўляцца з генераваным мной аб'ёмамі дадзеных, не кажучы ўжо пра тое, што недахоп надмернасці і рэзервовага капіявання рабілі яго непрыдатным для размяшчэння важнай інфармацыі.

Такім чынам, адначасова я вырашыў сабраць NAS вялікага аб'ёму ў надзеі, што гэтая сістэма пратрымаецца хаця б пару гадоў, не патрабуючы чарговага апгрэйду.

Гэты артыкул я напісаў у першую чаргу як напамінак аб тым, што менавіта і як я рабіў на выпадак, калі мне запатрабуецца зрабіць гэта зноў. Спадзяюся, што і для вас яна апынецца карысная, калі вы зберацеся рабіць тое ж самае.

Быць можа прасцей купіць?

Такім чынам, нам вядома, што мы жадаем атрымаць, застаецца пытанне як?

Спачатку я азнаёміўся з камерцыйнымі рашэннямі і разгледзеў, у прыватнасці, кампанію Synology, якая, як меркавалася, падае лепшыя NAS-сістэмы спажывецкага ўзроўня на рынку. Аднак кошт гэтага сэрвісу апынулася дастаткова высокая. Самая танная сістэма з чатырма адсекамі варта $4+, і пры гэтым цвёрдыя кружэлкі ў камплект не ўваходзяць. Акрамя таго, само ўнутранае начынне такога камплекта не асоба ўражлівая, што ставіць пад пытанне яе рэальную прадукцыйнасць.

Тады я і падумаў: а чаму б не сабраць NAS-сервер самому?

Пошук прыдатнага сервера

Калі збіраешся камплектаваць такі сервер, тое ў першую чаргу неабходна знайсці правільнае жалеза. Для дадзенай зборкі павінен суцэль падысці ўжываны сервер, бо для задач сховішчы нам не запатрабуецца адмысловай прадукцыйнасці. З неабходнага ж трэба адзначыць вялікі аб'ём RAM, некалькі SATA канектараў і добрыя сеткавыя карты. Паколькі мой сервер будзе працаваць у месцы майго сталага пражывання, то і ўзровень шуму таксама мае значэнне.

Свае пошукі я пачаў з eBay. Нягледзячы на ​​тое, што тамака я знайшоў шмат ужываных Dell PowerEdge R410/R210 коштам меней $100, маючы досвед працы ў серверным памяшканні, я ведаў, што гэтыя блокі 1U выдаюць занадта шмат шуму і для хатняга выкарыстання не падыдуць. Як правіла, сервера фармату tower часцей менш шумныя, але, на жаль, на eBay іх было выстаўлена няшмат, і ўсе яны былі альбо дарагія, альбо маламагутныя.

Наступным месцам для пошуку стаў сайт Craiglist, дзе я знайшоў чалавека, які прадаваў ужываны HP ProLiant N40L усяго за $75! Я быў знаёмы з гэтымі серверамі, якія нават у ўжываным выглядзе звычайна стаяць у раёне $300, так што я адправіў прадаўцу ліст у надзеі, што аб'ява яшчэ актуальна. Даведаўшыся, што так яно і ёсць, я, нядоўга думаючы, накіраваўся ў Сан Матэа, каб забраць гэты сервер, які ўжо з першага погляду мяне адназначна парадаваў. У яго быў мінімальны знос і, за выключэннем невялікага налёту пылу, усё астатняе было выдатна.

Зборка недарагі хатняй NAS-сістэмы на Linux
Фота сервера, адразу пасля пакупкі

А вось спецыфікацыя набытага мной камплекта:

  • CPU: AMD Turion(tm) II Neo N40L Dual-Core Processor (64-біт)
  • RAM: 8 GB non-ECC RAM (устаноўлены папярэднім уладальнікам)
  • ўспышка: 4 GB USB Drive
  • Раздымы SATA:4+1
  • NIC: 1 Gbps on-board NIC

Ці варта казаць, што нягледзячы на ​​ўзрост у некалькі гадоў, спецыфікацыя гэтага сервера па-ранейшаму пераўзыходзіць большасць варыянтаў сістэм NAS, прапанаваных на рынку, асабліва па аператыўнай памяці. Некалькі пазней я нават зрабіў апгрэйд да 16 GB ECC з павялічаным аб'ёмам буфера і падвышанай абаронай дадзеных.

Выбар цвёрдых дыскаў

Цяпер у нас ёсць выдатная працаздольная сістэма і засталося падабраць для яе жорсткія дыскі. Відавочна, што за тыя $75 я атрымаў толькі сам сервер без HDD, што мяне і не здзівіла.

Правёўшы невялікае даследаванне, я высветліў, што для працы з NAS-сістэмамі ў кругласутачным рэжыме 24/7 лепш за ўсё падыходзяць HDD WD Red. Для іх пакупкі я звярнуўся на Amazon, дзе набыў 4 экзэмпляры аб'ёмам па 3 TB. Па сутнасці, вы можаце падключыць любы пераважны HDD, але звернеце ўвагу, каб яны былі аднолькавага аб'ёму і хуткасці. Гэта дапаможа вам пазбегнуць магчымых праблем з прадукцыйнасці RAID у даляглядзе.

Настройка сістэмы

Думаю, што шмат хто будзе выкарыстоўваць для сваіх NAS-зборак сістэму. FreeNAS, і ў гэтым няма нічога дрэннага. Аднак, нягледзячы на ​​магчымасць усталёўкі гэтай сістэмы на сваім серверы, я ўпадабаў выкарыстоўваць CentOS, паколькі сістэма ZFS on Linux першапачаткова падрыхтаваная да прадакшэн-асяроддзю, і наогул кіраванне Linux-серверам мне больш знаёма. Акрамя таго, мяне не цікавіў модны інтэрфейс і функцыі, якія прадстаўляюцца FreeNAS - мне было досыць масіва RAIDZ і сумеснага выкарыстання AFP.

Усталяваць CentOS на USB досыць проста - досыць паказаць USB у якасці крыніцы загрузкі, і пры запуску майстар усталёўкі правядзе вас па ўсіх яе этапах.

Зборка RAID

Пасля паспяховай усталёўкі CentOS я таксама ўсталяваў ZFS on Linux, вынікаючы пералічаным тут крокам.

Па завяршэнні гэтага працэсу я загрузіў модуль ZFS Kernel:

$ sudo modprobe zfs

І стварыў масіў RAIDZ1 пры дапамозе каманды 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

Звярніце ўвагу, што тут я выкарыстоўваю ID жорсткіх дыскаў замест іх адлюстраваных імёнаў (sdx), каб паменшыць шанец збою іх мантавання пасля загрузкі з-за змены літарнага абазначэння.

Я таксама дадаў ZIL і кэш L2ARC, якія выконваюцца на асобным SSD, разбіўшы гэты SSD на дзве часткі: 5GB пад ZIL і астатак пад L2ARC.

Што да RAIDZ1, то ён можа вытрымаць адмову 1 дыска. Шматлікія сцвярджаюць, што дадзены варыянт пула не варта выкарыстоўваць з-за верагоднасці выйсця з ладу другой кружэлкі падчас перазборкі RAID, што багата стратай дадзеных. Я ж занядбаў гэтай рэкамендацыяй, паколькі рэгулярна рабіў рэзервовыя копіі важных дадзеных на выдаленай прыладзе, і выйсце са строю нават усяго масіва можа паўплываць толькі на даступнасць дадзеных, але не іх захаванасць. Калі ў вас няма магчымасці рабіць рэзервовыя копіі, то лепш будзе выкарыстоўваць рашэнні, накшталт RAIDZ2 ці RAID10.

Упэўніцца ў паспяховасці стварэння пула можна, выканаўшы:

$ sudo zpool status

и

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

Па змаўчанні ZFS мантуе толькі што створаны пул прама ў /, Што, як правіла, непажадана. Змяніць гэта можна, выканаўшы:

zfs set mountpoint=/mnt/data data

Адсюль вы можаце выбраць стварыць адзін або некалькі датасетаў для захоўвання дадзеных. Я стварыў два, адзін для бэкапу Time Machine і другі для агульнага сховішчы файлаў. Аб'ём датасета Time Machine я абмежаваў квотай у 512 GB, каб папярэдзіць яго бясконцы рост.

Аптымізацыя

zfs set compression=on data

Гэтая каманда ўключае падтрымку сціску ZFS. Сціск задзейнічае мінімум магутнасці CPU, але можа істотна палепшыць прапускную здольнасць I/O, таму заўсёды рэкамендуецца да выкарыстання.

zfs set relatime=on data

З дапамогай гэтай каманды мы памяншаем колькасць абнаўленняў да atime, Каб паменшыць генерацыю IOPS пры звароце да файлаў.

Па змаўчанні ZFS on Linux выкарыстае для ARC 50% фізічнай памяці. У маім выпадку, калі агульны лік файлаў невяліка, гэты аб'ём можна бяспечна павялічыць да 90%, бо іншыя прыкладанні на серверы выконвацца не будуць.

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

Затым пры дапамозе arc_summary.py можна пераканацца, што змены набылі моц:

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

Настройка паўтаральных задач

Я выкарыстоўваў systemd-zpool-scrub для налады systemd-таймераў на выкананне ачысткі раз у тыдзень і zfs-auto-snapshot для аўтаматычнага стварэння здымкаў стану кожныя 15 хвілін, 1 гадзіну і 1 дзень.

Ўстаноўка Netatalk

Нетатальк - гэта адкрытая рэалізацыя AFP (Пратакол падачы дакументаў Apple). Прытрымліваючыся афіцыйнай інструкцыі па ўстаноўцы для CentOS, я літаральна за пару хвілін атрымаў сабраны і ўсталяваны пакет RPM.

Настройка канфігурацыі

$ 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

Звярніце ўвагу, што vol dbnest з'яўляецца ў маім выпадку сур'ёзным паляпшэннем, бо па змаўчанні Netatalk піша базу дадзеных CNID у корань файлавай сістэмы, што было зусім непажадана, паколькі мая асноўная файлавая сістэма выконваецца на USB, у сувязі з чым працуе адносна павольна. Уключэнне ж vol dbnest прыводзіць да захавання базы дадзеных у корані Volume, які ў гэтым выпадку ставіцца да пула ZFS і ўжо на парадак прадукцыйней.

Уключэнне партоў у 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
Калі ўсё было наладжана дакладна, то ваша машына павінна адлюстроўвацца ў Finder, і Time Machine таксама павінна працаваць.

Дадатковыя ўстаноўкі
SMART маніторынг

Рэкамендуецца адсочваць статус вашых дыскаў з мэтай папярэджання іх адмовы.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Дэман для КБС

Маніторыць зарад КБС APC і выключае сістэму, калі зарад становіцца крытычна малы.

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

Апаратны апгрэйд

Праз тыдзень пасля наладкі сістэмы, я пачаў усё больш турбавацца аб тым, што ў серверы ўстаноўлена памяць без ECC. Да таго ж у выпадку з ZFS дадатковая памяць для буферызацыі будзе вельмі дарэчы. Таму я зноў звярнуўся да Amazon, дзе набыў 2x Kingston DDR3 8GB ECC RAM за $80 кожны і замяніў дэсктопны RAM, усталяваны папярэднім уладальнікам. Сістэма з першага разу загрузілася без якіх-небудзь праблем, і я пераканаўся ў тым, што падтрымка ECC была актываваная:

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

Вынік

Вынік мяне вельмі парадаваў. Цяпер я магу ўвесь час загружаць 1Gbps LAN злучэнне сервера капіяваннем файлаў, і Time Machine працуе бездакорна. Так што, увогуле і цэлым, наладай я задаволены.

Выніковы кошт:

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

Разам = $ 689

Вось зараз я магу сказаць, што кошт таго каштаваў.

А вы робіце самастойна сэрвэра NAS?

Зборка недарагі хатняй NAS-сістэмы на Linux

Зборка недарагі хатняй NAS-сістэмы на Linux

Крыніца: habr.com

Дадаць каментар