Budowa niedrogiego domowego systemu NAS z systemem Linux

Budowa niedrogiego domowego systemu NAS z systemem Linux

Ja, podobnie jak wielu innych użytkowników MacBooka Pro, stanąłem przed problemem niewystarczającej ilości pamięci wewnętrznej. Mówiąc dokładniej, rMBP, z którego korzystałem na co dzień, wyposażony był w dysk SSD o pojemności zaledwie 256 GB, co oczywiście na długi czas nie wystarczało.

A kiedy zacząłem nagrywać filmy podczas lotów, sytuacja tylko się pogorszyła. Ilość materiału filmowego po takich lotach wynosiła ponad 50 GB, a mój nieszczęsny dysk SSD 256 GB bardzo szybko się zapełnił, co zmusiło mnie do zakupu dysku zewnętrznego o pojemności 1 TB. Jednak po roku nie był w stanie nadążyć za ilością generowanych przeze mnie danych, nie wspominając już o braku redundancji i kopii zapasowych, co sprawiło, że nie nadawał się do przechowywania ważnych informacji.

Dlatego w pewnym momencie zdecydowałem się zbudować serwer NAS o dużej pojemności, mając nadzieję, że system ten będzie działał co najmniej kilka lat bez konieczności kolejnej modernizacji.

Napisałem ten artykuł przede wszystkim po to, aby przypomnieć dokładnie, co i jak zrobiłem, na wypadek, gdybym musiał to zrobić ponownie. Mam nadzieję, że będzie dla Ciebie przydatny, jeśli zdecydujesz się zrobić to samo.

Może łatwiej kupić?

Wiemy już co chcemy uzyskać, pozostaje pytanie jak?

Najpierw przyjrzałem się rozwiązaniom komercyjnym, a w szczególności przyjrzałem się firmie Synology, która miała dostarczać najlepsze na rynku systemy NAS klasy konsumenckiej. Jednak koszt tej usługi był dość wysoki. Najtańszy system z 4 kieszeniami kosztuje ponad 300 dolarów i nie obejmuje dysków twardych. Poza tym wewnętrzne wypełnienie takiego zestawu nie robi szczególnego wrażenia, co stawia pod znakiem zapytania jego realne wykonanie.

Wtedy pomyślałem: dlaczego sam nie zbudujesz serwera NAS?

Znalezienie odpowiedniego serwera

Jeśli masz zamiar skompletować taki serwer, to przede wszystkim musisz znaleźć odpowiedni sprzęt. Używany serwer powinien wystarczyć do tej kompilacji, ponieważ nie potrzebujemy dużej wydajności do zadań związanych z pamięcią masową. Z niezbędnych należy zauważyć dużą ilość pamięci RAM, kilka złączy SATA i dobre karty sieciowe. Ponieważ mój serwer będzie pracował w miejscu mojego stałego zamieszkania, poziom hałasu również ma znaczenie.

Zacząłem poszukiwania w serwisie eBay. Chociaż znalazłem tam wiele używanych Dell PowerEdge R410/R210 w cenie poniżej 100 dolarów, po pracy w serwerowni wiedziałem, że te jednostki 1U są zbyt głośne i nie nadają się do użytku domowego. Z reguły serwery wieżowe są często mniej hałaśliwe, ale niestety w serwisie eBay było ich niewiele i wszystkie były albo drogie, albo miały słabą moc.

Następnym miejscem, które odwiedziłem, była Craiglist, gdzie znalazłem mężczyznę sprzedającego używane urządzenie HP ProLiant N40L za jedyne 75 dolarów! Znałem te serwery, które zwykle kosztują około 300 dolarów, nawet w używanej formie, więc wysłałem e-mail do sprzedawcy w nadziei, że ogłoszenie jest nadal aktualne. Dowiedziawszy się, że tak właśnie jest, bez zastanowienia pojechałem do San Mateo po ten serwer, z czego zdecydowanie od pierwszego wejrzenia byłem zadowolony. Miał minimalne ślady użytkowania i poza odrobiną kurzu wszystko inne było w porządku.

Budowa niedrogiego domowego systemu NAS z systemem Linux
Zdjęcie serwera, zaraz po zakupie

