Изградба на ефтин систем NAS за домашен Linux

Изградба на ефтин систем NAS за домашен Linux

Јас, како и многу други корисници на MacBook Pro, се соочив со проблемот на недоволна внатрешна меморија. Да бидам попрецизен, rMBP што го користев секојдневно беше опремен со SSD со капацитет од само 256 GB, што, нормално, не беше доволно долго време.

И кога, згора на сè друго, почнав да снимам видеа за време на моите летови, ситуацијата само се влоши. Обемот на снимките снимени по таквите летови беше 50+ GB, а мојот лош SSD од 256 GB многу брзо се наполни, принудувајќи ме да купам надворешен диск од 1 TB. Сепак, по една година, повеќе не можеше да се справи со количината на податоци што ги генерирав, а да не зборуваме за недостатокот на вишок и резервна копија што го направија несоодветно за хостирање на важни информации.

Така, во еден момент решив да изградам голем NAS со надеж дека овој систем ќе трае барем неколку години без да бара нова надградба.

Ја напишав оваа статија првенствено како потсетник за тоа што точно сум направил и како го направив тоа во случај да треба повторно да го направам тоа. Се надевам дека и вам ќе ви биде од корист доколку одлучите да го сторите истото.

Можеби е полесно да се купи?

Значи, знаеме што сакаме да добиеме, останува прашањето: како?

Најпрво ги разгледав комерцијалните решенија и особено ја разгледав Synology, која требаше да ги обезбеди најдобрите NAS системи за потрошувачи на пазарот. Сепак, цената на оваа услуга се покажа доста висока. Најевтиниот систем со 4 полиња чини 300 долари и не вклучува хард дискови. Покрај тоа, самото внатрешно полнење на таков комплет не е особено импресивно, што ги доведува во прашање неговите реални перформанси.

Тогаш си помислив: зошто сам да не изградам NAS сервер?

Наоѓање соодветен сервер

Ако сакате да соберете таков сервер, тогаш пред сè треба да го пронајдете вистинскиот хардвер. Искористениот сервер треба да биде сосема соодветен за оваа градба, бидејќи нема да ни требаат многу перформанси за задачи за складирање. Меѓу неопходните работи треба да се забележи голема количина RAM меморија, неколку SATA конектори и добри мрежни картички. Бидејќи мојот сервер ќе работи во местото на мојот постојан престој, нивото на бучава исто така е важно.

Ја започнав мојата потрага на eBay. Иако најдов многу користени Dell PowerEdge R410/R210 таму за помалку од 100 долари, имајќи искуство со работа во серверска соба, знаев дека овие 1U единици прават премногу бучава и не се погодни за домашна употреба. Како по правило, серверите на кулата честопати се помалку бучни, но, за жал, ги имаше малку на eBay, и сите беа скапи или недоволно моќни.

Следното место за разгледување беше Craiglist, каде што најдов некој што продава користен HP ProLiant N40L за само 75 долари! Бев запознаен со овие сервери, кои обично чинат околу 300 долари дури и користени, па му испратив е-пошта на продавачот со надеж дека огласот е сè уште активен. Откако дознав дека тоа е така, без размислување двапати се упатив кон Сан Матео за да го земам овој сервер, што на прв поглед дефинитивно ме радуваше. Имаше минимално абење и освен малку прашина, се останато беше супер.

Изградба на ефтин систем NAS за домашен Linux
Фотографија на серверот, веднаш по купувањето

Еве ги спецификациите за комплетот што го купив:

  • Процесорот: AMD Turion(tm) II Neo N40L двојадрен процесор (64-битен)
  • RAM меморија: 8 GB RAM без ECC (инсталирана од претходниот сопственик)
  • Флеш: 4 GB USB-диск
  • SATA конектори:4+1
  • NIC: 1 Gbps вграден NIC

Непотребно е да се каже дека и покрај тоа што е стар неколку години, спецификацијата на овој сервер е сè уште супериорна во однос на повеќето NAS опции на пазарот, особено во однос на RAM меморијата. Малку подоцна, дури и надградив до 16 GB ECC со зголемена големина на баферот и зголемена заштита на податоците.

Избор на хард дискови

Сега имаме одличен работен систем и останува само да избереме хард дискови за него. Очигледно, за тие 75 долари го добив само самиот сервер без HDD, што не ме изненади.

Откако направив мало истражување, дознав дека WD Red HDD се најпогодни за работа на NAS системи 24/7. За да ги купам, се обратив до Амазон, каде што купив 4 копии од по 3 ТБ. Во основа, можете да поврзете кој било хард диск што сакате, но погрижете се тие да имаат ист капацитет и брзина. Ова ќе ви помогне да избегнете можни проблеми со перформансите на RAID на долг рок.

Системско поставување

Мислам дека многумина ќе го користат системот за нивните NAS-изгради FreeNAS, и нема ништо лошо во тоа. Сепак, и покрај можноста за инсталирање на овој систем на мојот сервер, претпочитав да користам CentOS, бидејќи системот ZFS на Linux првично е подготвен за производствена средина и воопшто, управувањето со серверот Линукс ми е попознато. Освен тоа, не ме интересираше фенси интерфејс и функции обезбедени од FreeNAS - низата RAIDZ и споделувањето AFP ми беа доволни.

Инсталирањето на CentOS на USB е прилично едноставно - само наведете USB како извор за подигање, а по стартувањето, волшебникот за инсталација ќе ве води низ сите негови фази.

Изградба на RAID

По успешно инсталирање на CentOS, инсталирав и ZFS на 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

Ве молиме имајте предвид дека овде ги користам идентификаторите на тврдите дискови наместо нивните прикажани имиња (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. Компресијата користи минимална моќност на процесорот, но може значително да ја подобри пропусната моќ на I/O, затоа секогаш се препорачува.

zfs set relatime=on data

Со оваа команда го намалуваме бројот на ажурирања на atimeза да се намали генерирањето IOPS при пристап до датотеки.

Стандардно, ZFS на Linux користи 50% од физичката меморија за ARC. Во мојот случај, кога вкупниот број на датотеки е мал, ова може безбедно да се зголеми на 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 да ги конфигурирате системските тајмери ​​да вршат чистење еднаш неделно и zfs-автоматска слика за автоматско креирање снимки на секои 15 минути, 1 час и 1 ден.

Инсталирање на Netatalk

Нетаталк е имплементација со отворен код на AFP (Протокол за поднесување на Apple). Следи официјални упатства за инсталација за CentOС, буквално добив склопен и инсталиран 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 --постојана --zone=public --add-port=afpovertcp/tcp
Ако сè е правилно конфигурирано, вашата машина треба да се појави во Finder, а Time Machine треба да работи исто така.

Дополнителни поставки
ПАМЕТНО следење

Се препорачува да го следите статусот на вашите дискови за да спречите дефект на дискот.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Демон за UPS-от

Го следи полнењето на APC UPS-от и го исклучува системот кога полнењето станува критично ниско.

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

Хардверска надградба

Една недела по поставувањето на системот, почнав да станувам сè позагрижен за меморијата на серверот што не е ECC. Дополнително, во случајот со ZFS, дополнителната меморија за баферирање ќе биде многу корисна. Така, се вратив во Амазон каде што купив 2x Kingston DDR3 8GB ECC RAM за 80 долари секоја и ја заменив RAM меморијата на работната површина инсталирана од претходниот сопственик. Системот се подигна првиот пат без никакви проблеми и се уверив дека поддршката за ECC е активирана:

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

Резултира

Бев многу задоволен од резултатот. Сега можам постојано да ја држам зафатена 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

Извор: www.habr.com

Додадете коментар