Opbygning af et billigt hjemme NAS-system på Linux

Opbygning af et billigt hjemme NAS-system på Linux

Som mange andre MacBook Pro-brugere har jeg oplevet problemer med utilstrækkelig intern hukommelse. For at være mere præcis var min dagligt brugte rMBP udstyret med en SSD på kun 256GB, hvilket, som man kan forestille sig, ikke var tilstrækkeligt i længden.

Og da jeg begyndte at optage videoer under mine flyvninger, blev situationen kun værre. Mængden af optagelser efter sådanne flyvninger var over 50 GB, og min stakkels 256GB SSD blev hurtigt fyldt op, hvilket tvang mig til at købe en ekstern disk på 1TB. Alligevel, efter et år, kunne den heller ikke længere håndtere den mængde data, jeg genererede, og det nævner ikke engang, at manglen på redundans og backup gjorde den uegnet til opbevaring af vigtig information.

Så på et tidspunkt besluttede jeg at samle en NAS med stor kapacitet i håbet om, at dette system ville holde i mindst et par år uden at kræve en ny opgradering.

Jeg skrev denne artikel primært som en påmindelse om, hvad jeg gjorde og hvordan, i tilfælde af at jeg skulle gøre det igen. Jeg håber, at den også vil være nyttig for dig, hvis du overvejer at gøre det samme.

Måske er det lettere at købe?

Så vi ved, hvad vi vil opnå, men hvordan gør vi det?

Først kiggede jeg på kommercielle løsninger og overvejede specifikt company Synology, som angiveligt tilbyder de bedste NAS-systemer til forbrugermarkedet. Men prisen for denne service viste sig at være ret høj. Det billigste system med 4 skuffer koster over $300, og hårde diske er ikke inkluderet. Desuden er selve den interne hardware i et sådant sæt ikke særlig imponerende, hvilket rejser spørgsmål om dens reelle ydeevne.

Så tænkte jeg: hvorfor ikke samle en NAS-server selv?

Søgning efter den rette server

Hvis du planlægger at sammensætte en sådan server, skal du først finde det rigtige hardware. En brugt server vil være passende til denne opsætning, da vi ikke har brug for særlig ydeevne til lageropgaver. Det nødvendige inkluderer en stor mængde RAM, flere SATA-tilslutninger og gode netværkskort. Da min server vil være placeret i mit faste hjem, skal støjniveauet også tages i betragtning.

Mine søgning begyndte med eBay. Selvom jeg fandt mange brugte Dell PowerEdge R410/R210 til under $100, vidste jeg med min erfaring fra datacentre, at disse 1U-enheder laver for meget støj og ikke egner sig til hjemmebrug. Generelt er tower-servere typisk mindre støjende, men desværre var der kun få til salg på eBay, og de var enten dyre eller underpowered.

Det næste sted, jeg kiggede, var Craigslist, hvor jeg fandt en person, der solgte en brugt HP ProLiant N40L for kun $75! Jeg kendte til disse servere, som selv i brugt stand normalt koster omkring $300, så jeg sendte sælgeren en besked i håbet om, at annoncen stadig var aktiv. Da jeg fandt ud af, at det var tilfældet, tog jeg hurtigt til San Mateo for at hente denne server, som straks glædede mig med sit udseende. Den havde minimal slitage, og bortset fra lidt støv var alt andet i fremragende stand.

Opbygning af et billigt hjemme NAS-system på Linux
Billede af serveren straks efter købet

Her er specifikationen for det sæt, jeg erhvervede:

  • CPU: AMD Turion(tm) II Neo N40L Dual-Core Processor (64-bit)
  • RAM: 8 GB non-ECC RAM (installeret af den tidligere ejer)
  • Flash: 4 GB USB-drev
  • SATA-tilslutninger: 4 + 1
  • NIC: 1 Gbps on-board NIC

Det er unødvendigt at sige, at på trods af sin flere år gamle alder, overgår specifikationen af denne server stadig de fleste NAS-systemer, der tilbydes på markedet, især hvad angår RAM. Senere opgraderede jeg endda til 16 GB ECC med større bufferstørrelse og bedre databeskyttelse.

Valg af harddiske

Nu har vi et fremragende fungerende system, og det eneste, der mangler, er at finde harddiske til det. Det er tydeligt, at de $75 kun gav mig serveren uden HDD, hvilket ikke kom som en overraskelse.

Efter at have lavet lidt research fandt jeg ud af, at HDD WD Red er de bedste til NAS-systemer, som skal køre 24/7. Til deres køb gik jeg til Amazon, hvor jeg købte fire enheder på 3 TB hver. I princippet kan du tilslutte enhver foretrukken HDD, men vær opmærksom på, at de skal have samme kapacitet og hastighed. Dette vil hjælpe dig med at undgå potentielle performanceproblemer med RAID i fremtiden.

System Configuration

Jeg tror, mange vil bruge det til deres NAS-opbygninger. FreeNAS, og der er intet galt i det. Men på trods af muligheden for at installere dette system på min egen server, valgte jeg at bruge CentOS, da ZFS on Linux-systemet er oprindeligt forberedt til produktionsmiljøer, og generelt er jeg mere fortrolig med at administrere en Linux-server. Desuden var jeg ikke interesseret i det stilfulde interface og funktioner tilbydes af FreeNAS - jeg havde nok med RAIDZ-arrayet og deling via AFP.