A oto specyfikacja zakupionego zestawu:

  • CPU: Dwurdzeniowy procesor AMD Turion(tm) II Neo N40L (64-bitowy)
  • RAM: 8 GB pamięci RAM bez funkcji ECC (zainstalowane przez poprzedniego właściciela)
  • Migać: Dysk USB 4 GB
  • Złącza SATA: 4 + 1
  • NIC: Wbudowana karta sieciowa 1 Gb/s

Nie trzeba dodawać, że pomimo kilku lat specyfikacja tego serwera nadal przewyższa większość opcji NAS dostępnych na rynku, szczególnie pod względem pamięci RAM. Nieco później zaktualizowałem nawet do 16 GB ECC z większym miejscem na bufor i lepszą ochroną danych.

Wybór dysków twardych

Teraz mamy doskonale działający system i pozostaje wybrać do niego dyski twarde. Oczywiście za te 75 dolarów dostałem sam serwer bez HDD, co mnie nie zdziwiło.

Po przeprowadzeniu krótkich badań odkryłem, że dyski NAS pracujące 24 godziny na dobę, 7 dni w tygodniu najlepiej nadają się do dysków twardych WD Red. Aby je kupić, zwróciłem się do Amazona, gdzie kupiłem 4 kopie po 3 TB każda. W rzeczywistości możesz podłączyć dowolny preferowany dysk twardy, ale upewnij się, że mają ten sam rozmiar i prędkość. Pomoże to w dłuższej perspektywie uniknąć potencjalnych problemów z wydajnością macierzy RAID.

Ustawienia systemu

Myślę, że wielu będzie używać tego systemu w swoich kompilacjach NAS. FreeNASi nie ma w tym nic złego. Jednak pomimo możliwości zainstalowania tego systemu na swoim serwerze, wolałem używać CentOS, ponieważ system ZFS na Linuksie jest początkowo przygotowany na środowisko produkcyjne i w ogóle jestem bardziej obeznany z zarządzaniem serwerem Linux. Poza tym nie interesował mnie fantazyjny interfejs i funkcje oferowane przez FreeNAS – byłem zadowolony z macierzy RAIDZ i udostępniania AFP.

Instalacja CentOS na USB jest dość prosta — wystarczy określić USB jako źródło rozruchu, a po uruchomieniu kreator instalacji poprowadzi Cię przez wszystkie kroki.

Montaż RAID

Po pomyślnej instalacji CentOS zainstalowałem także ZFS na Linuksie, postępując zgodnie z listą tutaj kroki.

Po zakończeniu tego procesu załadowałem moduł jądra ZFS:

$ sudo modprobe zfs

I utworzyłem tablicę RAIDZ1 za pomocą polecenia 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

Zauważ, że tutaj używam identyfikatorów dysków twardych zamiast ich wyświetlanych nazw (sdx), aby zmniejszyć ryzyko, że nie zostaną zamontowane po uruchomieniu z powodu zmiany litery.

Dodałem także pamięć podręczną ZIL i L2ARC działającą na oddzielnym dysku SSD, dzieląc ten dysk SSD na dwie partycje: 5 GB dla ZIL i resztę dla L2ARC.

Jeśli chodzi o RAIDZ1, wytrzymuje awarię 1 dysku. Wiele osób twierdzi, że tej opcji łączenia danych nie należy używać ze względu na możliwość awarii drugiego dysku podczas odbudowy RAID, co wiąże się z utratą danych. Zlekceważyłem to zalecenie, ponieważ regularnie wykonywałem kopię zapasową ważnych danych na zdalnym urządzeniu, a awaria nawet całej macierzy może mieć wpływ jedynie na dostępność danych, ale nie na ich bezpieczeństwo. Jeśli nie masz możliwości tworzenia kopii zapasowych, lepiej byłoby skorzystać z rozwiązań takich jak RAIDZ2 lub RAID10.

Możesz sprawdzić, czy pula została pomyślnie utworzona, uruchamiając:

$ sudo zpool status

и

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

Domyślnie ZFS montuje bezpośrednio nowo utworzoną pulę /co jest ogólnie niepożądane. Możesz to zmienić, wykonując:

zfs set mountpoint=/mnt/data data

