Permalänk
Medlem

NAS med FreeBSD/ZFS

Har nu fått beställt lite delar;

FD Array R2 mini-ITX chassi
Zotac H55 ITX
Core i3 530
4GB ddr3
samt att jag har 6st 500GB diskar liggandes.

Nu tänkte jag använda mig utav FreeBSD (8.1) för att dels lära mig operativsystemet bättre, samt dels lära mig ZFS bättre.

Nu är diskarna relativt små, och jag antar att jag kan nöja mig med att bara köra raidz(1), vilket borde ge lite över 2TB utrymme kvar.

Jag har dålig koll på ZFS, och vet inte riktigt om minnet sviker mig, men kan man byta ut diskar i sin raidz, mot t.ex 2TB diskar utan att tappa säkerhet/prestanda genom att få fler "partitioner"?
Min terminologi är säkert helt ute och cyklar vad gäller ZFS, men hoppas jag gör mig förstådd iaf.
Svaret finns säkert någonstans i den gigantiska OpenSolaris tråden, men förlåt mig för att jag inte orkar gå igenom den om så är fallet.

Permalänk
Medlem

Jag tänker bygga om min filserver från opensolaris med ZFS till FreeBSD med ZFS. Har också tänkt köra 8.1 så jag hänger på i denna tråden också.

raidz1 har en disk i redundans så om du använder 5 stycken 500GB får du 2 TB utrymme. Med 6 stycken så får du 2,5 TB.
Om du byter ut en disk i taget och kör resilver mellan varje byte så att du hela tiden kan behålla dina data så växer utrymmet när du har bytt ut alla diskarna i raidz-arrayen. Du behöver inte fundera på partitioner på lagringsdiskarna (däremot behövs det en partition på systemdisken för operativsystemet om jag fattat rätt).

Man kan också köra raidz2 med två diskar redundans eller raidz3 med 3 diskar redundans. Mirror är ett annat alternativ som ger snabbare IO än raidz. Så på systemdisken kan det löna sig att köra mirror, likaså om man kör databaser och sådant. Med 6 stycken 500GB skulle du kunna köra 3 stycken mirror i en zpool och få 1,5 TB väldigt snabbt utrymme lämpat för hög IO med snabb åtkomst.

Man kan även köra zfs på partitioner eller slices som det heter i freebsd och opensolaris och i fallet med freebsd så blir det ingen prestandaförslust eftersom skrivcachen inte stängs av som i opensolaris. Men det är ganska krångligt att hålla på med så smidigast är att låta ZFS ta hand om hela hårddiskar för lagringen.

När det gäller FreeBSD vill jag också lära mig hur det funkar. Läste att med FreeBSD är det möjligt att boota från en raidz så i teorin skulle man kunna klara sig utan dedikerad systemdisk. Men då kommer alla hårddiskar att jobba så fort operativsystemet har diskåtkomst så jag föredrar nog att separera systemet från lagringsdiskarna så kanske man kan varva ner diskarna när de inte används. Ett annat alternativ kan vara att boota på USB-minne och använda hårddiskarna endast för lagring.

På min filserver med opensolaris (som ska bytas ut till FreeBSD) kör jag nu två stycken 250 GB hårddiskar i mirror som systemdisk (en IDE och en SATA) och 5 stycken 1 TB diskar i raidz1 vilket ger 4 TB lagring och 250 GB för systemet. Detta funkar bra men jag har fullt på lagringsdiskarna. Mitt Antec 300 chassi börjar också bli fullt med mina sju hårddiskar men funderar på att sätta in någon hårddiskbur för 4 hårddiskar i 5,25-tums platserna så får jag plats för 10 diskar och så skaffa SATA-kontrollerkort så jag för fler SATA-portar.

Jag gillar zfs dels för felkontrollen och att man kan göra snapshots. Jag skulle vilja köra zfs även på systemdisken och gärna mirror på systemdiskarna så som jag gör idag. Ett problem med det är att trots att FreeBSD kan boota från zfs så saknar installationsprogrammet inbyggt stöd för ZFS. Man kan kringgå det genom att boota upp FixIt på installations-DVDn eller USB-installationspinnen och ifrån kommandoprompten manuellt skapa ZFS-filssystemen innan man kör installationsprogrammet. Verkar lite trixigt men det är inte omöjligt. Ett annat alternativ kan vara att använda installastionsskivan för PCBSD som har en option att installera freebsd och det installationsprogrammet stödjer ZFS.

Dela gärna med dig av dina erfarenheter när du installerar!

Permalänk
Avstängd

Jag har kört FreeBSD förrut och gillade det. FreeBSD har ett mycket gott rykte. Det kan vara bra att lära sig lite mera om andra OS. Så jag kommer att följa denna tråd. Posta hur det går. Det är aldrig fel att lära sig om flera olika OS och system.

Permalänk
Medlem

Kommer absolut dokumentera det hela och göra nåt liknande bygglogg. Delarna har tydligen redan packats och dimper nog ner redan imorgon. Det visade sig att jag har 7st 500GB liggandes, och möjlighet att plocka in en 320GB 2.5" WD Black-disk, vilket gör mitt chassi nyttjat till fullo (6st 3.5" platser samt 1st 2.5" plats).
Jag tror inte att jag bryr mig så mycket om själva systemdisken, sett till spegling osv, men kommer nog troligen köra raidz1 på de 6 diskarna i "raiden".

Det gladde mig att läsa att jag kan byta ut diskar efterhand och ha kvar datan. Kommer sannolikt köpa mig 6st större diskar i framtiden.

Exakta throughput'en klarar jag mig med nu också, har en gigabit switch det kommer gå genom, och endast en port på moderkortet ger väl i runda slängar runt 90 MB/s. Skulle behovet uppstå finns ju en PCI-E x16 att putta in en 2-4 portars NIC, antar jag. Men då kanske det är annat i systemet som flaskar.. det är inte tänkt att vara något monster, men inte heller halvdant.

