Bygge et billig hjemme-NAS-system på Linux

Bygge et billig hjemme-NAS-system på Linux

Jeg, som mange andre MacBook Pro-brukere, ble møtt med problemet med utilstrekkelig internminne. For å være mer presis var rMBP-en jeg brukte daglig utstyrt med en SSD med en kapasitet på bare 256 GB, noe som naturligvis ikke var nok i lang tid.

Og da jeg på toppen av alt annet begynte å spille inn videoer under flyturene, ble situasjonen bare verre. Volumet av opptakene som ble filmet etter slike flyvninger var 50+ GB, og min dårlige 256 GB SSD ble veldig snart fylt opp, og tvang meg til å kjøpe en ekstern 1TB-stasjon. Etter ett år kunne den imidlertid ikke lenger håndtere mengden data jeg genererte, for ikke å nevne mangelen på redundans og sikkerhetskopiering gjorde den uegnet for å være vert for viktig informasjon.

Så på et tidspunkt bestemte jeg meg for å bygge en stor NAS i håp om at dette systemet skulle vare i minst et par år uten å kreve en ny oppgradering.

Jeg skrev denne artikkelen først og fremst som en påminnelse om nøyaktig hva jeg gjorde og hvordan jeg gjorde det i tilfelle jeg trenger å gjøre det igjen. Jeg håper at det vil være nyttig for deg også hvis du bestemmer deg for å gjøre det samme.

Kanskje det er lettere å kjøpe?

Så vi vet hva vi ønsker å få, spørsmålet gjenstår: hvordan?

Jeg så først på kommersielle løsninger og så spesielt på Synology, som skulle gi de beste NAS-systemene av forbrukerkvalitet på markedet. Kostnaden for denne tjenesten viste seg imidlertid å være ganske høy. Det billigste 4-bay systemet koster $300+ og inkluderer ikke harddisker. I tillegg er den interne fyllingen av et slikt sett i seg selv ikke spesielt imponerende, noe som stiller spørsmål ved dens virkelige ytelse.

Da tenkte jeg: hvorfor ikke bygge en NAS-server selv?

Finne en passende server

Hvis du skal sette sammen en slik server, må du først og fremst finne riktig maskinvare. En brukt server bør være ganske egnet for denne bygningen, siden vi ikke trenger mye ytelse for lagringsoppgaver. Blant de nødvendige tingene bør vi merke oss en stor mengde RAM, flere SATA-kontakter og gode nettverkskort. Siden serveren min vil fungere i stedet for min faste bolig, har støynivået også betydning.

Jeg startet mitt søk på eBay. Selv om jeg fant mye brukt Dell PowerEdge R410/R210 der for under $100, etter å ha erfaring med å jobbe i et serverrom, visste jeg at disse 1U-enhetene bråket for mye og ikke var egnet for hjemmebruk. Som regel er tårnservere ofte mindre støyende, men dessverre var det få av dem på eBay, og de var alle enten dyre eller understrøms.

Det neste stedet å se var Craiglist, hvor jeg fant noen som solgte en brukt HP ProLiant N40L for bare $75! Jeg var kjent med disse serverne, som vanligvis koster rundt $300 selv brukt, så jeg sendte en e-post til selgeren i håp om at annonsen fortsatt var aktiv. Etter å ha lært at dette var tilfelle, dro jeg, uten å tenke to ganger, til San Mateo for å hente denne serveren, noe som ved første øyekast definitivt gledet meg. Den hadde minimal slitasje og bortsett fra litt støv var alt annet flott.

Bygge et billig hjemme-NAS-system på Linux
Bilde av serveren, umiddelbart etter kjøpet

Her er spesifikasjonene for settet jeg kjøpte:

  • prosessor: AMD Turion(tm) II Neo N40L dual-core prosessor (64-bit)
  • RAM: 8 GB ikke-ECC RAM (installert av tidligere eier)
  • Blitz: 4 GB USB-stasjon
  • SATA-kontakter: 4 + 1
  • NIC: 1 Gbps innebygd NIC

Unødvendig å si, til tross for at den er flere år gammel, er spesifikasjonen til denne serveren fortsatt overlegen de fleste NAS-alternativer på markedet, spesielt når det gjelder RAM. Litt senere oppgraderte jeg til og med til 16 GB ECC med økt bufferstørrelse og økt databeskyttelse.

Velge harddisker

Nå har vi et utmerket fungerende system, og det gjenstår bare å velge harddisker for det. Åpenbart, for de $75 fikk jeg bare selve serveren uten HDD, noe som ikke overrasket meg.

Etter å ha gjort litt research fant jeg ut at WD Red HDD-er er best egnet for å kjøre NAS-systemer 24/7. For å kjøpe dem henvendte jeg meg til Amazon, hvor jeg kjøpte 4 eksemplarer på 3 TB hver. I utgangspunktet kan du koble til hvilken som helst HDD du foretrekker, men sørg for at de har samme kapasitet og hastighet. Dette vil hjelpe deg å unngå mulige RAID-ytelsesproblemer i det lange løp.

System oppsett

Jeg tror at mange vil bruke systemet til sine NAS-bygg FreeNAS, og det er ikke noe galt med det. Til tross for muligheten for å installere dette systemet på serveren min, foretrakk jeg å bruke CentOS, siden ZFS på Linux-systemet i utgangspunktet er forberedt for et produksjonsmiljø, og generelt er det mer kjent for meg å administrere en Linux-server. Dessuten var jeg ikke interessert i det fancy grensesnittet og funksjonene levert av FreeNAS - RAIDZ-arrayen og AFP-deling var nok for meg.

