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

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

Аз, както много други потребители на MacBook Pro, се сблъсках с проблема с недостатъчната вътрешна памет. За да бъда по-точен, rMBP, който използвах ежедневно, беше оборудван със SSD от само 256 GB, което, разбира се, не беше достатъчно за дълго време.

И когато започнах да записвам видеоклипове по време на полетите си, ситуацията само се влоши. Обемът на кадрите след такива полети беше 50+ GB, а моят нещастен 256GB SSD се напълни много скоро, което ме принуди да закупя 1TB външен диск. Въпреки това, след една година, той не можа да се справи с обемите данни, които генерирах, да не говорим, че липсата на излишък и резервно копие го направи неподходящ за хостване на важна информация.

И така, в един момент реших да създам NAS с голям капацитет с надеждата, че тази система ще издържи поне няколко години, без да се налага ново надграждане.

Написах тази статия предимно като напомняне какво точно и как направих, в случай че трябва да го направя отново. Надявам се, че ще ви бъде полезно, ако решите да направите същото.

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

И така, знаем какво искаме да получим, остава въпросът как?

Първо разгледах комерсиални решения и по-специално погледнах Synology, която трябваше да осигури най-добрите NAS системи от потребителски клас на пазара. Цената на тази услуга обаче беше доста висока. Най-евтината система с 4 отделения струва $300+ и не включва твърди дискове. В допълнение, вътрешният пълнеж на такъв комплект не е особено впечатляващ, което поставя под въпрос реалната му производителност.

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

Намиране на правилния сървър

Ако ще завършите такъв сървър, тогава първо трябва да намерите правилния хардуер. Използван сървър трябва да е добър за тази компилация, тъй като не се нуждаем от много производителност за задачи за съхранение. От необходимото трябва да се отбележи голямо количество RAM, няколко SATA конектора и добри мрежови карти. Тъй като сървърът ми ще работи в мястото ми на постоянно пребиваване, нивото на шума също има значение.

Започнах търсенето си в eBay. Въпреки че намерих много употребявани Dell PowerEdge R410/R210 под $100 там, след като работех в сървърна стая, знаех, че тези 1U устройства са твърде шумни и не са подходящи за домашна употреба. Като правило сървърите тип кула често са по-малко шумни, но, за съжаление, имаше малко от тях, изброени в eBay, и всички бяха или скъпи, или с недостатъчна мощност.

Следващото място, което трябваше да потърся, беше Craiglist, където намерих човек, който продава употребяван HP ProLiant N40L само за $75! Бях запознат с тези сървъри, които обикновено струват около $300 дори използвани, така че изпратих имейл на продавача с надеждата, че обявата все още е актуална. След като научих, че това е така, аз, без да се замисля, отидох в Сан Матео, за да взема този сървър, който вече на пръв поглед определено ме зарадва. Имаше минимално износване и, освен малко прах, всичко останало беше страхотно.

Изграждане на евтина Linux домашна NAS система
Сървърна снимка, веднага след закупуване

А ето и спецификацията на закупения от мен комплект:

  • процесор: AMD Turion(tm) II Neo N40L двуядрен процесор (64-битов)
  • RAM: 8 GB non-ECC RAM (инсталирана от предишен собственик)
  • флаш: 4GB USB устройство
  • SATA конектори: 4 + 1
  • NIC: 1 Gbps вграден NIC

Излишно е да казвам, че въпреки че е на няколко години, спецификацията на този сървър все още превъзхожда повечето NAS опции на пазара, особено по отношение на RAM. Малко по-късно дори надстроих до 16 GB ECC с повече буферно пространство и по-добра защита на данните.

Избор на твърди дискове

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

След като направих малко проучване, открих, че 24/7 NAS дисковете са най-подходящи за WD Red HDD. За да ги купя, се обърнах към Amazon, където закупих 4 копия по 3 TB всяко. Всъщност можете да свържете всеки предпочитан HDD, но се уверете, че те са с еднакъв размер и скорост. Това ще ви помогне да избегнете потенциални проблеми с производителността на RAID в дългосрочен план.

Системни настройки

Мисля, че мнозина ще използват системата за своите NAS компилации. FreeNAS, и в това няма нищо лошо. Но въпреки възможността да инсталирам тази система на моя сървър, предпочетох да използвам CentOS, тъй като ZFS на Linux системата първоначално е подготвена за производствена среда и като цяло съм по-запознат с управлението на Linux сървър. Освен това не се интересувах от фантастичния интерфейс и функции, предоставени от FreeNAS - бях доволен от RAIDZ масива и споделянето на AFP.

Инсталирането на CentOS на USB е доста просто - просто посочете USB като източник за зареждане и когато стартирате, съветникът за инсталиране ще ви преведе през всички стъпки.

RAID монтаж

След успешното инсталиране на CentOS, инсталирах и ZFS на Linux, като следвах изброените тук стъпки.

След завършване на този процес заредих модула на ядрото на ZFS:

$ 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 да настроите таймерите systemd да почистват веднъж седмично и zfs-автоматична снимка за автоматично създаване на моментни снимки на всеки 15 минути, 1 час и 1 ден.

Инсталация на Netatalk

nettalk е реализация на 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 води до запазване на базата данни в корена на тома, който в този случай принадлежи към пула на ZFS и вече е с порядък по-бърз.

Активиране на портове в защитната стена

$ 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

Демон за UPS

Следи заряда на APC UPS и изключва системата, когато зарядът стане критично нисък.

$ 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 3TB HDD = $440

Общо = $ 689

Сега мога да кажа, че цената си заслужаваше.

Правите ли свои собствени NAS сървъри?

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

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

Източник: www.habr.com

Добавяне на нов коментар