EDIT:
Kommer nog försöka få till spindown osv på diskar, för att få ner energiåtgång och ljudnivå när den inte måste användas.
Är även inne på att underklocka den i möjligaste mån för att hålla temperatur och ljudnivå låg även här.

Permalänk
Medlem
Skrivet av Schrimp:

Nu är diskarna relativt små, och jag antar att jag kan nöja mig med att bara köra raidz(1), vilket borde ge lite över 2TB utrymme kvar.

Du kan köra raidz, flera mirror pooler, eller mycket annat. OM du är ute efter att lära dig skulle jag leka lite med de olika uppsättningarna för att få reda på hur de olika sakerna beter sig vid diskfel och liknande.

Citat:

Jag har dålig koll på ZFS, och vet inte riktigt om minnet sviker mig, men kan man byta ut diskar i sin raidz, mot t.ex 2TB diskar utan att tappa säkerhet/prestanda genom att få fler "partitioner"?

Det beror helt på hur du skapar poolen. FreeBSD stödjer fortfarande inte autoexpand som finns i v17 (?) av zpool. Vad du kan göra är att partitionera upp 2TB diskarna i 2+1TB partitioner, glabel eller liknande funkar för detta, sedan kan du ersätta den gamla vdev:en med den första partitionen, samt göra en ny vdev av den andra partitionen. På så vis får du en (5z1)+(5z1) array, ungefär som en RAID50. Däremot har du en disk som drar med sig flera delar av stripen. Ett alternativ är att hoppas att zpool v17 snart kommer med i -STABLE, tror att det finns med i antingen -HEAD eller -PERFORCE nu.

FreeBSD har förnuvarande lite problem att boota ifrån Zmirrors. Det kan vara värt att vänta med detta.

Ett tips: prova att köra OSet ifrån en USB-stick. Då kan du lägga till en 2.5"-SSD som läs/skriv-cache.

Permalänk
Medlem
Skrivet av mix_room:

FreeBSD stödjer fortfarande inte autoexpand som finns i v17 (?) av zpool. Vad du kan göra är att partitionera upp 2TB diskarna i 2+1TB partitioner, glabel eller liknande funkar för detta, sedan kan du ersätta den gamla vdev:en med den första partitionen, samt göra en ny vdev av den andra partitionen. På så vis får du en (5z1)+(5z1) array, ungefär som en RAID50. Däremot har du en disk som drar med sig flera delar av stripen. Ett alternativ är att hoppas att zpool v17 snart kommer med i -STABLE, tror att det finns med i antingen -HEAD eller -PERFORCE nu.

Är detta "autoexpand" samma sak som ronnylov nämnde ovan, resilvering?
I vilken ZFS-version kom detta i så fall?

Annars låter det ju tyvärr lite som det jag ville undvika, med flera partitioner/slices per disk.

Permalänk
Medlem
Skrivet av Schrimp:

Är detta "autoexpand" samma sak som ronnylov nämnde ovan, resilvering?

Nej. 'Autoexpand' betyder att man automatiskt utökar storleken på vdeven. Medans resilvering betyder att man kollar, och återskriver, hash-information och liknande. e

Citat:

I vilken ZFS-version kom detta i så fall?

17 tror jag. Enligt vad jag kunde leta fram finns numera v15 med i -HEAD. Finns rykten som säger att v22 finns med i -PERFORCE.

Citat:

Annars låter det ju tyvärr lite som det jag ville undvika, med flera partitioner/slices per disk.

Jo, det är ju inte idealiskt. Men den enda lösningen jag kom på just nu.

Permalänk
Medlem

Det kanske är en skillnad mellan opensolaris och freebsd det där med autoexpand? Eller menar vi olika saker?

Vad jag menar är att om man har t.ex. 6 stycken 500 GB-diskar kan man genom att byta ut dem till 6 stycken 2TB-diskar (genom att byta en i taget och återställa arrayen, ungefär som när man ersätter en trasig hårddisk) få utrymmet att automatiskt öka (om det hade funkat så som i opensolaris). Men denna feature tror jag fanns tidigare än zpool V17 väl? saddam kanske har en aning?

Edit: OK visserligen har autoexpand-propertyn tillkommit på senare tid (osäker på när) men det funkar ändå även på tidigare versioner genom att man bara exporterar poolen och sedan importerar den igen. Autoexpand verkar finnas i nuvarande ZFS-version på freebsd 8.1. Hittade info på freebsd forum:
The FreeBSD Forums - View Single Post - [Solved] How to resize a ZFS filesystem

För säkerhet skull ska jag testa det i virtualbox. Är bra att öva sig lite virtuellt innan man gör det skarpt...

Lagt till länk om att man kan expandera en raidz i freebsd
Permalänk
Avstängd

Om man planerar att ha 2TB diskar eller större nån gång i framtiden, så är det viktigt att köra raidz2. Därför att om en disk kraschar och man ska reparera sin zpool, så kan det ta flera dygn med stora diskar, kanske en vecka. Det betyder att ryker en disk till medan du reparerar din zpool, så har du tappat alla data. Kör man små diskar så går det snabbt att reparera sitt zpool. Jag kör raidz2, eftersom jag planerar att köra 3-4TB diskar senare. Då kommer jag ångra mig att jag inte körde raidz2.

Autoexpand känner jag inte till, tyvärr.

Permalänk
Medlem
Skrivet av ronnylov:

Det kanske är en skillnad mellan opensolaris och freebsd det där med autoexpand? Eller menar vi olika saker?
...
få utrymmet att automatiskt öka (om det hade funkat så som i opensolaris). Men denna feature tror jag fanns tidigare än zpool V17 väl?

