Skip to content

Guide: Att bygga och konfigurera en NAS

Efter att jag insett att jag hade lite för många, tillräckligt stora, diskar liggandes här hemma, bestämde jag mig för att inhandla delar för en NAS. Det vore ju himla praktiskt om jag kunde få till säker lagring också, så därför tänkte jag begränsa mig till ZFS, och ZFS i sig begränsar ju mina möjligheter att välja operativsystem en hel del. Så jag stog mellan OpenSolaris och FreeBSD.

Då jag hade läst att OpenSolaris var nerlagt, tänkte jag inte lägga energi på det, så det fick bli FreeBSD (FreeNAS finns, men det har en äldre version av ZFS).
Så, delarna anlände efter ett par dagar..

Vad jag beställt är:

  • Zotac H55-ITX
  • Intel Core i3 530 2.93GHz
  • 2×2 GB 1333 MHz Corsair DDR3
  • Fractal Design Array R2

Fractal Design R2Zotac H55-ITXIntel Core i3 530

Jag utgår från att du vet var du ska hitta image-filer, hur du bränner en iso, hur du väljer boot media osv.
Det krävs kanske även en viss terminalvana. Med det avklarat så kan vi skrida till verket!
Först valde jag ”Express install”, klickar mig vidare enligt: (FreeBSD Installation guide)

Missa inte base och kernelpaket, som är ”required”!
Väl inne så loggar man in med ”root”, inget lösen. Använd ”passwd” för att sätta root lösen till något lämpligt.

# passwd

Kolla om nätverket fungerar med:

# ifconfig

Där ska stå em0 (i mitt fall) och i så fall, och för att få ett ip från din router,  kör:

# dhclient em0

Sedan drar vi ner ports, vilket kan motsvaras med ubuntus kommando”apt-get update”, om jag inte misstar mig helt. Det laddar dock ner en filsom innehåller all källkod för tillgängliga program man kan installera.Detta gör vi med ”portsnap fetch”, vilket hämtar ner paketet.Sedan gör man en ”portsnap extract” för att packa upp hela trädstrukturen. Alltså:

# portsnap fetch
# portsnap extract

Efter detta har vi nu tillgång till en massa program vi kan kompilera.
Då jag är van vid ubuntu’s standardshell bash, vill jag ha det även här, så vi installerar det istället för det nuvarande csh.

# cd /usr/ports/shells/bash
# make install clean

# rehash (detta för att bash ska bli tillgängligt i systemet)
# bash
# export EDITOR=ee

Efter detta så väljer jag att inte längre använda mig utav root-kontot, utan vi skapar helt sonika en till användare. Här följer vi standardvalen rakt igenom sånär som på frågan om man vill lägga till sin användare i någon mer grupp. Jag tycker det är käckt att kunna använda sig utav ”su” för att utföra administrativa åtgärder, så jag lägger till min användare i gruppen ”wheel” också.
Om du får en fråga vilket shell du vill använda, skriv ”bash”.

Sedan editerar vi rc.conf:

# ee /etc/rc.conf

Här lägger vi till följande:

# Network
hostname=”HÄR-SKRIVER-DU-DITT-HOSTNAME”
ifconfig_em0=”DHCP” (tänk på att ev. ändra em0 till ditt nätverkskort)

# Local services
zfs_enable=”YES”
powerd_enable=”YES”

# Network services
sshd_enable=”YES”
samba_enable=”YES”

# Sendmail
sendmail_enable=”NO”
sendmail_submit_enable=”NO”
sendmail_outbound_enable=”NO”
sendmail_msp_queue_enable=”NO”

# Synchronize time
ntpdate_enable=”YES”
ntpdate_hosts=”se.pool.ntp.org”
ntpd_enable=”YES”

För att komma ur ee, använd escape-enter-enter för att spara och avsluta.
Du kan givetvis använda valfri editor som du är bekväm med, det avgör du själv. Jag blev dock positivt överraskad av ee, så jag använder det i denna guiden.

sedan lägger vi till i /boot/loader.conf

# enable AHCI driver
ahci_load=”YES”
coretemp_load=”YES”

# Tweaks for Samba performance
kern.hz=”2000″
aio_load=”YES”

# ZFS tweaks
vfs.zfs.prefetch_disable=0
#vfs.zfs.arc_meta_limit=”512M”
#vfs.zfs.arc_min=”512M”
#vfs.zfs.arc_max=”100M”
#vfs.zfs.zfetch.array_rd_sz=”16m”
#vfs.zfs.zfetch.block_cap=”512″
vfs.zfs.vdev.min_pending=”4″
#vfs.zfs.vdev.max_pending=”64″
vfs.zfs.cache_flush_disable=1
vfs.read_max=64

# Power adjustments
hint.p4tcc.0.disabled=1
hint.acpi_throttle.0.disabled=1
hint.apic.0.clock=0