W tym miejscu możesz utworzyć jeden lub więcej zestawów danych do przechowywania danych. Utworzyłem dwa, jeden do tworzenia kopii zapasowych Time Machine i jeden do współdzielonego przechowywania plików. Ograniczyłem rozmiar zestawu danych Time Machine do limitu 512 GB, aby zapobiec jego nieograniczonemu wzrostowi.

Optymalizacja

zfs set compression=on data

To polecenie włącza obsługę kompresji ZFS. Kompresja zużywa minimalną moc procesora, ale może znacznie poprawić przepustowość operacji we/wy, dlatego jest zawsze zalecana.

zfs set relatime=on data

Za pomocą tego polecenia zmniejszamy liczbę aktualizacji do atimeaby zmniejszyć generowanie IOPS podczas uzyskiwania dostępu do plików.

Domyślnie ZFS w systemie Linux wykorzystuje 50% pamięci fizycznej dla ARC. W moim przypadku, gdy całkowita liczba plików jest niewielka, liczbę tę można bezpiecznie zwiększyć do 90%, ponieważ inne aplikacje na serwerze nie będą działać.

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

Potem z pomocą arc_summary.py Możesz sprawdzić, czy zmiany weszły w życie:

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

Konfigurowanie zadań cyklicznych

użyłem systemd-zpool-scrub aby ustawić zegary systemowe na czyszczenie raz w tygodniu, oraz zfs-auto-snapshot aby automatycznie tworzyć migawki co 15 minut, 1 godzinę i 1 dzień.

Instalacja Netatalka

nettalk jest implementacją AFP typu open source (Protokół zgłoszenia Apple). Następny oficjalne instrukcje instalacji dla CentOS, udało mi się zbudować i zainstalować pakiet RPM w ciągu zaledwie kilku minut.

Ustawienie konfiguracji

$ 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

Uwaga! vol dbnest to w moim przypadku znaczna poprawa, ponieważ Netatalk domyślnie zapisuje bazę danych CNID w katalogu głównym systemu plików, co nie było pożądane, ponieważ mój główny system plików jest na USB i dlatego jest stosunkowo powolny. Włączam to samo vol dbnest prowadzi do zapisania bazy danych w katalogu głównym woluminu, który w tym przypadku należy do puli ZFS i jest już o rząd wielkości szybszy.

Włączanie portów w zaporze sieciowej

$ 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
Jeśli wszystko zostało poprawnie skonfigurowane, Twoja maszyna powinna pojawić się w Finderze, a Time Machine również powinien działać.

Dodatkowe ustawienia
Inteligentne monitorowanie

Zaleca się monitorowanie stanu dysków, aby zapobiec ich awariom.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Demon dla UPS

Monitoruje ładowanie zasilacza UPS APC i wyłącza system, gdy poziom naładowania spadnie do krytycznie niskiego poziomu.

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

Aktualizacja sprzętu

Tydzień po skonfigurowaniu systemu zacząłem coraz bardziej martwić się o pamięć non-ECC zainstalowaną w serwerze. Dodatkowo w przypadku ZFS bardzo przydatna będzie dodatkowa pamięć na buforowanie. Zwróciłem się więc ponownie do firmy Amazon, gdzie kupiłem 2 pamięci RAM Kingston DDR3 8 GB ECC za 80 USD za sztukę i wymieniłem pamięć RAM zainstalowaną przez poprzedniego właściciela w komputerze stacjonarnym. System za pierwszym razem uruchomił się bez żadnych problemów, upewniłem się, że obsługa ECC jest włączona:

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

Doświadcz mocnych i skutecznych rezultatów

Wynik bardzo mnie ucieszył. Teraz mogę stale obciążać łącze LAN serwera 1Gbps poprzez kopiowanie plików, a Time Machine działa bez zarzutu. Tak więc ogólnie jestem zadowolony z konfiguracji.

Całkowity koszt:

  1. 1 * HP ProLiant N40L = 75 USD
  2. 2 * 8 GB pamięci RAM ECC = 174 USD
  3. 4*dysk twardy WD Red 3 TB = 440 USD

Razem = $ 689

Teraz mogę powiedzieć, że było warto za tę cenę.

Czy tworzysz własne serwery NAS?

Budowa niedrogiego domowego systemu NAS z systemem Linux

Budowa niedrogiego domowego systemu NAS z systemem Linux

Źródło: www.habr.com

Dodaj komentarz