Det gick tidigare inte att göra i FreeBSD, men nu verkar det fungera. Se min tråd här: [Solved] ZFS autoexpand property - The FreeBSD Forums

Citat:

Edit: OK visserligen har autoexpand-propertyn tillkommit på senare tid (osäker på när) men det funkar ändå även på tidigare versioner genom att man bara exporterar poolen och sedan importerar den igen.

Det visste jag inte. Tack.

Citat:

För säkerhet skull ska jag testa det i virtualbox. Är bra att öva sig lite virtuellt innan man gör det skarpt...

Det som är sa underbart med ZFS är ju att man slipper använda sig av virtualiseringsmjukvara, bara att dumpa allting pa en minnesbaserad disk.

mdconfig -a -t malloc -s 64m (md0 - mdN) repeat as desired mdconfig -a -t malloc -s 128m (mdN+1 ... ) repeat zpool create tank raidz md0 ... mdN zpool replace tank md0 mdN+1

Permalänk
Medlem

Jag testar alltså i virtualbox innan jag installerar FreeBSD skarpt på min hårdvara menar jag.

Försökte igår följa en guide att installera FreeBSD på zfs men det var himla omständigt och misslyckades.
Har nu hittat en annan guide som jag ännu inte testat:
Installing FreeBSD on a mirrored ZFS pool

Ett annat alternativ är att boota bas-systemet på UFS och ha allt annat på zfs.
HOWTO: Modern FreeBSD Install RELOADED (vermaden way) - The FreeBSD Forums

Tycker verkligen att installationsprogrammet borde förbättras i FreeBSD. Som det är nu blir man tvungen att fixa en massa grejer manuellt om man vill köra med ZFS. Visserligen gillar jag att pyssla med olika inställningar men det blir ju ganska tuff tröskel för nybörjare att ta sig igenom bara att installera operativsystemet på ett vettigt sätt.

Det jag saknar i guiderna ovan är hur man ställer in sådant som man normalt gör med sysinstall (för man kringår ju sysinstall genom att kopiera in filerna manuellt på zfs). Kan man köra sysinstall efteråt och ställa in saker som svenska tecken och svenskt tangentbord med mera? Eller är det bättre att redigera konfigurationsfilerna manuellt för allt sådant?

Enklast för nybörjaren kanske är att ha hela operativsystemet installerat med sysinstall på en separat hårddisk med UFS och så fixar man lagringen med zfs på lagringsdiskarna. Men då missar man finesserna med ZFS på systemdisken och det vore lite synd tycker jag.

Ett annat alternativ jag funderar på är om man installerar med installationsprogrammet som vanligt till UFS på en hårddisk så att man har ett fullt konfigurerat system och sedan kanske kan köra fixIt från installationsmediet och konvertera allting till ZFS på en annan hårddisk?
Självklart fanns det en guide för detta redan: From sysinstall to ZFS-only configuration. My work

Vilken installationsmetod rekommenderas?
Jag lutar åt det sista alternativet. Först vanlig installation och sedan konvertera det till ZFS.

Permalänk
Medlem

Jag har nu fått plockat ihop min burk sånär på att jag gjorde en liten miss med en kabel; ESATA > SATA hade jag ingen, så jag har ingen möjlighet att koppla in systemdisken.. trist nog
Men får nog skaffa mig en kabel imorgon.

Ett annat alternativ är som tidigare nämnts att installera på USB-sticka, och köra /var och /usr (om jag minns rätt) på raidz, men detta kommer väl få mina diskar att så gott som aldrig gå ner i viloläge..?

Permalänk
Medlem

Man kan ju ha en systempool på 1-2 diskar och resterande diskar för lagringspool. Då kanske man kan få lagringsdiskarna att gå ner i vila. Själv funderar jag på en variant att köpa två 2TB-diskar där jag partitionerar av 500 GB på vardera som mirror och så får resten av diskarna vara medlem i en pool av 1,5 TB diskar för lagring. Då kanske endast två av diskarna hålls vakna samtidigt som ala diskplatser i chassit fylls med stora diskar för lagring. På 500GB-mirrorn kan jag köra systemet och nedladdningar och sådant som håller diskarna vakna. Jag har redan en raidz1 på 5 st 1 TB-diskar och en mirror på 2x250 GB. Tänkte om man skrotar 2x250 GB och ersätter med 2 TB diskarna och sedan köper 3 st 1,5 TB så kan jag alltså öka på min lagringspool med ytterligare 5x1,5 TB.

Permalänk
Medlem
Skrivet av Schrimp:

Ett annat alternativ är som tidigare nämnts att installera på USB-sticka, och köra /var och /usr (om jag minns rätt) på raidz, men detta kommer väl få mina diskar att så gott som aldrig gå ner i viloläge..?

Varför inte mounta allting read-only. Lägg /var/ på en minnesdisk och sedan tuta och köra. Titta på tex nanobsd eller tinybsd. nanobsd är skrivet av phk@, och funkar bra för mig.

Permalänk
Medlem

Med /var/ på en minnesdisk, menar du som RAM-disk då? Känns riskabelt vid eventuellt strömavbrott.
Hur gör man med swap då? Men swap kanske används så sällan om man har mycket RAM att man kan lägga det på en ZFS-volym på lagringsdiskarna utan större risk att väcka dem från viloläget vid normal drift?

Själv har jag svårt att bestämma mig hur jag ska bygga ut min 5-diskars (5 x 1TB) med flera hårddiskar.
En idé som jag nämnde är att köpa 2 stycken 2 TB och 3 st 1,5 TB, splitta 2 TB med varsin 1,5 TB-partition och så använda de två 500GB partitionerna på dessa som mirror för systemet och så alltså utöka utrymmet med ytterligare 5 x 1,5 TB som raidz1.
Då får jag alltså ungefär som raid50 med 5x1 + 5x1,5 som ger 10 TB totalt utrymme för lagring och 500 GB mirror för system. Total redundans blir 3 TB och totalt 10,5 TB användbart utrymme (78% användbart utrymme).