Vi har nu aktiverat AHCI (detta måste även aktiveras i BIOS), och därmed kommer förmodligen dina diskars namn/sökväg ändras. Mina gjorde det, och OM de gör det, så måste du editera /etc/fstab
Står det ad0, så kan du behöva ändra till ada0, osv.
Då jag kör min systemdisk på kontrollerkort, så ändras inte dess namn. Den går som SCSI, och därmed döps till ”da”. SATA enheter går som ATA och heter då ”ad” eller ”ada”.

Montering av diskarMed 6st (7) så kommer det ju förmodligen komma en dag då någon av dom krashar.
Och dessa kryptiska enhetsnamn blir iaf inte jag klok på, så jag väljer att använda ”glabel” för att döpa om dom i den ordningen dom sitter i buren.
(Jag kan tänka mig att det är läge att använda glabel på sin systemdisk och sedan editera /etc/fstab med dessa också)

Så jag börjar med att stoppa i första disken (bara denna och systemdisken alltså).

Väl inne så kan man kolla att allt verkar bra med:

# camcontrol devlist
# atacontrol list

Så vi döper den första till ”disk1″ helt sonika, med kommandot

# glabel label disk1 /dev/ada1

Stäng av datorn med:

# shutdown -p now

Stoppa i nästa disk, starta upp och repetera.
Det blir ju några gånger, men jag intalar mig att det i slutändan blir mycket lättare att byta diskar.
Tänk på att enhetsnamnen kan skifta hedanefter när vi stoppar i fler diskar, så kontrollera noga kommandona ”camcontrol devlist” och ”glabel status”, så du inte döper om en redan döpt disk.

Monterade diskarSåhär kan det se ut efter ett tag..

# camcontrol devlist
at scbus1 target 0 lun 0 (pass0,ada0)
at scbus2 target 0 lun 0 (pass1,ada1)
at scbus4 target 0 lun 0 (pass2,ada2)
at scbus5 target 0 lun 0 (pass3,ada3)
at scbus7 target 0 lun 0 (pass4,da0)

# glabel status
Name Status Components
label/disk1 N/A ada0
label/disk3 N/A ada1
label/disk2 N/A ada2
label/disk4 N/A ada3

När väl detta är klart så kan du lättare hitta en disk sen när den väl krashar.
Nu är det dags att göra det roliga; skapa en ZFS-raid! :D

# zpool create tank raidz2 label/disk{1..4}

Här skapar vi en ”raid6″ med namnet tank, och typen raidz2 (2 diskar redundans), {1..4} är en förkortning som går bra att skriva om man som jag valt att döpa diskarna i löpande ordning. Det går lika bra att skriva ”label/disk1 label/disk2″ osv.. men detta sparar en del skrivande.
Mitt kommando blir:

# zpool create tank raidz2 label/disk{1..6}

Detta borde ta på sin höjd runt 10 sekunder att göra. Jag kontrollerar min raidz2 med kommandot:

# zpool status tank
pool: tank
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz2 ONLINE 0 0 0
label/disk1 ONLINE 0 0 0
label/disk2 ONLINE 0 0 0
label/disk3 ONLINE 0 0 0
label/disk4 ONLINE 0 0 0
label/disk5 ONLINE 0 0 0
label/disk6 ONLINE 0 0 0

errors: No known data errors

Allt ser ut att ha gått bra, kalas!

Monterade diskarNu vore det himla bra om vi kunde flytta detta enorma portsträd som vi packade upp tidigare, till en lämplig plats. ZFS har ju kompression som
möjlighet, så vi tar och flyttar ports och även src, som innehåller stora mängder textfiler till arrayen, så sparar vi plats och lär oss lite om ZFS på köpet :)

# mv /usr/ports /usr/TEMPports
# mv /usr/src /usr/TEMPsrc
# zfs create -o compress=gzip tank/usr
# zfs create tank/usr/ports
# zfs create tank/usr/src

# zfs set mountpoint=/usr/ports tank/usr/ports
# zfs set mountpoint=/usr/src tank/usr/src
# zfs set compression=gzip-9 tank/usr

# mv /usr/TEMPports/* /usr/ports/
# mv /usr/TEMPsrc/* /usr/src/

# rmdir /usr/TEMPports /usr/TEMPsrc

Om vi kikar på vad vi nu gjort så döper vi först om nuvarande mappar till TEMPports och TEMPsrc. Sedan talar vi om för ZFS att vi vill skapa en
mountpoint i våran raid, som ligger rakt under ”roten” (tank/usr) på raiden. Hedanefter säger vi bara mapp, för mountpoint, så slipper det bli en massa struliga ord.

Vi vill även använda oss utav hårdaste kompressionen för mappen och dess undermappar.
Efter detta så skapar vi undermappar till tank/usr, som heter ports och src.
Sedan så flyttar vi innehållet från de gamla ports och src, till de nya, som ligger på zfs-raiden.

Installera Samba

Tidigare lade vi till ”samba_enable=”YES”" i våran /etc/rc.conf, så nu har vi sagt till att vi ska starta samba, vilket är ett program som sköter fildelning, vilket
är praktiskt på en NAS som annars inte fyller sitt syfte så bra.