Å installere CentOS på USB er ganske enkelt - bare spesifiser USB som oppstartskilden, og ved oppstart vil installasjonsveiviseren lede deg gjennom alle stadiene.

RAID-bygg

Etter å ha installert CentOS, installerte jeg også ZFS på Linux etter det som er oppført trinn her.

Når denne prosessen var fullført, lastet jeg ZFS Kernel-modulen:

$ sudo modprobe zfs

Og opprettet RAIDZ1-arrayen ved å bruke kommandoen 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

Vær oppmerksom på at her bruker jeg ID-ene til harddiskene i stedet for visningsnavnene deres (sdx) for å redusere sjansen for at de ikke klarer å montere etter oppstart på grunn av en bokstavendring.

Jeg la også til ZIL- og L2ARC-cache som kjører på en separat SSD, og ​​delte den SSD-en i to partisjoner: 5 GB for ZIL og resten for L2ARC.

Når det gjelder RAIDZ1, tåler den 1 diskfeil. Mange hevder at dette bassengalternativet ikke bør brukes på grunn av sannsynligheten for at den andre disken svikter under RAID-gjenoppbyggingsprosessen, noe som kan føre til tap av data. Jeg ignorerte denne anbefalingen, siden jeg regelmessig laget sikkerhetskopier av viktige data på en ekstern enhet, og feilen i til og med hele matrisen kan bare påvirke tilgjengeligheten til dataene, men ikke sikkerheten. Hvis du ikke har muligheten til å ta sikkerhetskopier, vil det være bedre å bruke løsninger som RAIDZ2 eller RAID10.

Du kan bekrefte at opprettelsen av bassenget var vellykket ved å kjøre:

$ sudo zpool status

и

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

Som standard monterer ZFS det nyopprettede bassenget direkte til /, som generelt er uønsket. Du kan endre dette ved å kjøre:

zfs set mountpoint=/mnt/data data

Herfra kan du velge å opprette ett eller flere datasett for å lagre dataene. Jeg opprettet to, en for Time Machine-sikkerhetskopi og en for delt fillagring. Jeg begrenset størrelsen på Time Machine-datasettet til en kvote på 512 GB for å forhindre endeløs vekst.

Optimalisering

zfs set compression=on data

Denne kommandoen aktiverer ZFS-komprimeringsstøtte. Komprimering bruker minimalt med CPU-kraft, men kan forbedre I/O-gjennomstrømningen betydelig, så det anbefales alltid.

zfs set relatime=on data

Med denne kommandoen reduserer vi antall oppdateringer til atimefor å redusere IOPS-generering ved tilgang til filer.

Som standard bruker ZFS på Linux 50 % av fysisk minne for ARC. I mitt tilfelle, når det totale antallet filer er lite, kan dette trygt økes til 90% siden ingen andre applikasjoner vil kjøre på serveren.

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

Deretter bruker arc_summary.py Du kan bekrefte at endringene har trådt i kraft:

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

Sette opp tilbakevendende oppgaver

jeg brukte systemd-zpool-skrubb å konfigurere systemtimere for å utføre opprydding en gang i uken og zfs-auto-snapshot for å automatisk lage øyeblikksbilder hvert 15. minutt, 1 time og 1 dag.

Installerer Netatalk

nettalk er en åpen kildekode-implementering av AFP (Apple-arkiveringsprotokoll). Følgende offisielle installasjonsinstruksjoner for CentOS, jeg mottok bokstavelig talt en montert og installert RPM-pakke på bare et par minutter.

Konfigurasjonsoppsett

$ 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

Vær oppmerksom på det vol dbnest er en stor forbedring i mitt tilfelle, siden Netatalk som standard skriver CNID-databasen til roten av filsystemet, noe som slett ikke var ønskelig siden hovedfilsystemet mitt kjører på USB og derfor er relativt tregt. Slå på vol dbnest resulterer i å lagre databasen i volumroten, som i dette tilfellet tilhører ZFS-poolen og allerede er en størrelsesorden mer produktiv.

Aktiverer porter i brannmur

$ sudo firewall-cmd --permanent --zone=public --add-service=mdns
$ sudo firewall-cmd --permanent --zone=public --add-port=afpovertcp/tcp

sudo brannmur-cmd --permanent --zone=public --add-port=afpovertcp/tcp
Hvis alt var riktig konfigurert, skal maskinen din vises i Finder, og Time Machine skal også fungere.

Tilleggsinnstillinger
SMART overvåking

Det anbefales å overvåke statusen til diskene dine for å forhindre diskfeil.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Daemon for UPS

Overvåker ladingen til APC UPS og slår av systemet når ladningen blir kritisk lav.

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

Maskinvareoppgradering

En uke etter å ha satt opp systemet begynte jeg å bli stadig mer bekymret for serverens ikke-ECC-minne. I tillegg, når det gjelder ZFS, vil ekstra minne for buffering være svært nyttig. Så jeg dro tilbake til Amazon hvor jeg kjøpte 2x Kingston DDR3 8GB ECC RAM for $80 hver og erstattet skrivebords-RAM-en installert av den forrige eieren. Systemet startet opp første gang uten problemer, og jeg sørget for at ECC-støtte var aktivert:

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

Resultat

Jeg ble veldig fornøyd med resultatet. Nå kan jeg hele tiden holde serverens 1Gbps LAN-tilkobling opptatt ved å kopiere filer, og Time Machine fungerer feilfritt. Så totalt sett er jeg fornøyd med oppsettet.

Totalkostnad:

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

Totalt = $ 689

Nå kan jeg si at prisen var verdt det.

Lager du dine egne NAS-servere?

Bygge et billig hjemme-NAS-system på Linux

Bygge et billig hjemme-NAS-system på Linux

Kilde: www.habr.com

Legg til en kommentar