Men som saddam nämnde vill man nog ha raidz2 om man kör 2TB-diskar och det kanske även behövs för 1,5 TB-diskar? Jag läste någonstans att man kan slå ihop hårddiskar som jbod med geom concat i freebsd. Jag skulle alltså kunna bunta ihop mina befintliga 1TB - diskar två och två för att få det att se ut som 2TB-diskar (får väl köpa till en 1TB-disk så det blir 6 stycken 1 TB motsvarande 3 stycken 2 TB). Om man gör detta med sina gamla 1 TB-diskar kan man alltså bygga på med nya 2TB-diskar. Då mitt chassi maximalt kan få in 10 stycken hårddiskar så kan jag alltså köpa till 1 styck 1 TB och 4 stycken 2 TB och då totalt ha 6 stycken 1 TB och 4 stycken 2 TB. Sedan alltså "bunta ihop" 2TB-diskarna parvis med geom concat så att de ser ut som 3 stcken 2 TB-diskar och tillsammans med de 4 nya 2 TB-diskarna så blir det som 7 stycken 2 TB-diskar som jag skulle kunna köra raidz2 på och få ut 10 TB lagringsutrymme plus 4 TB redundans (71% användbart utrymme). Sedan kan två diskar krascha oavsett vilka utan att poolen går ner.

Finns dock nackdelar med detta. Dels måste jag förstöra min gamla raidz1 med 4 TB data på. Dels så om någon av 1 TB-diskarna havererar vet man inte vilken av dem det var så man får väl byta ut dem parvis mot nya 2TB-diskar (eller så får man väl testa diskarna med tillverkarnas testprogram och se vilken som havererat och byta ut den trasiga). En annan nackdel är att det nog inte är lika snabbt som en stripe på två raidz1. En tredje nackdel är att jag inte får någon dedikerad systemdisk.

Men hur skulle man kunna skapa en sådan array utan att förlora data? Jag läste om ett intressant trix man kan göra. Man kan skapa en simulerad enhet på en imagefil och få den att se ut som en 2TB-hårddisk men som inte tar mer diskutrymme än den data som filen innehåller. Så om man t.ex. har tänkt använda 7 stycken 2 TB-diskar i en raidz2 så kan man skapa poolen med fem stycken riktiga hårddiskar och två stycken imagefiler. Eftersom den nya poolen ännu inte innehåller några data så är imagefilerna tomma och tar knappt någon plats alls. Sedan ställer man imagefil-diskarna offline och plockar bort dem från raidz2-poolen så att den körs som degraded utan redundans med 5 stycken hårddiskar (i mitt fall skulle jag behöva 6 stycken 4*2 TB + 2 st 1TB i jbod). Så jag får degradera min befintliga 5-diskars raidz1 till 4 diskar utan redundans så jag kan få ihop diskarna till den degraderade raidz2-poolen. Sedan kopiera över alla data mellan de två degraderade poolerna där båda kör helt utan redundans. Det blir ju ett himla kritiskt steg... Sedan när alla data är överförda så skapar man de återstående jbod-diskarna som behövs för raidz2-arrayen och gör resilver på denna så att man återfår redundansen. Men försöker jag något sådant så får jag garanterat en diskkrasch eller råkar sabba något manuellt så all data förloras. Man bör alltså göra backup innan man försöker sig på något sådant!

Å andra sidan om jag väljer en pool bestående av två stycken raidz1 med 10 diskar så blir den snabbare än en 7-diskars (10 diskars varav några i jbod) raidz2. Och med min raidz2-version har jag inga systempartitioner och fullt i alla hårddiskplatser så då får jag antingen boota på raidz2 eller köra på USB. Eventuellt kanske man kan klämma in någon 2,5-tums hårddisk som systemdisk, de är ju små och bör gå att pilla in någonstans i chassit om man moddar lite.

Men hur är det med geom concat, får man prestandaförlust när man kör det? Några andra nackdelar med detta när det gäller hur ZFS fungerar? Man vill ju inte köra ZFS ovanpå en raid för man går miste om vissa grejer som felkorrektion har jag för mig men i det här fallet så får jag ju redundansen via övriga diskar. Man kanske till och med vågar sig på att köra geom raid0 på hårddiskparen för att möjligen få bättre prestanda?

Permalänk
Avstängd

Ronnylov, vad sägs om att du bara köper 2TB diskar och byter ut alla diskar, en efter en? Så slipper du stöka runt. Men, med så stora diskar så kanske du hellre vill köra raidz2...

Permalänk
Medlem

Känns lite som slöseri att inte använda de gamla 1TB-diskarna. Men du har en poäng, jag slipper köpa kontrollerkort, kablar, hårddiskbur och får lägre strömförbrukning. Kanske kan använda de gamla diskarna för backuper. Får fundera mer på saken.

Permalänk
Medlem

http://www.sweclockers.com/galleri/5845-bygga-nas

Då var man igång. Nu väntar jag bara på att backupen av min 2.5" disk ska bli klar så jag kan sparka igång systemet.

EDIT:
Någon som vet hur man får igång IOZone på en 64bit FreeBSD installation?
Det verkar gå bra att kompilera 32bit versionen, fast får bara en kärna som arbetar.
Nånting är galet.. men verkar inte finnas 64bit??

Permalänk
Medlem
Skrivet av Schrimp:

Någon som vet hur man får igång IOZone på en 64bit FreeBSD installation?
Det verkar gå bra att kompilera 32bit versionen, fast får bara en kärna som arbetar.
Nånting är galet.. men verkar inte finnas 64bit??

Finns ett paket, testa det: ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.1-re...

Permalänk
Medlem

Jag har nu funderat och kommit på hur jag ska gör över från raidz1 till raidz2 och utöka utrymmet till 10 TB nu.
I planen ingår att slå samman par av 1TB-diskar till 2 TB-diskar (dock har jag modifierat planen en aning jämfört med tidigare funderingar).
Med metoden jag klurat ut kommer jag aldrig gå miste om redundansen när jag bygger om poolen så det känns som en ganska säker metod.

Hur som helst nu till min fråga:
Om man slår samman två hårddiskar med geom concatenate så accessas väl endast en av de två hårddiskarna åt gången? Jag menar läser/skriver den data i början av den sammanslagna disken så läser arbetar endast den ena disken. Visserligen kan man ju arbeta med flera filer samtidigt på den sammanslagna disken men det blir väl ingen skillnad jämfört med att använda en enda 2 TB-disk (möjligen kan det bli snabbare med sammanslagna disken om de två filåtkomsterna kan jobba parallellt på varsin disk).

Så min fundering är att då kanske jag skulle kunna använda två kanaler på mitt PCI-baserade Sil3114 SATA-kort till ett sammanslaget hårddiskpar utan att det blir någon flaskhals jämfört med att ha använt en dubbelt så stor hårddisk på bara en SATA-port? PCI-bussen riskerar ju bli flaskhals om man jobbar mot två hårddiskar samtidigt på ett PCI-kontrollerkort.

Så här funkar min övergång från raidz1 5x1 TB till raidz2 7 x 2 TB, där 1 TB-diskarna återanvänds:

Inköp: 4 stycken hårddiskar 2 TB och en hårddisk 1,5 TB.
Ett PCIe-baserat kontrollerkort för två SATA-portar (Highpoint Rocket 620).
Återanvänd ett gammalt 4-portars PCI SATA-kort (Sil3114) som jag har liggandes.
Befintligt moderkort har 6 stycken SATA-portar.
Köp till en "4 in 3 " modul för 4 hårddiskar i 3 stycken 5,25 tums-platser i Antec 300-chassit.
Beräknad totalkostnad ca 6000 kr för att expandera utrymmet från 4 TB till 10 TB och ökad redundans från raidz1 till raidz2.

1) Koppla in 1,5 TB-hårddisken, partitionera 500 GB för systemet och 1000 GB för användning i raidz2-poolen senare.

2) Koppla in en 2,5-tums 160 GB USB-hårddisk jag har liggandes (eventuellt dissekera den och koppla via SATA eller IDE beroende på vad som sitter i den).

3) Installera freebsd med ZFS mirror/raid1 på lämpligt sätt med 500 GB-partitionen och USB-hårddisken speglade (ger 160 GB speglat utrymme med möjlighet till 500 GB om man senare byter ut USB-hårddisken). Låt denna mirror vara en "systempool".

4) Skapa två stycken imagefiler på ZFS-mirror-poolen som ser ut som 1 TB vardera vid montering i filsystemet men endast tar det utrymme som utnyttjas i plats på hårddiskarna.

5) Skapa en 7 diskars raidz2 med 1000 GB-partitionen från 1,5-TB-disken, de två två imagefilerna som vi skapade i steg 4 samt de fyra 2TB-hårddiskarna. Eftersom minsta diskarna är 1 TB och 7 diskars raidz2 så blir användbart utrymme 5x1 TB = 5 TB.

6) Innan vi kan fylla data i vår nya lagringspool måste vi sätta imagefil-diskarna offline annars kommer de att bli större än vad som får plats på mirror-poolen. Vår nya lagringspool är nu en raidz2 med två stycken saknade hårddiskar, d.v.s. ingen redundans men den fungerar. Nu har vi 5 TB lagringsutrymme på verkliga hårddiskar som mer än väl rymmer de 4 TB som finns på den gamla raidz1-poolen.

7) Koppla in de 5 stycken 1TB-hårddiskarna som vår gamla raidz1-pool använder och importera poolen.

8) Kör scrub på gamla raidz1-poolen för att detektera och reparera eventuella fel.

9) Eftersom min raidz1 kördes med det gamla OpenSolaris 2008.11 är troligen zpool en äldre version än senaste i freebsd 8.1. Så uppgradera till senaste zpool-version och zfs-version som används i freebsd.

10) Kör zfs send | zfs receive från gamla lagringspoolen till nya lagringspoolen så att den klonas till de nya hårddiskarna. Vi har fortfarande en disk redundans på vår gamla raidz1 och när kopieringen är färdig har vi även en kopia på alla data på den degraderade nya poolen. Alltså fortfarande ganska bra redundans mot trasig hårddisk.

11) Sätt en 1TB-hårddisk offline i raidz1-poolen.

12) Ersätt en av imagefilerna i radiz2-poolen med den 1 TB-hårddisk vi frigjorde från raidz1-poolen. Låt den göra resilver. Vi har nu fortfarande degraderad raidz2-pool men den fungerar och har en disk i redundans som raidz1 ungefär. Vi har även en kopia av alla filer på en degraderad raidz1-pool. Bra säkerhet fortfarande!

13) exportera raidz1-poolen. Vi kommer att behöva hårddiskarna så nu förstör vi den gamla poolen.

14) Ersätt den sista offline image-filen i raidz2-poolen med en av 1TB-hårddiskarna som vi tar från den förstörda gamla raidz1-poolen. Låt raidz2-poolen återigen göra resilver. Nu har vi en 7 diskars raidz2 med två diskars redundans. Tillgängligt utrymme är 5 TB men det rymmer ju alla data från den gamla lagringspoolen så nu känns det ganska säkert och bra. Men vi vill ha mera diskutrymme för poolen är tyvärr fylld 4 TB av 5 TB, alltså 80% och det vill man egentligen inte överskrida.