Så vi tar och kompilerar och installerar Samba då!

# cd /usr/ports/net/samba34
# make install clean

Det kommer upp en ruta som frågar om alternativ, där har jag kryssat i följande;

(# make showconfig (ifall man vill se nuvarande konfiguration))
===> The following configuration options are available for samba34-3.4.8:
LDAP=on ”With LDAP support”
ADS=on ”With Active Directory support”
CUPS=off ”With CUPS printing support”
WINBIND=on ”With WinBIND support”
SWAT=off ”With SWAT WebGUI”
ACL_SUPPORT=on ”With ACL support”
AIO_SUPPORT=on ”With Asyncronous IO support”
FAM_SUPPORT=on ”With File Alteration Monitor”
SYSLOG=on ”With Syslog support”
QUOTAS=on ”With Disk quota support”
UTMP=off ”With UTMP accounting support”
PAM_SMBPASS=on ”With PAM authentication vs passdb backends”
DNSUPDATE=off ”With dynamic DNS update(require ADS)”
AVAHI=off ”With Bonjour service discovery support”
EXP_MODULES=on ”With experimental modules”
POPT=on ”With system-wide POPT library”
MAX_DEBUG=off ”With maximum debugging”
SMBTORTURE=off ”With smbtorture”
===> Use ‘make config’ to modify these settings

Hedanefter valde jag att bara fortsätta med de alternativ som var förvalda. Sedan laddas samba ner, i skrivande stund version 3.4.8. Får du upp en ruta som frågar om alternativ för Perl, så tog jag standardval även här. Detsamma gäller för Python.

Efter 10min eller så, borde du vara klar.

Då ska vi ställa in Samba, med dess konfigurationsfil. Denna filen återfinns i /usr/local/etc/smb.conf

# ee /usr/local/etc/smb.conf

Här har jag läst mig till en lagom konfigurering, och den ser ut såhär:
(Extra info finns bl.a. på https://help.ubuntu.com/community/SettingUpSamba)

#======================= Global Settings ===========================
[global]
workgroup = WORKGROUP
server string = Samba NAS1
security = user
encrypt passwords = true
guest account = nobody
map to guest = bad user
load printers = no
log file = /var/log/samba/log.%m
log level = 2
max log size = 50
hide dot files = yes
socket options = TCP_NODELAY IPTOS_LOWDELAY
strict locking = no
follow symlinks = yes
unix extensions = no
min receivefile size = 131072
aio read size = 1
aio write size = 1
use sendfile = yes
lock directory = /var/run/samba34/
keepalive = 300
#======================= Share Definitions =========================

[documents]
path=/tank/documents
browseable = yes
writable = yes
valid users = DIN-ANVÄNDARE
veto files = /lost+found/
create mask = 0660
directory mask = 0770

[movies]
path=/tank/movies
browseable = yes
writable = yes
valid users = DIN-ANVÄNDARE
veto files = /lost+found/
create mask = 0660
directory mask = 0770

[public]
path=/tank/public
browsable = yes
writable = yes
guest only = yes
guest ok = yes
public = yes
create mask = 0660
directory mask = 0770

Mot slutet här ska du ändra namnet på ”valid user” till din förut skapade användare. Samt ev. ändra path, om du inte valde att döpa din raid till ”tank”.

OBS, om du skulle vilja ha enklast möjliga åtkomst till filer, så skapa alla utdelningar enligt det sista mönstret, med guest only, och guest ok, så slipper du lösenordsfrågor. Kan vara skönt om man vill slippa alla dialogrutor.
Ändra även raden ganska långt upp med ”guest account” i så fall.
Stäng och spara med Escape-Enter-Enter.

Nu startar vi upp Samba.. :)

# /usr/local/etc/rc.d/samba start

Vi kikar om det gick bra:

# ps auxw | grep smbd | grep -v grep
root 68410 0.0 0.3 42588 13352 ?? Is 11:10AM 0:00.05 /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf
root 68412 0.0 0.3 42588 13316 ?? I 11:10AM 0:00.00 /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf

Det verkar som det fungerar. :)
Nu ska vi lägga till våran användare i samba:

# smbpasswd -a DIN-ANVÄNDARE

Sedan skapade jag två stycken mappar på raiden som jag ska dela ut.

# zfs create -o compress=gzip-9 tank/documents
# zfs create tank/movies
# chown DIN-ANVÄNDARE:DIN-ANVÄNDARE tank/movies
# chown DIN-ANVÄNDARE:DIN-ANVÄNDARE tank/documents

Försöker du nu logga in från en linux el. windowsdator, kommer en lösenordsruta upp, skriv i ditt namn och lösen, och du ska bli inloggad och kunna skapa och ta bort filer. (Beror på om du har gäståtkomst eller ej, givetvis)

Så, då har vi klarat av utdelningen.

Strömsparfunktioner

Nu skulle jag vilja sätta tänderna i strömåtgång! Burken ska ju inte stå och äta energi i onödan.
Då hittade jag denna trevliga sida, som jag tänkte jag skulle bolla lite med:
(http://wiki.freebsd.org/TuningPowerConsumption)
Denna är dock skriven för en laptop, men det är ändå samma kommandon.

Först så stänger vi av automatiskt throttling av CPUn, då strömhantering från start hanteras av något som heter EIST ihop med throttling; EIST hanterar både frekvens samt strömrelgering, medans throttling enbart sköter throttling av cpu, och då kan vi lika gärna skippa normal throttling, så..

Före inställningarna:

# sysctl -a | grep dev.cpu.0.freq
dev.cpu.0.freq: 1200
dev.cpu.0.freq_levels: 2933/73000 2800/65000 2667/58000 2533/53000 2400/48000
2267/44000 2133/39000 2000/36000 1867/33000 1733/30000 1600/28000 1467/26000
1333/24000 1200/23000 1050/20125 900/17250 750/14375 600/11500 450/8625
300/5750 150/2875

Här ser vi alla lägen som min Core i3 530 stödjer, med throttling och EIST.
Så vi ändrar.

# ee /boot/loader.conf

Lägg till:

# Power adjustments
hint.p4tcc.0.disabled=1
hint.acpi_throttle.0.disabled=1

.. och startar om.

# sysctl -a | grep dev.cpu.0.freq
dev.cpu.0.freq: 1200
dev.cpu.0.freq_levels: 2933/73000 2800/65000 2667/58000 2533/53000 2400/48000
2267/44000 2133/39000 2000/36000 1867/33000 1733/30000 1600/28000 1467/26000
1333/24000 1200/23000

Här får vi förvisso en lägsta frekvens på 1200 MHz, vilket är sämre än de 150 MHz vi kunde ha förut. Men genom att ändra i /etc/rc.conf:

# ee /etc/rc.conf

Lägg till:

# Power adjustments
performance_cx_lowest=”C3″
economy_cx_lowest=”C3″

För att ytterligare spara ström kan vi ställa in att vi ska använda C3, vilket medför ytterligare strömsparfunktioner, men det gör systemet nästintill dött, och stänger av interna timers m.m, vilket kan göra systemet obrukbart.
Det får vi råda bot på;

Vi editerar /boot/loader.conf och lägger till:
hint.apic.0.clock=0

Före vi började, så såg det ut såhär.

# sysctl dev.cpu | grep cx
dev.cpu.0.cx_supported: C1/32 C2/96 C3/128
dev.cpu.0.cx_lowest: C1
dev.cpu.0.cx_usage: 100.00% 0.00% 0.00% last 500us
dev.cpu.1.cx_supported: C1/32 C2/96 C3/128
dev.cpu.1.cx_lowest: C1
dev.cpu.1.cx_usage: 100.00% 0.00% 0.00% last 500us
dev.cpu.2.cx_supported: C1/32 C2/96 C3/128
dev.cpu.2.cx_lowest: C1
dev.cpu.2.cx_usage: 100.00% 0.00% 0.00% last 500us
dev.cpu.3.cx_supported: C1/32 C2/96 C3/128
dev.cpu.3.cx_lowest: C1
dev.cpu.3.cx_usage: 100.00% 0.00% 0.00% last 500us

Sedan startade jag om, och då såg det ut såhär.

# sysctl dev.cpu | grep cx
dev.cpu.0.cx_supported: C1/32 C2/96 C3/128
dev.cpu.0.cx_lowest: C3
dev.cpu.0.cx_usage: 3.90% 4.72% 91.37% last 1076us
dev.cpu.1.cx_supported: C1/32 C2/96 C3/128
dev.cpu.1.cx_lowest: C3
dev.cpu.1.cx_usage: 3.66% 4.29% 92.03% last 3228us
dev.cpu.2.cx_supported: C1/32 C2/96 C3/128
dev.cpu.2.cx_lowest: C3
dev.cpu.2.cx_usage: 3.51% 4.22% 92.26% last 1445us
dev.cpu.3.cx_supported: C1/32 C2/96 C3/128
dev.cpu.3.cx_lowest: C3
dev.cpu.3.cx_usage: 3.27% 3.96% 92.75% last 1110us

Kryptiskt kan tyckas, men jag tror jag ser mönstret.
Procentkolumnerna är de olika states som finns; C1, C2 och C3, och min CPU ligger nu och slappar på sköna C3 största delen av tiden.

Det enda jag märkt hittills är att fläkten är ganska högljudd precis under uppstarten, för att sedan bli väldigt tyst. Men detta stör jag mig inte på, det tar ju inte lång tid att starta den. Om man väljer att inte använda dessa strömspar-knep, så kan jag meddela att processorfläkten lätt blir väldigt högljudd..

HDD Spin-down

För att min ZFS array ska gå ner i sleepmode när den inte används, så använder jag ”atacontrol spindown” kommandot.

# atacontrol list
ATA channel 2:
Master: ad4 SATA revision 2.x
Slave: ad5 SATA revision 2.x
ATA channel 3:
Master: ad6 SATA revision 2.x
Slave: ad7 SATA revision 2.x
ATA channel 4:
Master: ad8 SATA revision 2.x
Slave: no device present
ATA channel 5:
Master: ad10 SATA revision 2.x
Slave: no device present

Här ser vi att jag behöver använda ad4, ad5, ad6, ad7, ad8 och ad10.
Skriv ner dessa, vi kommer använda dessa disknamn några gånger.

# atacontrol spindown ad4 900
# atacontrol spindown ad5 900
# atacontrol spindown ad6 900
# atacontrol spindown ad7 900
# atacontrol spindown ad8 900
# atacontrol spindown ad10 900

För att testa så det fungerar kan du sätta sekunder till 60, så ser du snabbt hur det fungerar. Kika även på loggen för att se:
# tail -n 20 -F /var/log/messages

[...]
Sep 23 14:49:11 NAS1 kernel: ad4: Idle, spin down
Sep 23 14:49:11 NAS1 kernel: ad7: Idle, spin down
Sep 23 14:49:11 NAS1 kernel: ad6: Idle, spin down
Sep 23 14:49:11 NAS1 kernel: ad8: Idle, spin down
Sep 23 14:49:11 NAS1 kernel: ad10: Idle, spin down
Sep 23 14:49:11 NAS1 kernel: ad5: Idle, spin downad7:
Sep 23 14:49:11 NAS1 kernel: drive spun down.
Sep 23 14:49:11 NAS1 kernel: ad10: drive spun down.
Sep 23 14:49:11 NAS1 kernel: ad6: drive spun down.
Sep 23 14:49:11 NAS1 kernel: ad8: drive spun down.
Sep 23 14:49:12 NAS1 kernel: ad4: drive spun down.
Sep 23 14:49:13 NAS1 kernel: ad5: drive spun down.

Det fungerar, bra!

900 sekunder, 15min, tog jag och tycker det verkar lagom, kör om kommandona senare om du vill ändra.
Ett problem som jag märkte var att dessa inställningar nollställs vid reboot.. bakslag!

Så, vi skapar ett script!

# ee /usr/local/etc/rc.d/spindown-script.sh

Lägg till:

#!/bin/sh
atacontrol spindown ad4 900
atacontrol spindown ad5 900
atacontrol spindown ad6 900
atacontrol spindown ad7 900
atacontrol spindown ad8 900
atacontrol spindown ad10 900

Såhär blev det för mig.
Se över dina diskar och ändra scriptet efter behov!

Sedan måste vi göra filen exekverbar;

# chmod +x /usr/local/etc/rc.d/spindown-script.sh

Starta om, och kontrollera sedan med någon av dina diskar:

# atacontrol spindown ad4
ad4: spin down after 900 seconds idle

Finfint!

Om du har AHCI aktiverat så fungerar inte denna metod, utan då måste vi använda oss utav camcontrol istället. Det enda vi behöver göra då är att se till att scriptet ser ut såhär istället (lite mer dynamiskt script):

#!/bin/sh
DEVLIST=`camcontrol devlist -v | grep ada | cut -d , -f 2 | cut -d ‘)’ -f 1`
for drive in ${DEVLIST}; do
/sbin/camcontrol idle ${drive} -t 900
done

Det vi förlorar på denna metoden är att vi inte får någon output i systemloggen, och vi kan heller inte kontrollera detta lika lätt (det går att kontrollera, men det är inget jag satt mig in i, och kommandona är krångliga). Det blir helt enkelt den mer handfasta metoden att sätta tiden till något lågt och lämpligt, och sedan lyssna eller känna på disken för att se till att kommandot fungerar.
(Scriptet går att modifiera med lite finurlighet, så det passar även de utan AHCI.)

Smartmontools

När väl detta är klart vore det ju himla sjysst att kunna hålla koll på SMART-datan från alla diskar också, så man vet hur dom mår.
Detta gör man med hjälp av smartmontools !

# cd /usr/ports/sysutils/smartmontools
# make install clean

Sedan kan det vara lite krux här, men i mitt fall så ligger alla diskar på ad[4-8,10], som vi sett tidigare.
Du skrev väl ner dina disknamn?

Så mina kommandon är t.ex:

# smartctl -a /dev/ad4

eller om man nöjer sig med lite lättare info:

# smartctl -i /dev/ad4

Vill man trolla lite mer kan vi köra:

# smartctl -a /dev/ad4 | grep ”Temperature\|ATA Error”

Detta kommando kör en vanlig ”-a”, men använder grep för att sortera ut raderna med temperatur, samt ev SMART-fel.

# smartctl -a -d hpt,1/2 /dev/hptrr | grep ”Temperature\|ATA Error”
194 Temperature_Celsius 0×0022 108 091 000 Old_age Always – 39

Detta är min systemdisk, och den ser inte ut att må dåligt iaf. :)
Highpoint RocketRAID 2300Om man använder sig utav ett kontrollerkort, som i mitt fall, så blir syntaxen lite annorlunda som synes, men det ska gå att klura ut.

När jag körde kommandot på en annan av mina raid-diskar, så dök detta upp.
Det visste jag förvisso om, men det är bra att se hur det kan se ut, om du inte sett detta innan.

# smartctl -a /dev/ad4 | grep ”Temperature\|ATA Error”
194 Temperature_Celsius 0×0022 107 106 000 Old_age Always – 40
ATA Error Count: 10 (device log contains only the most recent five errors)

Denna disken ska jag hålla lite extra koll på, men då jag kör raidz2, så borde det inte bli någon katastrof än iaf. Alla andra diskar utger sig för att må bra iaf.

Hur kan vi använda denna infon då.. jo, man kan ju säga till smartctl att vi vill ha mail om hur diskarna mår, kalas!
Vi lägger till detta i filen /usr/local/etc/smartd.conf:

/dev/hptrr -d hpt,1/2 -s S/../.././17 -m nasnotifications@dindomän.se -a
/dev/ad4 -s S/../.././20 -m nasnotifications@dindomän.se -a
/dev/ad5 -s S/../.././20 -m nasnotifications@dindomän.se -a
/dev/ad6 -s S/../.././20 -m nasnotifications@dindomän.se -a
/dev/ad7 -s S/../.././20 -m nasnotifications@dindomän.se -a
/dev/ad8 -s S/../.././20 -m nasnotifications@dindomän.se -a
/dev/ad10 -s S/../.././20 -m nasnotifications@dindomän.se -a

Detta kan ju kännas skumt, men det är inte så farligt, vi säger till att alla diskarna ska genomgå ett Short-Test, och ev errors el. noteringar ska mailas till bifogad email.
Schemaformatet är inte så fasligt krångligt som det ser ut.

T/MM/DD/d/HH är formatet;
TYPE/MONTH/DAYOFMONTH/DAY/HOUR
Så, vi väljer alltså:
* ”S” för Short-Test
* ”..” för att välja alla månader, dagar i månaden, dagar i veckan
* ”20″ för att köra testet på alla diskar kl 20:00 varje dag.

Dagar i månaden använder du t.ex. om du bara vill köra ett visst datum i månaden, kanske den 25:e. (Välj mellan 01-31)
Dagar i veckan använder du om du vill köra en viss dag i veckan, kanske vill du köra på onsdagar, och då sätter du 03. (Välj mellan 1-7)
Observera att du måste använda 2 siffror på MM, DD och HH!

Detta kan du givetvis justera efter eget behag!
Den som vill läsa på lite mer hittar info på:
(http://smartmontools.sourceforge.net/man/smartd.conf.5.html)

Det blir ju lite mail kanske, men ett tips är ju att sätta regler för en viss mapp i ditt mailprogram el. dyl. så att du skickar alla mail från din satta
email till denna mappen, och sen en regel för att ta bort alla mail som är äldre än t.ex 7 dagar.
Hursomhelst får du inte 7st mail om du som jag har 7st diskar, varje dag. :)
Den mailar bara ett mail, om den hittar ett fel. Och det räcker ju.

SSMTP istället för Sendmail

Men den som minns kanske kommer ihåg att vi tog bort ”sendmail” som är standardprogrammet för att skicka mail. Så vi måste fixa till nåt som kan skicka oss dessa mail, det gör vi med ssmtp!

# cd /usr/ports/mail/ssmtp
# make install replace clean
# ee /usr/local/etc/ssmtp/ssmtp.conf

En tom fil, vi fyller på med:

root=dinemail@domän.se
mailhub=smtp.domän.se
rewriteDomain=vilkendomänskamailetkommafrån?
hostname=HOSTNAME

Sådär, nu har vi fungerande mail :)

Om du vill testa så din mail verkligen fungerar som den ska kan du skicka ett testmail genom att lägga till ”-M test” efter någon av raderna i filen /usr/local/etc/smartd.conf.
Starta om din dator alt starta om smartd

# /usr/local/etc/rc.d/smartd stop
# /usr/local/etc/rc.d/smartd start

Efter en stund så borde du få ett mail i din inbox, från ”Charles &”
Ta sedan bort ”-M test” från smartd.conf igen, och starta om datorn eller smartd.

Så fort smartd hittar ett fel eller något som är galet, kommer du få ett mail, och kan åtgärda ev fel. Toppenbra!

Vi aktiverade coretemp i våran loader.conf tidigare.
Det vore ju trevligt att kunna se tempen på CPUn, kanske att man skickar med detta i ett cronjob senare eller så.
Hursomhelst, ett kommando som kan behövas är:

# sysctl -n dev.cpu.0.temperature

Min CPU ligger på 35 grader nu. Det verkar rimligt. Bli inte förskräckt om det visar konstiga siffror; det kan ju vara felrapportering. Gå in i BIOS och dubbelkolla vid en reboot, så ser du snart hur det står till.
Det är inte säkert att coretemp fungerar för dig, då kan du prova att istället för coretemp_enable=”YES” lägga till amdtemp_enable=”YES”, givetvis bara om du har en AMD CPU, annars är det osannolikt att det fungerar.

Seg SSH-inloggning

Medans jag suttit här och pryttlat så har jag märkt att det tar en väldigt lång tid att komma in via ssh, skriver jag in anslutningskommandot:

# ssh -l ANVÄNDARNAMN IP-TILL-NAS

.. så kommer jag in, men raden för att skriva in lösenord tar nog närmare 25 sekunder på sig att komma upp.
Oacceptabelt!

Jag hittade en lösning som gick ut på att editera filen /etc/ssh/sshd_config och där bläddra ner till raden ”#UseDNS yes”, långt ner.
Här ändrade jag till ”UseDNS no”

# ee /etc/ssh/sshd_config

(spara och avsluta med escape-enter-enter)

sedan startar vi om sshd med:

# /etc/rc.d/sshd restart

.. stänger mina ssh-anslutningar och avnjuter ”insta-prompt”! Läckert!

ZFS och dess möjligheter

Så, vi har ett ganska läckert system, med ZFS och hela köret, men vad har jag för nytta av detta nu? Jag har ju inte gjort någonting egentligen mer än att jag har lagt till lite kompression på ports och src.. ”Ooooh”.
Så, ska vi se vad ZFS kan som är så bra?

Vi tar och skapar lite filer som vi kan låtsas är jätteviktiga ritningar på hur sockerbitar ser ut!

# cat /var/log/messages > /tank/documents/sugar.txt
# cat /var/log/messages > /tank/documents/brown.txt

# ls /tank/documents/

Bra, våra superhemliga ritningar är nu redo som synes.

Vi tar och skapar något som kallas snapshot, som kan liknas vi .. en skärmdump kanske, av en mapp eller filsystem.
Detta gör vi med kommandot:

# zfs snapshot sökväg@valfrittnamn

Så jag skriver in:

# zfs snapshot tank/documents@mondayssugar

Oh crap, jag skulle visst inte döpt den till mondayssugar.. så vi döper om!

# zfs rename tank/documents@mondayssugar tank/documents@mysugar

Så, vad har vi nu.. vi kollar efter!

# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
tank/documents@mysugar 0 – 51.9K -

Vi kan även titta på innehållet i våra filer.

# cat /tank/documents/.zfs/snapshot/mysugar/sugar.txt

Okej, det verkar rimligt..
Nu låter vi Bröderna Bus stjäla våra delikata ritningar..

# echo ”Haha” > /tank/documents/sugar.txt
# cat /tank/documents/sugar.txt
Haha

Oj då, det var inte så bra.. inget kvar, hur ska vi nu göra!?
Vi tar och rullar tillbaka till våran sparade snapshot.

# zfs rollback tank/documents@mysugar

Tada.. Nu kan vi göra sockerbitar igen!
Men jag kanske inte vill behålla min sparade snapshot, så vi kan ta bort den, varenda människa vet ju att sockerbitar är tr.. fyrkantiga!

# zfs destroy tank/documents@mysugar