Det er ret simpelt at installere CentOS på en USB - det kræver blot at angive USB som bootkilde, og ved opstart vil installationsguiden føre dig gennem alle dens trin.

RAID-opsætning

Efter en vellykket installation af CentOS installerede jeg også ZFS on Linux, ved at følge de anførte trin her.

Når denne proces var afsluttet, indlæste jeg ZFS Kernel-modulet:

$ sudo modprobe zfs

Og jeg oprettede et RAIDZ1-array med 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 opmærksom på, at jeg her bruger harddiskens ID i stedet for deres viste navne (sdx), for at mindske chancen for, at de ikke kan monteres korrekt efter opstart på grund af ændring i bogstavbetegnelsen.

Jeg tilføjede også ZIL og L2ARC-cache, som kører på en separat SSD, ved at opdele denne SSD i to partitioner: 5GB til ZIL og resten til L2ARC.

Når det gælder RAIDZ1, kan det holde til at en disk fejler. Mange mener, at denne poolvariant ikke bør anvendes på grund af risikoen for, at en anden disk fejler under genopbygning af RAID, hvilket kan føre til datatab. Jeg ignorerede denne anbefaling, da jeg regelmæssigt lavede sikkerhedskopier af vigtige data på et eksternt device, og en total sammenbrud af arrayet kun kunne påvirke tilgængeligheden af data, men ikke deres bevarelse. Hvis du ikke har mulighed for at lave sikkerhedskopier, er det bedre at benytte løsninger som RAIDZ2 eller RAID10.

For at sikre, at poolen blev oprettet succesfuldt, kan du køre:

$ sudo zpool status

og

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

Som standard monterer ZFS den nyligt oprettede pool direkte i /, hvad der generelt ikke er ønskeligt. Dette kan ændres ved at køre:

zfs set mountpoint=/mnt/data data

Her kan du vælge at oprette et eller flere datasæt til datalagring. Jeg har oprettet to, en til Time Machine-backup og den anden til fælles filopbevaring. Jeg har begrænset størrelsen på Time Machine-datasættet til 512 GB for at forhindre det i at vokse uendeligt.

Optimering

zfs set compression=on data

Denne kommando aktiverer ZFS-komprimering. Komprimering kræver minimalt CPU-kraft, men kan betydeligt forbedre I/O-gennemstrømning, så det anbefales altid at bruge det.

zfs set relatime=on data

Med denne kommando reducerer vi antallet af opdateringer til atime, for at reducere genereringen af IOPS, når vi tilgår filer.

Som standard bruger ZFS på Linux 50% af den fysiske hukommelse til ARC. I mit tilfælde, hvor det samlede antal filer er lille, kan denne mængde sikkert øges til 90%, da der ikke vil køre andre applikationer på serveren.

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

Derefter kan man med arc_summary.py kontrollere, at ændringerne har haft effekt:

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

Opsætning af tilbagevendende opgaver

Jeg har brugt systemd-zpool-scrub til at konfigurere systemd-timere til at udføre rengøring ugentligt og zfs-auto-snapshot til automatisk at oprette snapshots hvert 15. minut, 1 time og 1 dag.

Installation af Netatalk

Netatalk er en open source-implementering af AFP (Apple Filing Protocol). Ved at følge den officielle installationsvejledning for CentOSfik jeg på kun få minutter det RPM-pakke, der var samlet og installeret.

Konfiguration af indstillinger

$ cat /etc/netatalk/afp.conf
[datong@Titan ~]$ cat /etc/netatalk/afp.conf 
;
; Netatalk 3.x konfigurationsfil
;

[Global]
; Globale serverindstillinger
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

Bemærk venligst, at vol dbnest er i mit tilfælde en betydelig forbedring, da Netatalk som standard skriver CNID-databasen til roden af filsystemet, hvilket var helt uønsket, fordi mit primære filsystem kører på USB, hvilket gør det relativt langsomt. Aktivering af vol dbnest fører til, at databasen gemmes i rodmappen på Volume, som i dette tilfælde hører til ZFS-poolen og allerede fungerer langt hurtigere.

Aktivering af porte i 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
Hvis alt er konfigureret korrekt, skal din maskine vises i Finder, og Time Machine skal også fungere.

Yderligere installationer
S.M.A.R.T overvågning

Det anbefales at overvåge status for dine diske for at forhindre nedbrud.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Demon for UPS

Overvåger opladningen af APC UPS og slukker systemet, når opladningen bliver kritisk lav.

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

Hardwareopgradering

En uge efter systemindstillingen begyndte jeg at blive mere bekymret over, at serveren havde RAM uden ECC. Desuden ville ekstra RAM til buffering være nyttigt i tilfælde af ZFS. Så jeg vendte igen til Amazon, hvor jeg købte 2x Kingston DDR3 8GB ECC RAM til $80 hver og udskiftede det desktop-RAM, som var installeret af den tidligere ejer. Systemet bootede første gang uden problemer, og jeg bekræftede, at ECC-support var aktiveret:

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

Resultat

Resultatet glædede mig meget. Nu kan jeg konstant udnytte 1Gbps LAN-forbindelsen til serveren ved at kopiere filer, og Time Machine fungerer fejlfrit. Så alt i alt er jeg tilfreds med opsætningen.

Samlet omkostning:

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

I alt = $689

Jeg kan nu sige, at prisen var det værd.

Bygger du dine egne NAS-servere?

Opbygning af et billigt hjemme NAS-system på Linux

Opbygning af et billigt hjemme NAS-system på Linux

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster