Bygga ett billigt Linux Home NAS-system

Bygga ett billigt Linux Home NAS-system

Jag, liksom många andra MacBook Pro-användare, ställdes inför problemet med otillräckligt internt minne. För att vara mer exakt var den rMBP jag använde dagligen utrustad med en SSD med en kapacitet på endast 256 GB, vilket naturligtvis inte räckte länge.

Och när jag utöver allt annat började spela in videor under mina flygningar blev situationen bara värre. Volymen av filmer som filmades efter sådana flygningar var 50+ GB, och min dåliga 256 GB SSD fylldes mycket snart upp, vilket tvingade mig att köpa en extern 1TB-enhet. Men efter ett år kunde den inte längre hantera mängden data jag genererade, för att inte tala om bristen på redundans och säkerhetskopiering gjorde den olämplig för värd för viktig information.

Så vid ett tillfälle bestämde jag mig för att bygga en stor NAS i hopp om att det här systemet skulle hålla i minst ett par år utan att kräva ytterligare en uppgradering.

Jag skrev den här artikeln främst som en påminnelse om exakt vad jag gjorde och hur jag gjorde det ifall jag skulle behöva göra det igen. Jag hoppas att det kommer att vara användbart för dig också om du bestämmer dig för att göra detsamma.

Kanske är det lättare att köpa?

Så vi vet vad vi vill få, frågan kvarstår: hur?

Jag tittade först på kommersiella lösningar och tittade särskilt på Synology, som var tänkt att tillhandahålla de bästa konsumentklassade NAS-systemen på marknaden. Kostnaden för denna tjänst visade sig dock vara ganska hög. Det billigaste systemet med fyra fack kostar $4+ och inkluderar inte hårddiskar. Dessutom är den interna fyllningen av ett sådant kit i sig inte särskilt imponerande, vilket ifrågasätter dess verkliga prestanda.

Då tänkte jag: varför inte bygga en NAS-server själv?

Att hitta en lämplig server

Om du ska montera en sådan server måste du först och främst hitta rätt hårdvara. En använd server borde vara ganska lämplig för denna konstruktion, eftersom vi inte behöver mycket prestanda för lagringsuppgifter. Bland de nödvändiga sakerna bör vi notera en stor mängd RAM, flera SATA-kontakter och bra nätverkskort. Eftersom min server kommer att fungera i min permanenta bostad spelar ljudnivån också roll.

Jag började min sökning på eBay. Även om jag hittade många begagnade Dell PowerEdge R410/R210 där för under 100 $, med erfarenhet av att arbeta i ett serverrum, visste jag att dessa 1U-enheter gjorde för mycket ljud och inte var lämpliga för hemmabruk. Som regel är tornservrar ofta mindre bullriga, men tyvärr fanns det få av dem på eBay, och de var alla antingen dyra eller underdrivna.

Nästa ställe att leta var Craiglist, där jag hittade någon som sålde en begagnad HP ProLiant N40L för bara $75! Jag var bekant med dessa servrar, som vanligtvis kostar runt 300 dollar till och med använda, så jag mailade säljaren i hopp om att annonsen fortfarande var aktiv. Efter att ha fått reda på att så var fallet begav jag mig, utan att tänka två gånger, till San Mateo för att hämta denna server, vilket vid första anblicken definitivt gladde mig. Den hade minimalt slitage och förutom lite damm var allt annat bra.

Bygga ett billigt Linux Home NAS-system
Foto av servern, direkt efter köpet

Här är specifikationerna för kitet jag köpte:

  • CPU: AMD Turion(tm) II Neo N40L Dual-Core-processor (64-bitars)
  • RAM: 8 GB icke-ECC RAM (installerat av tidigare ägare)
  • Blixt: 4 GB USB-enhet
  • SATA-kontakter: 4 + 1
  • NIC: 1 Gbps inbyggt nätverkskort

Onödigt att säga, trots att den är flera år gammal, är specifikationen för denna server fortfarande överlägsen de flesta NAS-alternativ på marknaden, särskilt när det gäller RAM. Lite senare uppgraderade jag till och med till 16 GB ECC med ökad buffertstorlek och ökat dataskydd.

Välja hårddiskar

Nu har vi ett utmärkt fungerande system och allt som återstår är att välja hårddiskar för det. Uppenbarligen, för de $75 fick jag bara själva servern utan hårddisken, vilket inte förvånade mig.

Efter att ha gjort lite research fick jag reda på att WD Red HDDs är bäst lämpade för att köra NAS-system 24/7. För att köpa dem vände jag mig till Amazon, där jag köpte 4 exemplar på 3 TB vardera. I princip kan du ansluta vilken hårddisk du föredrar, men se till att de har samma kapacitet och hastighet. Detta hjälper dig att undvika eventuella RAID-prestandaproblem i det långa loppet.

Systeminställningar

Jag tror att många kommer att använda systemet för sina NAS-byggen FreeNAS, och det är inget fel med det. Men trots möjligheten att installera detta system på min server, föredrog jag att använda CentOS, eftersom ZFS på Linux-systemet initialt är förberett för en produktionsmiljö, och i allmänhet är hanteringen av en Linux-server mer bekant för mig. Dessutom var jag inte intresserad av det snygga gränssnittet och funktionerna från FreeNAS - RAIDZ-arrayen och AFP-delning räckte för mig.

Att installera CentOS på USB är ganska enkelt - ange bara USB som startkälla, och vid start kommer installationsguiden att guida dig genom alla dess steg.

RAID-byggd

Efter att ha lyckats installera CentOS installerade jag också ZFS på Linux enligt listan steg här.

När den här processen var klar laddade jag ZFS Kernel-modulen:

$ sudo modprobe zfs

Och skapade RAIDZ1-arrayen med kommandot 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

Observera att jag här använder hårddiskarnas ID istället för deras visningsnamn (sdx) för att minska risken för att de inte ska monteras efter start på grund av en bokstavsändring.

Jag lade också till ZIL- och L2ARC-cache som körs på en separat SSD, och delade upp den SSD:n i två partitioner: 5GB för ZIL och resten för L2ARC.

När det gäller RAIDZ1 kan den motstå 1 diskfel. Många hävdar att det här poolalternativet inte bör användas på grund av sannolikheten för att den andra disken misslyckas under RAID-återuppbyggnadsprocessen, vilket kan leda till dataförlust. Jag ignorerade den här rekommendationen, eftersom jag regelbundet gjorde säkerhetskopior av viktiga data på en fjärrenhet, och ett fel på till och med hela arrayen kan bara påverka tillgängligheten av data, men inte dess säkerhet. Om du inte har möjlighet att göra säkerhetskopior är det bättre att använda lösningar som RAIDZ2 eller RAID10.

Du kan verifiera att poolskapandet lyckades genom att köra:

$ sudo zpool status

и

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

Som standard monterar ZFS den nyskapade poolen direkt till /, vilket i allmänhet är oönskat. Du kan ändra detta genom att köra:

zfs set mountpoint=/mnt/data data

Härifrån kan du välja att skapa en eller flera datamängder för att lagra data. Jag skapade två, en för Time Machine backup och en för delad fillagring. Jag begränsade storleken på Time Machine-datauppsättningen till en kvot på 512 GB för att förhindra dess oändliga tillväxt.

optimering

zfs set compression=on data

Detta kommando aktiverar ZFS-komprimeringsstöd. Komprimering använder minimal CPU-kraft, men kan avsevärt förbättra I/O-genomströmningen, så det rekommenderas alltid.

zfs set relatime=on data

Med detta kommando minskar vi antalet uppdateringar till atimeför att minska IOPS-genereringen vid åtkomst till filer.

Som standard använder ZFS på Linux 50 % av det fysiska minnet för ARC. I mitt fall, när det totala antalet filer är litet, kan detta säkert ökas till 90% eftersom inga andra applikationer kommer att köras på servern.

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

Använd sedan arc_summary.py Du kan verifiera att ändringarna har trätt 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
...

Ställa in återkommande uppgifter

jag använde systemd-zpool-skrubb att konfigurera systemstyrda timers för att utföra rengöring en gång i veckan och zfs-auto-snapshot för att automatiskt skapa ögonblicksbilder var 15:e minut, 1 timme och 1 dag.

Installerar Netatalk

netatalk är en öppen källkod implementering av AFP (Apples arkiveringsprotokoll). Följande officiella installationsinstruktioner för CentOS, jag fick bokstavligen ett monterat och installerat RPM-paket på bara ett par minuter.

Konfigurationsinställningar

$ 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

Observera att vol dbnest är en stor förbättring i mitt fall, eftersom Netatalk som standard skriver CNID-databasen till roten av filsystemet, vilket inte alls var önskvärt eftersom mitt huvudfilsystem körs på USB och därför är relativt långsamt. Sätter på vol dbnest resulterar i att databasen sparas i volymroten, som i det här fallet tillhör ZFS-poolen och redan är en storleksordning mer produktiv.

Aktiverar portar i brandväggen

$ 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
Om allt var korrekt konfigurerat bör din maskin dyka upp i Finder, och Time Machine bör också fungera.

Ytterligare inställningar
SMART övervakning

Det rekommenderas att övervaka statusen på dina diskar för att förhindra diskfel.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Daemon för UPS

Övervakar laddningen av APC UPS och stänger av systemet när laddningen blir kritiskt låg.

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

Hårdvaruuppgradering

En vecka efter att jag satte upp systemet började jag bli allt mer oroad över serverns icke-ECC-minne. Dessutom, i fallet med ZFS, kommer ytterligare minne för buffring att vara mycket användbart. Så jag gick tillbaka till Amazon där jag köpte 2x Kingston DDR3 8GB ECC RAM för $80 styck och ersatte skrivbordsminnet installerat av den tidigare ägaren. Systemet startade första gången utan problem, och jag såg till att ECC-stödet var aktiverat:

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

Resultat

Jag blev väldigt nöjd med resultatet. Nu kan jag ständigt hålla serverns 1Gbps LAN-anslutning upptagen genom att kopiera filer, och Time Machine fungerar felfritt. Så totalt sett är jag nöjd med upplägget.

Den totala kostnaden:

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

Totalt = $ 689

Nu kan jag säga att priset var värt det.

Gör du dina egna NAS-servrar?

Bygga ett billigt Linux Home NAS-system

Bygga ett billigt Linux Home NAS-system

Källa: will.com

Lägg en kommentar