Info hämtad från:
(http://docs.huihoo.com/opensolaris/solaris-zfs-administration-guide/html/ch06.html)

Ett cheatsheet som har väldigt bra och kortfattad info om det mesta man kan tänkas behöva kunna om ZFS:
(http://lildude.co.uk/zfs-cheatsheet)

Ställa in tiden

Att datorn ska hålla tiden är ju rätt bra. Så vi får ta och ställa in det!
Först får vi berätta att vi bor i Sverige och vill använda oss av svensk tideräkning.

# cp /usr/share/zoneinfo/Europe/Stockholm /etc/localtime

efter detta så editerar vi filen ntp.conf

# ee /etc/ntp.conf

Kommentera bort servrarna på raderna ~ 23-25, editera sedan översta raden på nästa stycke, där några servrar står listade,
till:

# server se.pool.ntp.org iburst maxpoll 9

(obs, ingen fyrkant framför, jag har endast för att markera kod här)
Lite längre ner så finns en rad där det står ”restrict default ignore”, ta bort
fyrkanten framför denna rad, spara och avsluta.
Kör sedan:

# top | grep ntpd

Kika efter numret som står allra först.
Vi tar och stänger den processen, då den hindrar oss från att ställa in datum

# kill NUMRET

Sedan ställer vi in rätt datum med kommandot

# ntpdate se.pool.ntp.org

Och sedan kan du kontrollera datum med

# date

Vilket förhoppningsvis visar korrekt dag och tid :)

Effekterna av strömsparfunktionerna då?

Jag skaffade mig en elmätare på Kjell & Co. för 149 kr. Jag tänkte att den skulle räcka gott för mina behov.
Elmätare
Så jag satte igång och mätte lite på NAS’en, det var viktigt för mig att den kunde stå på största delen av tiden. Tyvärr blev jag väl lite negativt överraskad. Min fina magkänsla efter alla justeringar varade tydligen inte länge..
Det hade inte gjort någon som helst skillnad(!).
Enda sättet jag kan förklara det på är nog att antingen är FreeBSD så trevligt justerat från grunden, eller så är moderkortets egna sparfunktioner väldigt bra, eller tja, båda två..

Mätningen gjordes under ganska precis 5 minuter per ”test”. Det fanns inga större variationer eller peaks.

Utan strömspar, idle cpu, diskar ej vilande: 69-71 W
Utan strömspar, nätverkskopiering: 83-88 W
Utan strömspar, idle cpu, diskar vilande: 44-45 W

Med strömspar, idle diskar ej vilande: 69-70 W
Med strömspar, nätverkskopiering: 84-85 W
Med strömspar, idle cpu, diskar vilande: 44-45 W

10 Comments Post a comment
  1. Ronny #

    Jättebra guide! Detta kommer jag att ha nytta av när jag byter från opensolaris till FreeBSD. Har saknat saker som t.ex. strömsparfunktioner när jag körde opensolaris.

    augusti 25, 2010
    • Thomas #

      Vad kul! Jag har själv lärt mig massor om FreeBSD på vägen, och det verkar vara ett riktigt trevligt operativsystem!
      Jag kommer snart uppdatera med skillnaden i watt på inställningarna, så håll utkik!

      augusti 25, 2010
  2. Ronny #

    Hej igen!

    Behöver man aktivera sendmail i rc.conf för att ssmtp ska funka?
    Jag får inte iväg några mail…

    september 9, 2010
  3. Ronny #

    Fel av mig, det funkar ju med epost!
    Breven hade hamnat i skräpposten av någon anledning så jag missade dem först.

    september 9, 2010
    • Thomas #

      Nej, du ska inte aktivera sendmail, som du förstår. :)
      Du får välja antingen den ena eller andra.

      Bra att det löste sig! Kom dina mail ifrån ”Charlie &” också?

      september 10, 2010
  4. Andreas #

    Vilket kontrollerkort körde du med?
    Jag har tänkt mig nått liknande men med minst 10 diskar så jag behöver nått kontrollerkort som lirar med FreeBSD. Kikar på ett LSI SAS3081E-R som folk ser ut att ha använt med FreeBSD. Överväger även ett Intel dh57jg mobo då det drar mindre ström men hittar ingen som kört FreeBSD på det.

    Ser ut att vara en grym guide! Blir perfekt att följa.

    september 13, 2010
    • Thomas #

      10 diskar är ordentligt.. räcker det med ett 1Gbit NIC då? Du ska inte titta lite på Mini-DTX kanske? Zotac D510 NM10-B-E Mini-DTX har en PCIe x1 port där du kan få in ett extra NIC också..
      Tror dock inte det är några problem med ditt val av moderkort. Vågar nog påstå att intels grejer fungerar :)
      Mitt kontrollerkort är ett HighPoint RocketRaid 2300, 4 portars.
      Egentligen är det lite krux med det kortet för det är svårt att få bukt med Load_Cycle_Count, om du råkar få en disk som börjar leka pajas.. Har beställt en SSD nu som inte har nån mekanisk arm, så jag kan slopa IDE-mode, och köra AHCI utan att bry mig om slitage på en diskarm.
      Förhoppningsvis så funkar denna lösning bättre. En Intel X25-V 40GB blev det.

      september 14, 2010
  5. Andréas #

    Jättefin guide och en väldigt bra blogg!

    Jag har funderat på att bygga något liknande och blev glad när jag hittade din guide. Alltid skönt när någon tänkt igenom allt innan så att man inte missar något. Är också sugen på att återvända till FreeBSD! :)

    Hursomhelst. När jag kollade upp omdömena på datorlådan på prisjakt hittade jag en kommentar som mer eller mindre sågade den pga att den blev så varm att diskarna stektes. Är det ditt intryck också, tt de blir väldigt varma? Det skulle ju vara en deal-breaker. :)

    september 16, 2010
  6. Ronny #

    Har du uppgraderat till FreeBSD 8.2 ännu?

    Funderar själv på att göra det och hoppades du hade skrivit någon trevlig guide om det. Händer inte så mycket på bloggen numera.

    mars 10, 2011
  7. Jonas #

    Väldigt trevlig guide! Följer den själv nu. Har lekt med linux ett par månader på min server, men kan i övrigt ingenting annat än windows. Men nån gång är det väl dags och med en sån här utmärkt guide kommer man ju en bra bit på vägen! Fast för min del blir det FreeBSD 8.2 och en liten 3diskars raid-Z. Ska testa med USB-minnen först för att se om ZFS och jag kommer överrens :)

    Stort tack! Ska se om jag kan hjälpa andra så som du hjälpt mig när jag väl är klar :)

    mars 13, 2011

Leave a Reply

You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS