Hur många diskar behöver jag för ZFS?

Permalänk

Hur många diskar behöver jag för ZFS?

Hej!

Jag har gått i tankarna rätt länge på att göra något jag aldrig gjort tidigare - jag har tänkt sätta upp en lagringsserver med ZFS. Jag har främst två mål: skydd mot datakorruption och enkla & säkra backupper. All min data får plats på en 3 TB-hårddisk, marginaler inräknat. Frågan är hur många 3 TB-diskar jag behöver totalt.

Vad jag har hört så ska man ha minst två speglade diskar för ZFS - med endast en disk så kan ZFS inte rätta till eventuella bitfel, utan den behöver en disk att jämföra mot. Jag vet inte hur väl detta stämmer, men om det gör det så skulle det innebära två st 3 TB-diskar så långt.

Sedan är det dags för backuppen. Jag vill kunna ta en offlinebackup (en spegling) till en USB-ansluten extern hårddisk, som jag sedan kopplar ur och förvarar på ett säkert ställe. Om något skulle bli knas med servern vill jag bara kunna ta ut hårddisken ur sitt kabinett, stoppa in den i servern och vara up-and-running igen så att säga. Då är frågan, hur är det med ZFS och externa diskar? Räcker det med en extern disk för att ZFS ska kunna upptäcka och rätta till tysta bitfel? Kan bitfel uppstå då hårddisken är avstängd och urkopplad?

Jag har även hört att det inte går att ändra storlek/utöka sin zpool när man väl skapat den. Hur skulle det så praktiskt fungera med att koppla in en extern hårddisk med ZFS och spegla datorns interna disk(ar)s zpool mot den? Hur får man skyddet som ZFS erbjuder att funka på externa diskar?

Hoppas det går att begripa vad jag är ute efter

Visa signatur
Permalänk
Medlem

Då behöver minst två diskar för att spegla eller minst tre diskar för paritet (raidz). Någon av de behövs för att den ska kunna rätta till bitfel som sagt, men självklart kan du köra ZFS på bara en disk också, den kan fortfarande detektera bitfel men den kan av naturliga orsaker inte veta vad datan faktiskt var innan felen. Notera att andra filsystem inte har funktionen alls (eller ja ReFS & Btrfs och då med samma begränsningar) så det är i så fall bara en extrafunktioner som du inte får, inte något som är sämre på ZFS än andra system.

Du kan inte bygga ut en raidz vdev som sagt, däremot kan en enkel disk uppgraderas till en spegel. Du kan dock stripes in fler vdevs efter hand så t.ex. om du har en 3-disks raidz kan du sedan stripes den med två nya fiskar som speglar varandra.

ZFS bryr sig inte om om dina diskar är externa, onterna, virtuella eller något annat. Du pekar den på blockdevices.

Permalänk
Medlem

Notera även att ZFS är minneskrävande, och basreglen är 1GB minne för varje TB fysisk disk...

Permalänk
Medlem

@C0mbat: Precis, helst ännu mer. Ångrar själv att jag skaffade ett MB som bara stödjer 32GB max på 10 TB disk när jag skaffade FreeNAS.

Visa signatur

Citera för svar

Stora Owncloud/Nextcloud-tråden: http://www.sweclockers.com/forum/122-server/1212245-officiell...
Jobb: Datacenter Manager
Grundare: https://www.hanssonit.se

Permalänk
Medlem

ZFS kräver massa RAM till ARC (read cache), men kommer funka med mindre än 1GB RAM per TB disk. Det du tappar är möjligtvis lite läsprestanda. Om man vill köra med dedup vill man dock ha betydligt mer RAM än 1GB / TB lite beroende på hur ens datamönster ser ut om man inte vill att prestandan ska gå helt i botten.

Permalänk
Medlem

Du kan skicka zfs snapshot till din externa usb-disk, eller vilket filsystem som helst. Då speglas ditt filsystem just i det ögonblicket, sen kan du köra incremental backup efter först körningen.

Jag har endast kört snaps mellan två zfs pooler, men du kan även köra usb-disken som en zpool, du behöver endast en disk för zfs. (Sen får du knappt några direkta fördelar, men...)

