Het grote ZFS topic |
![]() |
ZFS; wat is dat? |
ZFS ofwel Zettabyte FileSystem is een nieuw soort filesystem om bestanden mee op te slaan. ZFS verschilt enorm van andere filesystems, omdat het naast filesystem ook de functies van LVM en RAID engine verzorgt. We noemen ZFS daarom een hybride filesystem. Vrijwel alle bestaande filesystems werken op één storage device zoals een hardeschijf. Ze zijn niet gemaakt om meerdere hardeschijven aan te spreken. Daarvoor is een aparte RAID layer nodig die van meerdere schijven één schijf maakt en er vervolgens een filesystem op wordt geplaatst. Het filesystem is zich hierbij niet bewust van het feit dat zijn data op meerdere disks staat; die twee werelden zijn strict gescheiden. ZFS werkt heel anders; het spreekt direct meerdere schijven aan en integreert de functionaliteit van RAID, LVM en filesystem in één pakket. Dat heeft veel voordelen, voornamelijk op het gebied van betrouwbaarheid, maar zeker ook prestaties. |
Zo zo... en wat zijn die 'voordelen' van ZFS dan? |
ZFS is een 'next-gen' filesystem en heeft alleen Btrfs en ReFS als concurrenten. Btrfs is nog sterk in ontwikkeling en door de GPL licentie beperkt tot de Linux kernel. ReFS is het antwoord van Microsoft op de tekortkomingen van inmiddels behoorlijk gedateerde filesystems die we gebruiken, we noemen ze daarom legacy filesystems omdat deze eigenlijk gemaakt zijn voor een ander tijdperk. Alle platforms (Windows, Linux en UNIX) hebben dus hun eigen next-gen filesystem in de koker, maar ZFS is op dit moment het meest stabiel en volwassen en volledig production ready op meerdere besturingssystemen. Een overzicht van enkele voordelen van ZFS versus legacy filesystems:
|
Maar ondersteunt ZFS nou RAID? |
ZFS ondersteunt diverse opslagmethoden die erg vergelijkbaar zijn met RAID. Echter, geen enkele traditionele RAID engine kan nadoen wat ZFS doet, dus in die zin is het geen echt 'RAID'. De volgende schema's zijn beschikbaar: • RAID0 - striping: maximale performance, geen (extra) bescherming • RAID1 - mirroring: twee schijven met identieke data • RAID10 - striping+mirroring: een combinatie van hierboven (min. 4 schijven) • RAIDZ - enkelvoudige parity: vergelijkbaar met RAID5 • RAIDZ2 - tweevoudige parity: vergelijkbaar met RAID6 • RAIDZ3 - drievoudige parity: dit bestaat bij traditioneel RAID niet of nauwelijks |
En wat is dat RAID-Z dan? |
RAID-Z is een verbeterde vorm van RAID5 die alleen mogelijk is als RAID en filesystem niet gescheiden zijn, zoals normaliter het geval is. Omdat ZFS die twee combineert, kan een aantal belangrijke tekortkomingen van RAID5 worden voorkomen. Hierbij gaat het bijvoorbeeld om de RAID5 'write hole', en die komt weer door non-atomic read-modify-write cycles die nodig zijn als je naar RAID5 schrijft met een grootte anders dan de optimale full block size; veelal random writes dus. RAID-Z kent echter geen read-modify-write cycles omdat alle disks in elke write I/O worden betrokken. Dit kan alleen maar met een dynamische stripesize, en dat is dus een van de slimme voordelen van RAID-Z boven RAID5. RAID-Z is dus anders dan RAID5, maar het deelt wel de basis eigenschappen: • één disk mag uitvallen zonder gegevensverlies, twee disks betekent alles kwijt • de beschikbare opslagruimte is gelijk aan het aantal schijven minus parity schijven maal de grootte van de kleinste disk. Dus 4 schijven van 2TB in RAID-Z = 6TB bruikbare ruimte. RAID-Z2 is dan hetzelfde maar met twee parity disks, dus vergelijkbaar met RAID6. RAID-Z3 gebruikt zelfs drie parity disks voor extra veiligheid, wat in thuisomgevingen zeldzaam is. Het is vaak handiger om meerdere RAID-Z2's in een enkele pool te draaien dan één grote RAID-Z3. |
Dus ZFS is software RAID? Is Hardware RAID niet beter? ![]() |
ZFS is inderdaad softwarematige RAID, en dat heeft diverse voordelen. Veel mensen denken dat het veel aanslag pleegt op je CPU, maar zelfs een Atom CPU kan meer dan een gigabyte aan XOR instructies verwerken. XOR geldt als een makkelijke instructie en wordt in de praktijk beperkt door geheugenbandbreedte wat op moderne systemen tussen de 4 en 20 gigabyte per seconde ligt. Mensen die denken dat een XOR-engine nodig is voor goede performance, hebben teveel geluisterd naar de doctrine van de controllerfabrikanten. De voordelen van software RAID:
|
Zo, nou ik ben overtuigd hoor! Waar kan ik dat ZFS krijgen? |
Geen Windows, vanzelfsprekend. Er zijn drie platforms waar ZFS op draait: • Solaris en afgeleiden als Illumos • FreeBSD • Linux • In iets beperkte mate OSX Solaris: Solaris is een heel degelijk UNIX besturingssysteem en ook de thuisbasis van ZFS. Sun was namelijk eigenaar van Solaris en ZFS voordat het werd overgenomen door Oracle. Oracle heeft aangegeven ZFS verder te zullen ontwikkelen, maar het originele team achter ZFS is verdwenen met de overname. Beschikbare varianten: • Nexenta (Stor); een op (Open-) Solaris (/Illumos?) gebaseerde distributie speciaal ontwikkelt voor NAS/SAN gebruik. Gratis versie is gelimiteerd tot 18TB. • napp-it; een uitgebreide web-interface voor Illumos. • EON ZFS Storage - embedded distributie • OpenIndiana Enterprise oplossing met ZFS. FreeBSD: FreeBSD is een veelal onbekend maar toch zeer geavanceerd besturingssysteem. FreeBSD heeft dankzij zijn licentie geen enkel probleem met ZFS integratie, en heeft het al vrij vroeg, sinds FreeBSD 7.0 geïntegreerd (waar we tegenwoordig op 11 zitten, dus al erg lang). FreeBSD heeft een aantal beperkingen van het Solaris platform niet, en is de hardwaresupport beter, maar nog steeds minder goed dan Linux. Beschikbare varianten: • mfsBSD - een simpele LiveCD voor FreeBSD waarmee je ook direct op ZFS kunt installeren. • FreeNAS - een uitgebreid NAS besturingssysteem met first class support voor ZFS inclusief de webGUI. • NAS4Free Het open-source broertje van FreeNas die gemaakt is nadat FreeNas in de handen van ixSystems is gekomen. Bijna dezelfde functionaliteit, maar niet meer gebaseerd op nanoBSD, en dat kan in de toekomst nog wel eens voordelen opleveren. Linux: Linux is een uitstekend allround besturingssysteem, maar de GPL-licentie is helaas slecht cq. niet verenigbaar met de licentie van ZFS, de CDDL. Dit heeft tot gevolg dat ZFS alleen via een omweg beschikbaar is op het Linux platform. In de praktijk is het op veel besturingssystemen intussen erg gemakkelijk geworden om het te installeren, voor systemen als Ubuntu zijn er al PPA's om ZFS te installeren, en Gentoo levert bijvoorbeeld de sourcecode gewoon mee in de ISO. Beschikbaar zijn: • ZFSonLinux (Kernel implementatie) • ZFS-on-Fuse (Userland Fuse implementatie) (eigenlijk af te raden ten opzichte van eerstgenoemde, mits zwaarwegende redenen zoals geen root toegang.) • Debian GNU/kFreeBSD - zeg maar linux zonder linux kernel, pervers nietwaar? |
Allemaal mooi en aardig, maar ik gebruik Windows! |
Het idee is dat je een aparte computer (NAS) bouwt waar ZFS op draait, en dit via Samba, NFS of iSCSI exporteert naar je Windows, Apple of Linux desktop pc. Windows zelf heeft geen idee van ZFS, maar kan bestanden wel opslaan via CIFS (Samba) en/of andere protocollen. Gevolg is wel dat je een aparte dedicated computer bouwt alleen voor ZFS opslag. Je kunt het ingewikkelder doen door met virtualisatie te gaan werken, maar dat zou ik alleen doen als je daar bekend mee bent. Vragen over ZFS icm een specifiek virtualisatie pakket kan je beter stellen in het topic voor het desbetreffende virtualisatie pakket, dat zorgt ervoor dat dit topic minder vervuild. |
En hoe bouw ik zo'n ZFS NAS dan? |
Met je handen. Nee serieus: het is heel makkelijk. Je kunt in Het grote DIY RAID NAS topic deel 3 je eigen build bediscussiëren of een eigen topic aanmaken als je een uitgebreide build wilt bespreken met veel vragen. Om je wel een idee te geven wat er mogelijk is, worden hier twee builds gepresenteerd. Eentje die best te overwegen is - de Instap NAS - en een dure luxe build waar we van dromen - in elk geval de hoeveelheid disks. In de praktijk zal jouw build dus tussen deze twee uitersten liggen. Instap ZFS NAS Processor: Elke moderne Celeron (G1610 / G1820) of Pentium (G3220 etc) voldoet voor ZFS. Oudere Atom's (op de Avoton na) zijn niet aan te raden, die kunnen maar 4GB geheugen aanspreken, en dat is een veel gevallen te krap. Het kan wel, maar dan moet je goed weten wat je doet, en wat ZFS tuning toepassen. CurlyMo heeft ZFS aan de praat op een miniscuul x86 bordje, met maar een beperkte hoeveelheid RAM. Geheugen: Minimaal 4GB is aan te raden. Wil je 1Gb Ethernet continu blijven halen, is 8GB aan te raden. Moederbord: Maakt weinig uit, zoek in de reviews naar een zuinig bord met een leuke AHCI controller. In het DIY RAID NAS topic komen legio bordjes langs die lekker zuinig en modern zijn. Wat misschien nog wel de belangrijkste tip is: Kijk of bijvoorbeeld elk budget onderdeel (zoals de netwerkkaart) ondersteund is in het OS dat je wil gebruiken. Zo zijn FreeNAS en Solaris afgeleiden wat kieskeuriger qua hardware dan Linux. Krachtige ZFS NAS Processor: Een sterke i5 of Xeon. Socket 1150/1151(v1/v2) of 2011(-3). Voor ECC support moet je even goed opletten. Moederbord: Een Supermicro of gelijkwaardig bord dat ECC support. Geheugen: ECC! (Let op dat Registered geheugen alleen werkt op Socket 2011(-3), en dat je voor Socket 2011-3 DDR4 geheugen nodig hebt. Qua hoeveelheid ligt het een beetje aan je pool, maar als je echt een krachtige server wil is 16 of 32GB aan te raden. Als je ZFS gaat combineren met ESXi een een flink aantal VM's, wil je al snel richting 32GB gaan. Controller: Er zijn SuperMicro borden met onboard LSI2308 controller. Mooie aanrader! Wil je een losse HBA, kan je voor bijvoorbeeld een IBM M1015, Dell H200, of een LSI 9201-16i gaan. Voordat je iets koopt, check even in de topics of deze controllers op het moment nog steeds gangbaar zijn. Er veranderd nog wel eens wat in storage land, en ook wij kunnen niet continu de startpost blijven updaten. Schijven: Western Digital Green of Red zijn momenteel erg populair. De nieuwste Seagate series zijn ook veel in gebruik. Let op dat je goed moet kiezen tussen TLER of non-TLER schijven. Beide hebben hun voor- en nadelen. Hitachi maakt volgens velen technisch de beste schijven, maar er zijn vooral 7200RPM schijven van Hitachi, dus zit je qua stroomverbruik al snel hoog met Hitachi. |
Kan ik met ZFS mijn array uitbreiden zoals met RAID5 veelal kan? |
Nee, dit is een belangrijke beperking van ZFS die voor thuisgebruikers vaak als hinderlijk wordt aangemerkt. ZFS kun je echter wel uitbreiden, maar dat werkt heel anders. Dit heeft echter ook voordelen die RAID5 weer niet heeft, dus lees dit even goed: Als je een RAID-Z hebt van 5 disks, kun je die niet zomaar met een paar disks uitbreiden naar een 7-disk RAID-Z bijvoorbeeld. Een RAID-Z heeft dus een vast aantal schijven wat je niet kunt veranderen. Wat kan wel?
|
Ik heb gehoord dat je ZFS moet optimaliseren voor 4K Advanced Format hardeschijven? |
Dat klopt, voor moderne Advanced Format hardeschijven die 4K sectoren hebben, wil je het liefst ook dat ZFS met deze eenheden werkt. Echter, omdat dergelijke hardeschijven doen alsof ze normale 512-byte sector schijven zijn door hun sectorsize te emuleren, ziet ZFS niet dat je dergelijke schijven hebt. Dit zul je dit wel moeten forceren middels de ashift setting. Dit is een vdev property maar geldt pool-wide. Dat betekent dat een bestaande pool nooit meer van ashift instelling kan veranderen. Ashift=9 wil zeggen dat de pool optimaal is voor 2^9= 512 bytes sectoren. Ashift=12 wil zeggen 2^12= 4K sectoren geoptimaliseerd. Optimale configuraties voor 4K sector Advanced Format hardeschijven: RAID-Z: 3, 5 en 9 disks RAID-Z2: 4, 6 en 10 disks RAID-Z3: 5, 7 en 11 disks De gedachte hierachter is dat het aantal 'dataschijven' een macht van 2 is, dus 2, 4, 8, 16. Waarom? Omdat je dan een 'schoon' getal krijgt wanneer de 128KiB recordsize wordt gedeeld door het aantal schijven. Voorbeeld: RAID-Z met 3 schijven betekent dat er twee dataschijven zijn en één parityschijf. Met een 128KiB recordsize krijgen de schijven dan 64KiB te verwerken en dat is optimaal omdat dit een veelvoud is van 4 kilobyte - de sectorsize van moderne Advanced Format hardeschijven. Echter, heb je 4 schijven in RAID-Z dan moet die 128KB verdeeld worden over 3 schijven. Dat wordt 42.7KB per schijf. Dit betekent dat je net wat minder opslagruimte hebt omdat je het verschil tussen 42.7K en 43.0K niet kunt gebruiken (slack) maar nog belangrijker is 43K niet een veelvoud van de 4K sector size die moderne Advanced Format hardeschijven hebben. Laatstgenoemde configuratie is dus niet optimaal wat zorgt voor tragere writes. De performancedegradatie is afhankelijk van platform en hoe goed/snel de firmware van je hardeschijven sectoren kunnen emuleren. Zo zijn nieuwere type WD EARS schijven veel sneller in sector emulatie dan de klassieke 4-platter modellen. |
Hoe zit het precies met TLER-disks in combinatie met ZFS? |
Voor de meeste Hardware RAID en Windows FakeRAID is TLER verplicht. Dit is een functie van de hardeschijf die de error recovery min of meer uitschakelt, door deze te beperken tot 7 seconden. Dit voorkomt dat de RAID engine de schijf uit de array gooit zodra er bad sectors gevonden worden en je met een kapotte array zit. Bij ZFS en non-Windows software RAID is dat anders. Daar heb je geen TLER nodig om je data te beschermen. Toch kan het beperken van de timeout wel voordelen bieden door lange wachttijden bij bad sectors te voorkomen. Je videostream zou hierdoor onderbroken kunnen worden en ook Virtual Machines vinden het niet fijn als ze een tijd lang niet met hun disk kunnen communiceren. Echter, wat je met TLER hardwarematig doet, kan je operating system ook softwarematig. Zo kun je onder BSD-platform de timeout instellen, wat hetzelfde effect geeft als TLER. Andere platforms bieden mogelijk vergelijkbare functionaliteit. TLER kan daarnaast ook heel gevaarlijk zijn. Het schakelt min of meer de 'laatste defensielinie' uit. Stel je hebt een redundante array zoals een RAID1/mirror waarbij één disk helemaal dood is. De overige disk heeft bad sectors. Dan is de recovery-functionaliteit van de hardeschijf de laatste kans om je data helemaal intact te kunnen uitlezen. In zulke gevallen is TLER zeer onwenselijk en kan een gevaar opleveren voor je gegevens. In gevallen waar je nog wel over redundantie beschikt, maakt het voor je data niet uit. |
ZFS kan ook mijn SSD gebruiken voor caching en andere versnelling? |
Dat klopt, je kunt een SSD gebruiken voor drie dingen: • Een normale pool met SSDs als disk members, leuk voor systeempool en opslag van VM images en andere zaken waar je random I/O performance voor nodig hebt • Een HDD pool waar je een SSD (partitie) als L2ARC cache device toevoegt. De SSD zal dan snippertjes data verzamelen die random worden opgevraagd, wat veel sneller is dan de HDDs laten seeken. • Een HDD pool waar je een SSD (partitie) als SLOG ofwel Dedicated ZIL toevoegt. SSD in een normale pool gebruiken Je kunt SSDs prima in een RAID0 pool of een RAID-Z pool gebruiken. Denk aan opslag van VM images, als systeemdisk en andere zaken waarvoor je IOps performance nodig hebt. SSDs hebben minder last van de performancebeperkende eigenschappen van RAID-Z omdat SSDs vooral transfer-capped zijn. Dit betekent dat SSDs in een RAID-Z pool goed zou moeten presteren. SSDs als L2ARC cache device Door een SSD (partitie) aan een ZFS pool toe te voegen, zal deze gebruikt worden om bepaalde data op te slaan - te cachen. Wordt bepaalde data herhaaldelijk opgevraagd, dan zal deze voortaan vanuit de SSD geleverd worden in plaats van dat je je hardeschijven laat seeken. Dit werkt ongeveer zoals Intel SRT caching toevoegt op het Windows platform. Belangrijke eigenschappen van caching: • ZFS L2ARC caching is veilig in gebruik, in tegenstelling tot alternatieven zoals Intel SRT wat corruptie op de SSD niet kan detecteren. ZFS doet dat wel en leest in dat geval van de HDD pool ipv de SSD. L2ARC is dus altijd veilig in gebruik. • ZFS cached geen grote bestanden die sequentiëel worden opgevraagd; denk aan grote bestanden die van A tot Z worden uitgelezen. Dat kunnen hardeschijven prima en daarvoor zal de cache device niet gebruikt worden! Alleen zogenaamde non-contiguous reads ofwel random reads zullen op de SSD terecht komen. Dit kunnen kleine bestanden zijn, maar ook enorm veel fragmenten in grote bestanden. ZFS cached dus geen bestanden, maar datafragmenten. Dus de cache werkt ook prima op 20GB grote databestanden van je favoriete game, mits dat spel aan random reads doet. Een voorbeeld hiervan is World of Warcraft. • Caching werkt alleen effectief als je een voorspelbaar gebruikspatroon hebt. Als je werkelijk willekeurig I/O zal doen, zal caching geen of nihil voordeel opleveren. Alleen als je herhaaldelijk dezelfde data raadpleegt, zal caching merkbare winst kunnen opleveren. Dit is vaak wel het geval. • Caching geldt niet alleen voor de daadwerkelijke data, maar zeker ook voor metadata. Denk bijvoorbeeld aan random reads bij het openen van een grote directory met een heleboel bestanden. Het cachen van metadata wordt vaak over het hoofd gezien, maar telt zeker mee! • L2ARC cache moet eerst worden opgebouwd; en wordt beperkt door de snelheid waarmee ZFS de SSD 'mag' vullen, dat is namelijk bewust gelimiteerd. Het kan dus een paar weken duren voordat je L2ARC op oorlogssterkte is. SSD als SLOG device ofwel dedicated ZIL Bij ZFS is de ZIL ofwel ZFS Intent Log vergelijkbaar met de journaling log van NTFS en Ext3. De ZIL is standaard ingeschakeld voor alle pools ook met een enkele disk en beschermt voornamelijk tegen het recoveren van recente writes vlak voor een stroomstoring of crash. Je hebt een ZIL niet strict nodig; ook zonder ZIL is ZFS consistent. Je zult alleen wel tot enkele minuten data verliezen evenals application consistency; later daarover meer. Veel mensen zeggen dat ze een 'ZIL' toevoegen aan een pool. Dat is echter technisch incorrect. Je doet juist het tegenovergestelde: je schakelt de ZIL uit die op de pool staat en ook bescherming heeft die de pool zelf heeft, zoals RAID-Z. In plaats daarvan gebruik je een apart apparaat als ZIL, in een mirror configuratie of zonder bescherming. Dat is dus vrijwel altijd een achteruitgang op gebied van bescherming, al stelt dat niet zoveel voor. Maar belangrijk om te beseffen dat elke pool standaard een ZIL heeft inclusief de bescherming die de pool zelf heeft, en dat je met een dedicated ZIL ofwel SLOG (separate LOG device) die bescherming in feite outsourced aan een SSD die daar veel sneller in is. Een ZIL heb je dus normaliter altijd. In tegenstelling tot L2ARC caching is een dedicated ZIL juist wél gevaarlijk, omdat je zoals gezegd dus een bescherming van de pool zelf uitschakelt. Daar zit hem ook de snelheidswinst: je laat je hardeschijven niet meer de ZIL functie uitvoeren met random writes maar laat een SSD (partitie) die functie uitvoeren. Een ZIL wordt alleen beschreven en nooit gelezen tenzij na een stroomstoring/crash; alleen dan zijn de gegevens nodig. Kan ik een of meerdere SSD's voor meerdere taken gebruiken? Jazeker. Je kunt een SSD partitioneren en gebruiken voor alle doeleinden die je wilt: - systeem pool voor booten en wat niet - L2ARC cache voor je grote HDD pool - SLOG voor je grote HDD pool Met meerdere SSDs wil je alle taken spreiden over alle SSDs. Wat je niet wilt is een SSD helemaal voor SLOG gebruiken en de ander helemaal voor L2ARC. Dan worden ze ongelijkmatig belast en haal je geen performancevoordeel wat je anders wel zou hebben. Je wilt dus juist de taken gelijkmatig verdelen over al je SSDs. L2ARC doe je altijd in striping (RAID0) terwijl SLOG je voor mirroring kunt kiezen. Hoe groot moet ik de partities dan maken? Stel je heb twee SSDs van 128GB, dus totaal 256GB. Op je SSD maak je dan partities aan zoals: - partitie 1 voor systeem/boot pool: 28GiB - partitie 2 voor L2ARC cache: 60GiB - partitie 3 voor SLOG: 4GiB - rest van de ruimte onbenut laten als overprovisioning (let op: de SSD mag niet gebruikt zijn anders gaat deze ruimte verloren! secure erase of TRIM erase gebruikte SSDs alvorens overprovisioning toe te passen). Doe dit voor beide SSDs en je hebt: - een systeem/boot pool in mirror configuratie 28GB beschikbare ruimte - L2ARC caching met twee partities in striping = 2x 60 = 120GB - SLOG in mirror met twee partities = 4GB |
Verder lezen |
• Wikipedia: ZFS • BSD Now - ZFS |
Handige tutorials: |
Migreren van data binnen dezelfde pool Upgrade van v28 naar v5000 zonder alle features te activeren Hoe werken feature flags Lijst met gesupportte features flags per platform ACHI SSD in FreeBSD 9.1 ZFS send/receive van en naar een bestand Patitioneren van je SSD voor je systeem, SLOG en L2ARC (in ZFSGuru) ZFS send/receive op een corrupte pool Draaien op en terugzetten van een ZFS On Root backup ZFS send/receive tussen pools ACL + Samba voorbeeld Aanvullingen? Laat het weten! |
[ Voor 255% gewijzigd door FireDrunk op 29-11-2018 08:47 . Reden: ZFSguru er uit, wat versie updates, feature flags linkje toegevoegd. ]