lördag 26 december 2009

ZFS auto-snapshot på EON

Jag har lyckats med att få igång automatiska snapshots på EON.

Så här gjorde jag:
1) Började med att installera service'arna auto-snapshot och auto-snapshot-roleadd
svccfg -v import /var/svc/manifest/system/filesystem/auto-snapshot.xml
svccfg -v import /var/svc/manifest/system/filesystem/auto-snapshot-roleadd.xml


2) Aktivera service'arna
svcadm enable zfssnap-roleadd

Aktivera bara dom som du behöver:
svcadm enable auto-snapshot:monthly
svcadm enable auto-snapshot:weekly
svcadm enable auto-snapshot:daily
svcadm enable auto-snapshot:hourly
svcadm enable auto-snapshot:frequent




frequent tar snapshots var 15:e min, 4 snapshot's behålls.
hourly tar snapshots varje timme, 24 snapshot's behålls.
daily tar snapshots varje dag, 31 snapshot's behålls.
weekly tar snapshots varje vecka, 7 snapshot's behålls.
monthly tar snapshots varje månad, 12 snapshot's behålls.


Läs mer här.

Servicen körs som ett crontab job av användaren zfssnap .

3) Det finns en bugg som gör att användaren zfssnap inte har rättigheter att skapa snapshots. Det fixade jag igenom att editera filen /etc/user_attr och lägga till följande rad:
zfssnap::::type=role;auths=solaris.smf.manage.zfs-auto-snapshot;profiles=ZFS File System Management


4) För att ändringen ska överleva en omstart så måste man lägga till  /etc/user_attr filen /mnt/eon0/.backup

Kör kommandot: 
echo "/etc/user_attr" >> .backup

5) Uppdatera boot imagen
updimg.sh 

onsdag 9 december 2009

Skapa CIFS/SMB share

För att dela ut poolen via CIFS (windows utdelning) gör man på liknade sätt som för NFS.

Man behöver bara sätta egenskapen(property) sharesmb på filsystemet som ska delas ut.
Kommandot ser ut så här:
zfs set sharesmb="on|off" pool-name

Min pool heter protector så kommandot blir för mig:
zfs set sharesmb=on protector

Nu är /protector utdelad som smb://ip/protector

Vill du inte ha poolnamnet på utdelningen så kan du ange valfritt utdelningsnamn så här:
zfs set sharesmb=name=myshare pool-name/filesystem

Ex:
zfs set sharesmb=name=hinken protector
Med det kommandot kommer poolen /protector delas ut som smb://ip/hinken



För att se vilka utdelningar man har gjort körs följande kommando:
sharemgr show -vp zfs

Läs mer om sharesmb här

Jag vill att alla ska ha fullständiga rättigheter till utdelningen. Att bara köra kommandot chmod -R 777 på filsystemet var inte tillräckligt. Det visade sig att windows använder ACL och att Sun(C)'s implementation av CIFS stödjer detta fullt ut. Till skillnad från Samba, som jag är van vid från Ubuntu, översätts inte *nix rättigheter till ACL. Om jag nu fattat det rätt.
Lösningen är att sätta rätt ACL på zfs poolen.
Jag körde följande kommando (allt på en rad):
chmod -R A=owner@:rwxpdDaARWcCos:df:allow,
everyone@:rwxpdDaARWcCos:df:allow

Som ger ägare:full-kontroll och alla:full-kontroll

Skapa NFS share

Nästa steg blir att dela ut poolen via NFS. NFS servern är inte aktiverad som standard i EON.

Starta NFS servern så här:

Steg 1:
Ange följande kommandon in en terminal:
cd /var/svc/manifest/network
svccfg -v import rpc/bind.xml
svccfg -v import nfs/status.xml
svccfg -v import nfs/nlockmgr.xml
svccfg -v import nfs/server.xml



Steg 2:
svcadm enable rpc/bind
svcadm enable nfs/status
svcadm enable nfs/nlockmgr
svcadm enable nfs/server


Nu är NFS servern igång. För att spara ändringarna så att de överlever en omstart behöver vi uppdatera usb minnet med kommandot:
updimg.sh

Nästa steg blir att konfigurera poolen så att det blir utdelad. Det gör man igenom att sätta egenskapen(property) sharenfs på zfs filsystemet.
Kommandot ser ut så här:
zfs set sharenfs="mount-options" pool-name

Min pool heter "protector", så kommandot blir för mig:
zfs set sharenfs=rw,nosuid protector

Läs mer om sharenfs här

Nu är /protector utdelad.

Jag vill att alla ska ha fullständiga rättigheter /protector , så jag körde följande kommando:
chmod -R 777 /protector 
 
På min Ubuntu burk kan jag nu montera utdelningen igenom att lägga till följande rad i
/etc/fstab
 
192.168.xxx.xxx:/protector /media/protector nfs defaults 0 0


tisdag 8 december 2009

Skapa RAIDZ pool

Nu när OSet är på plats så är det dags att skapa en RAIDZ pool. En RAIDZ pool är ungefär samma sak som en RAID5 Array. Skillnaden är att RAIDZ är helt baserad på mjukvara och integrerat med filsystemet (ZFS). Bland fördelarna är att man inte är beroende av någon specifik hårdvara. Går t.ex ens RAID5 kort sönder efter några år så är risken stor att det inte längre finns något sådant kort att köpa. (Man är då ganska kokt.)

Skapa en RAIDZ pool så här:
  1. Först tar vi reda på vad hårddiskarna i systemet heter. Det gör vi enklast genom att skriva "format" och sen trycka ctrl+C , alternativt "echo | format", i en terminal.
  2. ~#format
    Searching for disks...done


    AVAILABLE DISK SELECTIONS:
    0. c1d0
    /pci@0,0/pci-ide@6/ide@0/cmdk@0,0
    1. c2d0
    /pci@0,0/pci-ide@8/ide@0/cmdk@0,0
    2. c3d0
    /pci@0,0/pci-ide@8/ide@1/cmdk@0,0
    3. c4d0
    /pci@0,0/pci-ide@8,1/ide@0/cmdk@0,0
    Specify disk (enter its number): ^C
  3. Här ser vi att jag har 4st diskar, men det är bara 3st som jag tänkt att använda i RAIDZ. Nu när vi vet identiteten på diskarna kan vi skapa en RAIDZ pool. RAIDZ poolen skapas med kommandot: zpool create poolNamn raidz  disk1 disk2 ... diskN  . I mitt fall skrev jag zpool create protector raidz c2d0 c3d0 c4d0
  4. Poolen är nu skapad och monteras som /protector i filsystemet.
  5. Kör kommandot zpool list för att lista alla pooler. 
~#zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
protector 2.72T 161G 2.56T 5% ONLINE -



Jag fick problem med att poolen inte monterade automatiskt efter omstart. Det löste jag genom att köra "zpool import -a" vid uppstart. Jag vet inte om det är rätt metod. Men vill du använda samma lösning så gör så här:
  1. Editera filen "/mnt/eon0/.exec" och ta bort kommentartecknet(#) framför "/usr/sbin/zpool import -a". I min fil är det rad 9.



Installera operativsystemet (EOS)

Som jag nämnt tidigare har jag tänkt att använda ZFS som filsystem och köra diskarna i RAIDZ.

Utbudet av OS begränsas då lite. ZFS kommer från SUN(c) och finns i t.ex OpenSolaris, som jag har tänkt att köra. ZFS finns också i andra os, t.ex FreeBSD. Men inte till Linux pga inkompatibel licens. Det tycker jag är lite synd eftersom jag kör Ubuntu som OS annars och kan orientera mig ganska bra i det. Man ska visst kunna köra ZFS via FUSE i Linux. Men både FreeBSD och Linux/FUSE implementationen av ZFS känns inte inte riktigt mogen än. Iaf den känslan som jag fick efter massa gogglande.

Valet av OS landade på EON som är en slimmad variant av OpenSolaris. Man bootar t.ex från ett usbminne och så kan man använda alla diskarna i datorn som lagring. Inget utrymme krävs för OSet.


Så här gjorde jag installationen:
  1. Laddade ner EON 64-bit x86 CIFS ISO image version 0.59.5 based on snv_125 och brände ut .iso filen på en CD som jag bootade ifrån.
  2. Loggade in som användare root  och lösenord eonsolaris.
  3. Anslöt usbminnet och skrev install.sh
  4. Valde usbminnet, i mitt fall val 1. EOS:~#install.sh
    This process installs EON ZFS Storage to a destination listed below:
    [1] c0t0d0 (1920MB)
    [2] c1d0 (476913MB)
    [3] c2d0 (Unknown MB)
    [4] c3d0 (Unknown MB)
    [5] c4d0 (Unknown MB)
    Enter destination choice[?]: 1

Montering

Nu har alla delarna byggts ihop och så här blev resultatet.
Datorn blev hyfsat tyst, men inte knäpptyst. Det är CPU fläkten och diskarna som låter mest.

CPU fläkten har jag ställt ner till ~1700 rpm. Bios börjar rampa upp fläkten vid 50C , och har fullt blås vid 70C.
Än så länge ligger temperaturen runt 43C, så den går inte speciellt varmt.

Diskarna är tysta och bra, går utan vibrationer. Man kan höra ett svagt susande ifrån dom. Dom är inte dämpade på något sätt, så vill man kan man ju montera dom i gummi upphängningar och då lär det bli helt knäpptyst.




torsdag 26 november 2009

Köp av hårdvara

Jag har en längre tid velat bygga en egen NAS, och nu har jag äntligen gjort en lista på hårdvaran.
Den blev så här:
Moderkort: ASUS M2N68-AM PLUS , har 4st sata kontakter
Processor: AMD Athlon II X2 250 3,0Ghz
Minne: Corsair TWIN2X PC6400 DDR2 4GB
Hårddisk: 3st Seagate Barracuda® 7200.12 1TB  Western Digital Caviar® GreenPower  (Seagate var slut på lagret, och WD disken har fått bra kritik här http://www.tomshardware.com/reviews/green-terabyte-1tb,2078-2.html)
Chassi: Ace Clubs 2 Micro Tower Black 500W PSU
Har planerat att köra diskarna i RAIDZ och ha EON som operativsystem.
EON är ett färdigpaketerat OpenSolaris variant för NAS. Man bootar t.ex från ett usb-minne och sen körs hela os'et från RAM.
Fördelarna med ZFS/RAIDZ är många och finns bl.a att läsa om här: http://hub.opensolaris.org/bin/view/Community+Group+zfs/