15) Men vi har tre stycken 1 TB-diskar över från gamla poolen och 3 stycken 1 TB "diskar" (en är ju en partition) i raidz2-poolen så genom att ersätta 1TB-diskarna med 2-TB-diskar kan man få poolen att växa när alla diskarna är 2 TB. Med jbod med hjälp av geom concatenate så kan vi sätta en disk offline i taget, slå samman med en av de lediga 1TB-diskarna och skapa en 2 TB "disk" av 2 stycken 1TB-diskar. Alltså ersätter vi dessa 1TB med sådana 2TB "diskar". Kör resilver mellan varje byte.

16) Eventuellt kan man behöva göra zpool export och zpool imort om inte autoexpand fungerar automatiskt. Då kommer vi nu att ha 10 TB utrymme med raidz2.

Låter detta som en genomförbar plan att gå fram 5 diskars raidz1 till 7 diskars raidz2 (innehållande 10 verkliga diskar) plus en spegling av systemdisken mot en partition på en av lagringsdiskarna? Känner att jag vill ha speglad systemdisk och detta verkar vara ett prisvärt sätt att utnyttja min befintliga hårdvara.

Rsiken med metoden är att det är risk att blanda ihop hårddiskarna så man får dokumetera noggrannt vilka som hör ihop. Även risk att man halkar på tangenterna och råkar sabba något när man konfigurerar så här får man också vara noggrann...

Permalänk
Medlem

Oj, massivt förarbete ronny!
Jag är inte tillräckligt bevandrad än, så jag låter andra få svara på dina frågor.

Har upptäckt för egen del att min NAS har lite tvivelaktig nätverksprestanda.
iperf rapporterar fina 112MB/s alt. 936Mbit/s. Men vid kopiering av t.ex 8GB fil, så landar överföringen på 23 MB/s.
Kopierar jag 2st filer, så landar dom på ca 12MB/s styck..

Jag har gjort lite justeringar av buffrar etc, men det verkar inte hjälpa.

Ganska underligt, när allt verkar flyta bra i övrigt.. använder CIFS.
En av diskarna verkar dock betydligt slöare än resten, men fortfarande över 23MB/s, och i en raidz2 så borde väl överföringen landa på betydligt högre med tanke på att det liknar en array?

Såhär ser iozone ut..

# ./iozone -r256k -s128M -i0 -w Iozone: Performance Test of File I/O Version $Revision: 3.347 $ Compiled for 64 bit mode. Build: freebsd Run began: Thu Sep 23 13:42:26 2010 Record Size 256 KB File size set to 131072 KB Setting no_unlink Command line used: ./iozone -r256k -s128M -i0 -w Output is in Kbytes/sec Time Resolution = 0.000001 seconds. Processor cache size set to 1024 Kbytes. Processor cache line size set to 32 bytes. File stride size set to 17 * record size. random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 131072 256 75942 85141 iozone test complete.

Och lite större ..

# ./iozone -r256k -s1024M -i0 -w Iozone: Performance Test of File I/O Version $Revision: 3.347 $ Compiled for 64 bit mode. Build: freebsd Run began: Thu Sep 23 13:44:40 2010 Record Size 256 KB File size set to 1048576 KB Setting no_unlink Command line used: ./iozone -r256k -s1024M -i0 -w Output is in Kbytes/sec Time Resolution = 0.000001 seconds. Processor cache size set to 1024 Kbytes. Processor cache line size set to 32 bytes. File stride size set to 17 * record size. random random bkwd record stride KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 1048576 256 62479 59116 iozone test complete.

Permalänk
Medlem

Du kan även kolla med zpool iostat -v poolnamn så kan du se lite statistik över hur lagringspoolen jobbar. Den slöaste disken begränsar prestandan hos alla diskarna i en raidz2. Så om en hårddisk är betydligt slöare så kan den sabba prestandan hos hela lagringspoolen. Om du har 7 diskar i raidz2 så bör sekventiella överföringshastigheten bli 5 gånger den slöaste diskens hastighet. Däremot blir IOPS inte bättre än för en ensam hårddisk när man kör raidz2. Du kanske kan testa att tillfälligt ersätta den slöa disken med en annan hårddisk och se hur det verkar med prestandan efter att den är färdig med resilver (eller testa köra degraderat).

Vad har du för operativsystem på klientdatorn? Jag får betydligt högre hastigheter om klienten kör Windows 7 eller Vista jämfört med XP och Linux när jag kör CIFS mot opensolaris. Hade även problem när jag körde med realtek nätverkskort som löste sig när jag bytte till intel nätverkskort. Nu var detta ganska längesen så detta kanske inte är så farligt nu för tiden. Eventuellt kan man testa med att köra jumbo frames om nätverket stödjer detta. Testa med ftp eller NFS och se om det funkar bättre än CIFS.

Du har inte råkat starta någon scrub eller resilver som körs i bakgrunden?

EDIT: Sökte lite och hittade detta:
#10041966

Kanske kan vara värt att försöka tweaka lite enligt detta?

Permalänk
Medlem
Skrivet av ronnylov:

Du kan även kolla med zpool iostat -v poolnamn så kan du se lite statistik över hur lagringspoolen jobbar. Den slöaste disken begränsar prestandan hos alla diskarna i en raidz2. Så om en hårddisk är betydligt slöare så kan den sabba prestandan hos hela lagringspoolen. Om du har 7 diskar i raidz2 så bör sekventiella överföringshastigheten bli 5 gånger den slöaste diskens hastighet. Däremot blir IOPS inte bättre än för en ensam hårddisk när man kör raidz2. Du kanske kan testa att tillfälligt ersätta den slöa disken med en annan hårddisk och se hur det verkar med prestandan efter att den är färdig med resilver (eller testa köra degraderat).