Eftersom snaps är read only så är dom skyddade i viss mån från typ virus/hacks (sålänge du inte själv typ fat fingers it...)

Edit. Du ska inte köra med dedup ändå, compression räcker. (Låter inte direkt som du lagrar hundratals liknande containers)

Skickades från m.sweclockers.com

Visa signatur

En server här, några servrar där.

Permalänk
Medlem
Skrivet av Marsupilami:

[...] med endast en disk så kan ZFS inte rätta till eventuella bitfel [...]

Ännu värre än så att köra ZFS mot en lagringsenhet(det går, men är inte att rekommendera). Om data otillbörligt förändras på en viss plats så förlorar Du allt istället. Detta är mest som en varning till dom som tänker sig köra ZFS mot en lagringsenhet för att få information om t.ex. bitflippar inträffat men ej har behov av reparation. Det går förvisso att ställa hur många kopior som skall lagras inom en ZFS volym men då förlorar man utrymme(t.ex. 2 kopior == 50% effektivt utrymme) Då är det bättre att köra UFS.

Visa signatur

Grundregel för felsökning: Bryt och begränsa.

Permalänk
Medlem

För att kunna ge ett bra svar behöver vi veta vad för data som skall lagras och hur användingen ser ut.

Som flera tidigare har påpekat så vill man ha en hel del RAM, men hur mycket skulle jag säga beror på just vad som lagras och användningen av datan. Stora filer som sällan används (filmer, avbildningar) fungerar bra med en mindre mängd RAM än t.ex. många små filer som används i större grad (både läsning och skrivning). Givetvis finns det speicalfall som är annorlunda, exempelvis stora virtuella diskar för virtuella maskiner som används (här är ett typexempel där man vill ha mycket RAM, ju mer desto bättre, men det finns en gräns där det kan börja bli problem). Ska dock bara en bunt filer lagras och sällan användas (varken läsas eller skrivas) så skulle jag nog vilja påstå att 8 GB RAM räcker långt, givetvis beroende på om maskinen har andra tjänster eller ej. Notera också att ARC kan begränsas till så mycket/lite man vill ha det.

Att köra en zpool på en singeldisk fungerar bra, så länge inte disken går sönder eller att sektorer går sönder. ZFS kommer givetvis upptäcka detta så man vet när något har gått fel, och var felet ligger. Detta är långt mycket bättre än vad nästan alla andra filsystem gör. (Stort tack till både NTFS och EXT3 som "tyst" tappat bort data för mig.) Detta tillsammans med alla andra fördelar med ZFS (komprimering, snapshots, send/recieve etc) gör att jag helt klart föredrar det på singeldisk framför andra filsystem, om möjligt.

Ett litet förtydligande också ifall man kör ZFS på en singeldisk. Om en sektor eller liknande ej går att läsa och man förlorar data kan det lagas automagiskt om man har en riktig jävla tur. Finns datan i ARC kan det nämligen ske. Det enda tillfället detta händer vid är dock under en scrub, annars kommer j udatan läsas från ARC istället för disk. Fast om detta händer är det dags att köpa ett par trisslotter. När felet ej kan återskapas så rullar man tillbaka till det senast snapshot som fungerar och sedan återskapar sin data från senaste backup genom att hämta det senaste snapshotet.

Men för att komma med något mer vettigt förslag till TS. Kör helst en spegel på så stora diskar du behöver. 3 TB må räcka nu med viss marginal, men har du eventuellt behov av mer utrymme senare kan snäppet störra diskar underlätta. En zpool som börjar bli full kan börja visa jobbiga prestandaproblem.

För backup till en extern disk ser jag tre olika alternativ här:

1) Gör en zpool av den externa disken och kör sedan med zfs send/recieve för att skicka över alla filsystem du vill ha backup på. Fördelen här är att det kommer gå snabbare att ta inkrementella snapshots då bara förändringar behöver flyttas. Dock kan det vara en stor fördel att ha något skript som underlättar detta. Att skriva alla kommandona för hand kan bli lite jobbigt om det handlar om rätt många filsystem. Fördelen med denna lösning är att man även får en versioneshantering av alla backuper. Behövs data från ett äldre datum så går man till ett äldre snapshot och hämtar ut datan därifrån. Detta är dock även bra att ha på sin vanliga lagring också så man slipper gå till sin backup.

2) Gör den externa disken till en del av zpoolen. Kanske låter lite dumt men om du har en trevägs-spegel av två interna diskar, samt en extern, så kommer alla data ipoolen att replikeras till den externa disken så fort ZFS upptäcker att den finns. Nackdelen blir dock att ZFS kommer varna om att disken saknas och zpoolen har status "DEGRADED". Detta kan generera onödigt många fel i antingen loggar eller mailutskick, beroende på vad för system som körs. Fördelen är dock att datan kommer vara intakt, samt att den externa disken kan kopplas in på en annan maskin och importeras som en egen pool där endast en av tre diskar finns tillgängliga. Som en bonus så kan även fel på den externa disken fixas genom att vara inkopplad och en scrub körs. Nackdelen här är ju dock att det endast fungerar om zpoolen består av en spegel. Vid andra konstellationer är helt klart alternativ 1 bättre.

3) Den externa disken kör ett helt annat filsystem där backup körs genom vanliga kopieringar eller, ännu bättre, med hjälp av t.ex. rsync. Inget beroende till ZFS kommer finnas här, men de operativsystem man försöker återställa data med måste givetvis ha support för filsystemet. Notera att ett filsystem i ZFS kan exporteras som en fil, som i sin tur kan vara lagrad på valfritt filsystem. En en lagrad checksumma för filen kan man vara rätt så säker på att den är intakt.

Personligen hade jag nog kört på alternativ 1. Mest pga att uppsättningen av zpoolen på maskinen kan se ut hur som helst, samt att man kan välja mer i detalj vad som ska backupas. Min lösning jag kör med hemma är att jag har en gammal dator som med ett par diskar i RAIDZ. Till den skickar jag över alla filsystem som jag anser ska backupas. Detta görs ungefär en gång i månaden och resterande tid stor datorn urkopplad i en garderob. Viktig data ser jag givetvis till att backupa till flera maskiner, både hemma och hos andra. Även där med hjälp av ZFS send/recieve.

ZFS känns många gånger som en hel vetenskap. Bästa sättet att lära sig är även genom att labba med det själv. Det kan ofta vara att ens egna behöver inte alls matchar andra rekommendationer. Har du frågor är det bara att ställa dem. Det finns flera här på forumet (vilket märks i tråden) som har gott om erfarenhet.

Visa signatur

Efter att ni har läst det här har ni insett att det inte gav något.

Permalänk
Medlem

Om block skadas där metadatan finns på en ZFS uppsättning som består enbart utav en lagringsenhet så är det bara att börja om. Man förlorar inte lite eller mycket, man förlorar allt. Säkrare då att köra UFS eller något annat filsystem.

Visa signatur

Grundregel för felsökning: Bryt och begränsa.

Permalänk
Medlem
Skrivet av Veni:

Om block skadas där metadatan finns på en ZFS uppsättning som består enbart utav en lagringsenhet så är det bara att börja om. Man förlorar inte lite eller mycket, man förlorar allt. Säkrare då att köra UFS eller något annat filsystem.

Uj då, verkar tyvärr inte kunna uppdatera mitt inlägg ovan för att inte vilseleda folk :/
Tycker det informeras dåligt om när man läser om ZFS, kanske inte den vanligaste uppsättningen men borde ändå påpekas mera.
Har du koll på hur det är med Btrfs på den punkten? Hittar inte mycket om det tyvärr. Är det ok så är ju det ett bra alternativ eftersom det erbjuder samma features och idag ses som stabilt förutom vissa features (RAID 5/6, quota, R/W i degraded)

Permalänk
Medlem
Skrivet av Pie-or-paj:

Uj då, verkar tyvärr inte kunna uppdatera mitt inlägg ovan för att inte vilseleda folk :/
Tycker det informeras dåligt om när man läser om ZFS, kanske inte den vanligaste uppsättningen men borde ändå påpekas mera.
Har du koll på hur det är med Btrfs på den punkten? Hittar inte mycket om det tyvärr. Är det ok så är ju det ett bra alternativ eftersom det erbjuder samma features och idag ses som stabilt förutom vissa features (RAID 5/6, quota, R/W i degraded)

BTRFS funkar på precis samma sätt, har du bara en kopia av datan så upptäcks bitfel, men de kan inte rättas till.
Jag kör själv BTRFS på min HTPC/filserver av den enkla anledningen att man kan ta bort diskar ur poolen utan att behöva skapa om allting. I ZFS kan du ta bort diskar, men inte hela VDEVs utan att skapa om poolen vilket för mig var den enda deal-breakern.

Permalänk
Medlem
Skrivet av Xcorp:

BTRFS funkar på precis samma sätt, har du bara en kopia av datan så upptäcks bitfel, men de kan inte rättas till.

Självklart, funderade på just den delen om hela filsystemet är kört bara för att det blir bitfel i metadatan. Jämförelsevis så har ju t.ex. ext4 är väldigt bra fsck som kan rädda filsystemet i sig mot rätt mycket skit även om den inte har någon aning om kvalitén på datan.

Permalänk
Medlem

@Pie-or-paj: Ah, det beror ju på om det blir bitfel på metadatan för filsystemet eller för filerna som sparas om du är med på skillnaden.
Fel på metadata för en enskild fil gör bara den filen korrupt, men lite beroende på vilken metadata för filsystemet som blir korrupt så kan det vara mer eller mindre svårt att montera det. Det finns dock ett verktyg som går igenom hela block-devicen och hämtar filer oavsett om det går att montera själva filsystemet eller ej.

Permalänk
Medlem

Jag har använt BTRFS i ca två år för externa USB-diskbackupper, främst för att det går att göra snapshot smidigt, vilket är himla bekvämt att göra innan man startare en ny rsync-backup som exempel.

Man kan göra dumma saker utan att riskera att korrupera redan gjorda backup och man kan ha många versioner av dessa backupper utan att det sväller iväg i storlek om datat är relativt orörligt på källan. Rsync med --inline gör dessutom att bara data som skiljer sig i en stor fil (tex en diskimage) byts ut, inte att hela filen byts ut i sin helhet till en ny och med snapshot och COW i BTRFS så är detta inte ett problem medans generationsbackupper baserat med hårda länkar så är det livsfarligt.

Att man kan ha kompression på filsystemet är bidragande och det som verkligen spar plats, att göra deduplicering!!.

På btrfs kan man ha två metadata-filer för filsystemet själ och täcker upp för varandra om det blir krångel, på samma disk eller när så är möjligt - fördelas ut på olika fysiska diskar även om disklustret används som JBOD/stripe på datadelen - och om det finns plats på diskarna för aktuella mängden filer - kan gå över till RAID1 (och senare tillbaka igen om man vill) - allt förstås on-line - nästan allt som görs på BTRFS görs i on-line och systemet är under användning samtidigt.

Det är i princip endast total-katastrof-verktygen som arbetar med BTRFS i off-line.

Om det är stabil - ja, hittills inga förluster, så länge man håller sig på JBOD, RAID1 och RAID10 så upplevs det stabil och jag har haft tillfällen med glappa USB-kablar, urryckta sladdar mitt under skrivningar även på flerdisk-volymer och annat som definitiv kan sabba en NTFS-system till oräddbar nivå (och jag har provat just den delen, hårt - två gånger - har nog haft en av mina mest svidande dataförluster på just NTFS och externa diskar - det är en egen historia dock som innefattar 4 kB överskriven med slump på starten av $MFT och $MFT_bak i samband med 'safety remove hardware and eject media), det var det som lärde mig att alltid ha dubbel kopia av filerna på olika externa enheter och man ryckte sladden på den ena utan 'safety re...) och det har återhämtat sig utmärkt till sista synkningen innan händelsen.