Een goedkoop Linux Home NAS-systeem bouwen

Een goedkoop Linux Home NAS-systeem bouwen

Ik werd, net als veel andere MacBook Pro-gebruikers, geconfronteerd met het probleem van onvoldoende intern geheugen. Om preciezer te zijn: de rMBP die ik dagelijks gebruikte was uitgerust met een SSD met een capaciteit van slechts 256 GB, wat uiteraard lange tijd niet genoeg was.

En toen ik bovendien tijdens mijn vluchten video's begon op te nemen, werd de situatie alleen maar erger. Het volume aan beeldmateriaal dat na dergelijke vluchten werd gefilmd, bedroeg meer dan 50 GB, en mijn arme SSD van 256 GB was al snel vol, waardoor ik een externe schijf van 1 TB moest kopen. Na een jaar kon het echter de hoeveelheid gegevens die ik genereerde niet meer verwerken, om nog maar te zwijgen van het gebrek aan redundantie en back-up, waardoor het ongeschikt werd voor het hosten van belangrijke informatie.

Dus op een gegeven moment besloot ik een NAS met grote capaciteit te bouwen in de hoop dat dit systeem minstens een paar jaar mee zou gaan zonder dat er nog een upgrade nodig was.

Ik heb dit artikel in de eerste plaats geschreven als herinnering aan wat ik precies heb gedaan en hoe ik het heb gedaan, voor het geval ik het opnieuw moet doen. Ik hoop dat het ook voor jou nuttig zal zijn als je besluit hetzelfde te doen.

Misschien is kopen makkelijker?

We weten dus wat we willen bereiken, de vraag blijft: hoe?

Ik keek eerst naar commerciële oplossingen en keek vooral naar Synology, dat de beste NAS-systemen voor consumenten op de markt moest bieden. De kosten van deze service bleken echter behoorlijk hoog. Het goedkoopste systeem met 4 bays kost $300+ en bevat geen harde schijven. Bovendien is de interne vulling van een dergelijke kit zelf niet bijzonder indrukwekkend, wat de werkelijke prestaties ervan in twijfel trekt.

Toen dacht ik: waarom bouw ik niet zelf een NAS-server?

Een geschikte server vinden

Als je zo'n server gaat voltooien, moet je allereerst de juiste hardware vinden. Een gebruikte server zou prima moeten zijn voor deze build, omdat we niet veel prestaties nodig hebben voor opslagtaken. Van het noodzakelijke moeten een grote hoeveelheid RAM, verschillende SATA-connectoren en goede netwerkkaarten worden opgemerkt. Omdat mijn server op mijn vaste verblijfplaats zal werken, is het geluidsniveau ook van belang.

Ik begon mijn zoektocht op eBay. Hoewel ik daar veel gebruikte Dell PowerEdge R410/R210 vond voor minder dan $ 100, en omdat ik ervaring had met werken in een serverruimte, wist ik dat deze 1U-eenheden te veel lawaai maakten en niet geschikt waren voor thuisgebruik. In de regel zijn torenservers vaak minder luidruchtig, maar helaas waren er maar een paar op eBay, en ze waren allemaal duur of hadden te weinig vermogen.

De volgende plek om te zoeken was Craiglist, waar ik iemand vond die een gebruikte HP ProLiant N40L verkocht voor slechts $ 75! Ik kende deze servers, die normaal gesproken zo'n $300 kosten, zelfs als ze gebruikt werden, dus heb ik de verkoper een e-mail gestuurd in de hoop dat de advertentie nog steeds actief was. Toen ik hoorde dat dit het geval was, ging ik, zonder er twee keer over na te denken, naar San Mateo om deze server op te halen, wat me op het eerste gezicht zeker beviel. Het had minimale slijtage en afgezien van een beetje stof was al het andere geweldig.

Een goedkoop Linux Home NAS-systeem bouwen
Foto van de server, direct na aankoop