Vad har du för operativsystem på klientdatorn? Jag får betydligt högre hastigheter om klienten kör Windows 7 eller Vista jämfört med XP och Linux när jag kör CIFS mot opensolaris. Hade även problem när jag körde med realtek nätverkskort som löste sig när jag bytte till intel nätverkskort. Nu var detta ganska längesen så detta kanske inte är så farligt nu för tiden. Eventuellt kan man testa med att köra jumbo frames om nätverket stödjer detta. Testa med ftp eller NFS och se om det funkar bättre än CIFS.

Du har inte råkat starta någon scrub eller resilver som körs i bakgrunden?

EDIT: Sökte lite och hittade detta:
#10041966

Kanske kan vara värt att försöka tweaka lite enligt detta?

Tackar!
Ingen scrub eller liknande ligger i bakgrunden.

Jag följde tipsen, och jag bumpade upp till 30 MB/s nu, bättre men långt ifrån vad jag skulle kalla bra.
Jag har än så länge bara kollat från Ubuntu 10.04 och dess CIFS.

EDIT:
Min slöaste disk presterade som sämst 33 MB/s när jag körde diskinfo.. näst sämsta låg en bit över 50 MB/s. Men även om den nu inte är snabbare än 33 MB/s, så borde ju skrivning och läsning kunna toppa min Gbit-anslutning tycker jag..
Redan 4st diskar som läser 30 MB/s maxar ju ut Gbit. :S

Permalänk
Medlem

Vad använder du på servern? FreeBSD 8.1 + Samba 3.4?

Permalänk
Medlem
Skrivet av Weeblie:

Vad använder du på servern? FreeBSD 8.1 + Samba 3.4?

Ja, kör FreeBSD 8.1 amd64.

Nu har jag kompilerat om Samba (3.4.8) och har lyckats krama ur 50-53 MB/s nu!

Men jag är dock inte helt nöjd ändå.. Jag kör
# zpool iostat 1

tank 6.97G 2.71T 0 1.97K 0 252M tank 7.48G 2.71T 0 951 0 90.5M tank 7.48G 2.71T 0 0 0 0 tank 7.48G 2.71T 0 0 0 0 tank 7.48G 2.71T 0 0 0 0 tank 7.48G 2.71T 0 0 0 0 tank 7.48G 2.71T 0 0 0 0 tank 7.48G 2.71T 0 2.12K 0 272M tank 7.98G 2.71T 2 837 12.0K 71.5M tank 7.98G 2.71T 0 0 0 0 tank 7.98G 2.71T 0 0 0 0 tank 7.98G 2.71T 0 0 0 0 tank 7.98G 2.71T 0 0 0 0 tank 7.98G 2.71T 0 0 0 0 tank 7.98G 2.71T 0 2.12K 0 263M tank 8.50G 2.71T 0 858 0 91.3M tank 8.50G 2.71T 0 0 0 0 tank 8.50G 2.71T 0 275 0 34.4M tank 8.50G 2.71T 0 0 0 0

Och
# netstat -I em0 -w 1

input (em0) output packets errs idrops bytes packets errs bytes colls 52841 0 0 78844927 55109 0 3696217 0 52559 0 0 78425306 54810 0 3675535 0 38496 0 0 57441148 40146 0 2692384 0 0 0 0 0 0 0 0 0 2 0 0 277 1 0 242 0 3359 0 0 5010786 3551 0 238267 0 53473 0 0 79790026 55861 0 3746185 0 52697 0 0 78631226 54994 0 3688228 0 53614 0 0 80000488 56027 0 3757309 0 54696 0 0 81613237 57264 0 3840307 0 39216 0 0 58515164 41053 0 2752864 0 0 0 0 0 0 0 0 0 1 0 0 66 1 0 242 0 1 0 0 66 1 0 178 0 30914 0 0 46126357 32300 0 2166184 0 54430 0 0 81216386 56912 0 3817348 0 54005 0 0 80583426 56440 0 3785092 0 53028 0 0 79126336 55376 0 3713218 0

Det känns som att när den skriver datan, så dippar överföringen.. kan man justera detta så den skriver mer.. kontinuerligt?

EDIT:
Jag tror jag kan utgå från att min dator med Ubuntu 10.04 som jag kopierar ifrån inte går fortare än såhär. När jag kopierar en 8GB stor fil från min X25-M, så ligger den på ganska stadiga 53MB/s. Denna är god för en bra bit över 150MB/s så..

Ska göra ett iperf test med UDP, se vad det ger.

EDIT 2:

./iperf -U -c 192.168.1.10 -f M ------------------------------------------------------------ Client connecting to 192.168.1.10, TCP port 5001 TCP window size: 0.02 MByte (default) ------------------------------------------------------------ [ 3] local 192.168.1.1 port 40280 connected with 192.168.1.10 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 1125 MBytes 112 MBytes/sec

Det verkar inte vara nåt fel.. men jag antar att det är dessa realtek-kort..

Permalänk
Medlem

Intressant att du lyckats trimma upp farten upp mot det dubbla! Dela gärna med dig om vilka tweaks du gjorde. Ändrade du några parametrar när du kompilerade om samba eftersom det blev snabbare?

Jag tror ändå att det är samba och CIFS som är flaskhalsen för dig. Kör man Windows 7 eller Vista på klientdatorn så körs en nyare variant av SMB-protokollet som funkar mycket snabbare även mot samba-servrar. Tror en skillnad är att det nyare protokollet buffrar mera.

Har även för mig att ZFS jobbar sådär ryckvis. När cachen ska skrivas till disk eller fyllas upp från disk så blir det en paus när ZFS räknar checksummor och sådant. Man kan väl tweaka en del ZFS-parametrar har jag för mig men det sägs ju att det inte ska behövas tweakas om man kör amd64 och har mer än 2GB RAM. Om hårddiskarna är snabba så tar det kortare tid att tömma cachen till disk än vad det tar att fylla den från nätverket och därför blir det ryckig skrivning.

En sak du skulle kunna testa är att överföra samma fil två gånger från servern. Om filen är tillräckligt liten så att den var cachad i RAM på servern så bör ju inte hårddiskprestandan ha någon betydelse när du överför samma fil andra gången. Om det då ändå inte blir något snabbare så är det väl nätverket och dess protokoll som sätter gränserna.

Har du testat något annat nätverksprotokoll för filöverföring såsom NFS eller ftp?

Permalänk
Medlem

FreeBSD 8.0 = A Great NAS Server | My Wushu Blog

Rätt bra tweaks där också, notera dock att det under sysctl.conf och kern* är baserat på hur mycket minne burken har, och passar bara hans exempel.

ispfw_load="YES" är nån hårdvaru-drivis också
Testa också med/utan sendfile i samba

Permalänk
Medlem
Skrivet av Neco:

FreeBSD 8.0 = A Great NAS Server | My Wushu Blog

Rätt bra tweaks där också, notera dock att det under sysctl.conf och kern* är baserat på hur mycket minne burken har, och passar bara hans exempel.

ispfw_load="YES" är nån hårdvaru-drivis också
Testa också med/utan sendfile i samba

Ronnylov gav mig länken till en annan tråd där du postade denna. Tack till er båda
Har kikat lite på den och tagit vara på lite tweaks, sammanställer allt så det liknar en guide.
Håller på och testar än, men snart så

Permalänk
Medlem

Jag har sökt lite till eftersom det är viktigt för mig med bra prestanda med samba.
Hittade en grej om AIO_SUPPORT som skulle kunna göra susen:
[Solved] FreeBSD 8.0: Samba33 read slow and write fast - The FreeBSD Forums

Verkar som att vfs.zfs.prefetch_disable=0 kan vara bra också om man har 4GB RAM (tydligen ställs detta in automatiskt om man har mer än 4 GB RAM, men som i länken ovan har jag integrerad video som tar en aning minne). Kan kanske vara värt att testa. Annars kanske det kan vara värt att skaffa mera minne för att få igång zfs prefetch?

Här är en annan intressant tråd:
slow zfs performance & long pauses when writing - [H]ard|Forum

EDIT: Angående socket options i smb.conf så verkar det i alla fall med Linux som att det funkar bättre om man inte anger bufferststorlekarna manuellt utan istället låter detta justeras automatiskt av operativsystemet. På min HTPC som kör ubuntu samba server får jag jättebra fart med samba (typ 100 MB/s) med endast dessa socket options:
socket options = TCP_NODELAY IPTOS_LOWDELAY
Vet inte om detta stämmer även med freebsd men testa gärna.

Permalänk
Medlem
Skrivet av ronnylov:

Jag har sökt lite till eftersom det är viktigt för mig med bra prestanda med samba.
Hittade en grej om AIO_SUPPORT som skulle kunna göra susen:
[Solved] FreeBSD 8.0: Samba33 read slow and write fast - The FreeBSD Forums

Verkar som att vfs.zfs.prefetch_disable=0 kan vara bra också om man har 4GB RAM (tydligen ställs detta in automatiskt om man har mer än 4 GB RAM, men som i länken ovan har jag integrerad video som tar en aning minne). Kan kanske vara värt att testa. Annars kanske det kan vara värt att skaffa mera minne för att få igång zfs prefetch?

Här är en annan intressant tråd:
slow zfs performance & long pauses when writing - [H]ard|Forum

EDIT: Angående socket options i smb.conf så verkar det i alla fall med Linux som att det funkar bättre om man inte anger bufferststorlekarna manuellt utan istället låter detta justeras automatiskt av operativsystemet. På min HTPC som kör ubuntu samba server får jag jättebra fart med samba (typ 100 MB/s) med endast dessa socket options:
socket options = TCP_NODELAY IPTOS_LOWDELAY
Vet inte om detta stämmer även med freebsd men testa gärna.

Du är en klippa ronny!

Jag har filat vidare i konfigurationen.. jag har nu lyckats med att få 55+ MB/s i både skriv och läs över CIFS, vilket är en förbättring.

Jag har även lyckats pressa upp min tidigare skrivhastighet på som värst 33MB/s till fina 231MB/s, vilket jag får anse vara bra med tanke på att två av de sex diskarna är GreenPower diskar, resterande är Seagate Barracuda 7200.11 och 7200.12.
Läshastigheten ligger på 312MB/s som bäst. Tror inte jag ids gräva i det mer, det överstiger långt vad jag kan få ut ur överföringen i nätverket ändå.

# dd if=/dev/zero of=/tank/testfile.1 bs=1m count=10000 10000+0 records in 10000+0 records out 10485760000 bytes transferred in 45.329956 secs (231320763 bytes/sec) # dd if=/tank/testfile.1 of=/dev/null bs=1m 10000+0 records in 10000+0 records out 10485760000 bytes transferred in 34.254465 secs (306113669 bytes/sec) # dd if=/tank/testfile.1 of=/dev/null bs=1m 10000+0 records in 10000+0 records out 10485760000 bytes transferred in 33.571897 secs (312337429 bytes/sec)

Nu är det enbart nätverket och/eller diverse inställningar som begränsar för CIFS.
Jag ska luska i hur jag kan testa med Win7 för att se om det är Ubuntu som spökar.
Kunde jag nå 80+ MB/s vore jag mer än nöjd!

EDIT:
Efter att ha testat med ftp-överföring kan jag meddela att NAS'en pressar ut 80.9 MB/s på en 8GB stor fil.
Helt klart något med Samba. Men jag tror jag nöjer mig med Samba-inställningar nu, som sagt.