Hier zijn de specificaties van de kit die ik heb gekocht:

  • CPU: AMD Turion(tm) II Neo N40L dual-coreprocessor (64-bit)
  • RAM: 8 GB niet-ECC RAM (geïnstalleerd door vorige eigenaar)
  • flash: 4 GB USB-stick
  • SATA-connectoren:4+1
  • NIC: 1 Gbps ingebouwde netwerkkaart

Het is onnodig om te zeggen dat de specificatie van deze server, ondanks dat hij enkele jaren oud is, nog steeds beter presteert dan de meeste NAS-opties op de markt, vooral op het gebied van RAM. Even later heb ik zelfs geüpgraded naar 16 GB ECC met meer bufferruimte en betere gegevensbescherming.

Harde schijven selecteren

Nu hebben we een uitstekend werkend systeem en het enige dat overblijft is het selecteren van harde schijven ervoor. Het is duidelijk dat ik voor die $ 75 alleen de server zelf kreeg zonder de HDD, wat mij niet verbaasde.

Na wat onderzoek te hebben gedaan, kwam ik erachter dat 24/7 NAS-schijven het meest geschikt zijn voor WD Red HDD's. Om ze te kopen, wendde ik me tot Amazon, waar ik 4 exemplaren van elk 3 TB kocht. In feite kunt u elke gewenste HDD aansluiten, maar zorg ervoor dat deze dezelfde grootte en snelheid hebben. Dit zal u helpen potentiële RAID-prestatieproblemen op de lange termijn te voorkomen.

Systeeminstellingen

Ik denk dat velen het systeem zullen gebruiken voor hun NAS-builds FreeNAS, en daar is niets mis mee. Ondanks de mogelijkheid om dit systeem op mijn server te installeren, gaf ik er echter de voorkeur aan om CentOS te gebruiken, omdat het ZFS op Linux-systeem in eerste instantie is voorbereid op een productieomgeving en het beheer van een Linux-server mij over het algemeen vertrouwder is. Bovendien was ik niet geïnteresseerd in de fraaie interface en functies van FreeNAS - de RAIDZ-array en het delen van AFP waren voor mij voldoende.

Het installeren van CentOS op USB is vrij eenvoudig: specificeer gewoon USB als de opstartbron, en bij het starten zal de installatiewizard u door alle fasen leiden.

RAID-assemblage

Nadat ik CentOS succesvol had geïnstalleerd, heb ik ook ZFS op Linux geïnstalleerd door het onderstaande te volgen hier stappen.

Nadat dit proces was voltooid, heb ik de ZFS Kernel-module geladen:

$ sudo modprobe zfs

En creëerde een RAIDZ1-array met behulp van de opdracht 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

Merk op dat ik hier harde schijf-ID's gebruik in plaats van hun weergegeven namen (sdx) om de kans te verkleinen dat ze na het opstarten niet kunnen worden geactiveerd vanwege een letterwijziging.

Ik heb ook ZIL- en L2ARC-cache toegevoegd die op een aparte SSD draaien, waarbij ik die SSD in twee partities heb gesplitst: 5 GB voor ZIL en de rest voor L2ARC.

Wat RAIDZ1 betreft, deze is bestand tegen 1 schijfstoring. Velen beweren dat deze pooling-optie niet mag worden gebruikt vanwege de mogelijkheid dat een tweede schijf defect raakt tijdens het opnieuw opbouwen van de RAID, wat gepaard gaat met gegevensverlies. Ik heb deze aanbeveling genegeerd, omdat ik regelmatig een back-up heb gemaakt van belangrijke gegevens op een extern apparaat, en het falen van zelfs de hele array kan alleen de beschikbaarheid van gegevens beïnvloeden, maar niet hun veiligheid. Als u niet over de mogelijkheid beschikt om back-ups te maken, kunt u beter oplossingen als RAIDZ2 of RAID10 gebruiken.

U kunt verifiëren dat de pool met succes is aangemaakt door het volgende uit te voeren:

$ sudo zpool status

и

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

Standaard koppelt ZFS de nieuw gemaakte pool rechtstreeks aan /, wat over het algemeen onwenselijk is. U kunt dit wijzigen door het volgende uit te voeren:

zfs set mountpoint=/mnt/data data

Hier kunt u ervoor kiezen om een ​​of meer datasets te maken om uw gegevens op te slaan. Ik heb er twee gemaakt, één voor de Time Machine-back-up en één voor de gedeelde bestandsopslag. Ik heb de grootte van de Time Machine-dataset beperkt tot een quotum van 512 GB om te voorkomen dat deze voor onbepaalde tijd zou groeien.

Optimalisatie

zfs set compression=on data

Met deze opdracht wordt ondersteuning voor ZFS-compressie ingeschakeld. Compressie gebruikt minimaal CPU-vermogen, maar kan de I/O-doorvoer aanzienlijk verbeteren, dus dit wordt altijd aanbevolen.

zfs set relatime=on data

Met dit commando verminderen we het aantal updates tot atimeom het genereren van IOPS bij het openen van bestanden te verminderen.

Standaard gebruikt ZFS op Linux 50% van het fysieke geheugen voor ARC. In mijn geval, als het totale aantal bestanden klein is, kan dit veilig worden verhoogd tot 90%, omdat er geen andere applicaties op de server draaien.

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

Vervolgens gebruiken arc_summary.py U kunt controleren of de wijzigingen van kracht zijn:

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

Terugkerende taken instellen

ik gebruikte systemd-zpool-scrub om systemd-timers in te stellen om één keer per week op te ruimen, en zfs-auto-snapshot om automatisch elke 15 minuten, 1 uur en 1 dag snapshots te maken.

Netatalk-installatie

nettalk is een open source-implementatie van AFP (Apple indieningsprotocol). Als vervolg op officiële installatie-instructies voor CentOS, ik heb het RPM-pakket in slechts een paar minuten gebouwd en geïnstalleerd.

Configuratie-instelling

$ 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

Houd er rekening mee dat vol dbnest is een grote verbetering in mijn geval, omdat Netatalk de CNID-database standaard naar de root van het bestandssysteem schrijft, wat niet wenselijk was omdat mijn hoofdbestandssysteem op USB staat en daarom relatief traag is. Hetzelfde aanzetten vol dbnest resulteert in het opslaan van de database in de Volume root, die in dit geval tot de ZFS-pool behoort en al een orde van grootte productiever is.

Poorten inschakelen in 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
Als alles correct is ingesteld, zou uw machine in de Finder moeten verschijnen en zou Time Machine ook moeten werken.

Aanvullende instellingen
SMART-monitoring

Het wordt aanbevolen om de status van uw schijven te controleren om schijfstoringen te voorkomen.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Daemon voor UPS

Bewaakt de lading van de APC UPS en schakelt het systeem uit wanneer de lading kritiek laag wordt.

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

Hardware-upgrade

Een week na het instellen van het systeem begon ik me steeds meer zorgen te maken over niet-ECC-geheugen dat op de server was geïnstalleerd. Bovendien zal in het geval van ZFS extra geheugen voor buffering erg handig zijn. Dus wendde ik me opnieuw tot Amazon, waar ik 2x Kingston DDR3 8GB ECC RAM kocht voor $ 80 per stuk en het desktop-RAM verving dat de vorige eigenaar had geïnstalleerd. Het systeem startte de eerste keer zonder problemen op en ik zorgde ervoor dat ECC-ondersteuning werd geactiveerd:

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

Resultaat

Ik was erg blij met het resultaat. Nu kan ik de 1Gbps LAN-verbinding van de server voortdurend bezig houden door bestanden te kopiëren, en Time Machine werkt feilloos. Dus over het algemeen ben ik blij met de opzet.

De totale kosten:

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

In totaal = $ 689

Nu kan ik zeggen dat de prijs het waard was.

Maak je je eigen NAS-servers?

Een goedkoop Linux Home NAS-systeem bouwen

Een goedkoop Linux Home NAS-systeem bouwen

Bron: www.habr.com

Voeg een reactie