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 (eerst van Sun, nu in de klauwen ehh handen van Oracle) • FreeBSD (opensource UNIX) • Linux (in beperkte mate en enigszins experimenteel) 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 uitontwikkelen, maar het originele team achter ZFS is verdwenen met de overname. Beschikbare varianten: • Nexenta; een Ubuntu-achtig OS; gratis versie heeft standaard geen web-interface • napp-it; een uitgebreide web-interface voor Nexenta • 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, met FreeBSD 7.0 geïntegreerd. Die versies waren nog expeirmenteel en instabiel. Vandaag de dag zitten we met een goed stabiele ZFS v15 en de nieuwe v28 code is al draaide op FreeBSD 9. Het grote voordeel van FreeBSD is dat je meer zekerheid hebt over de toekomst van ZFS op dit platform. Ook heeft FreeBSD 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. De oude versie 0.7.x heeft wel oudere ZFS support en valt af te raden, maar de nieuwe 0.8.x versie beschikt wel over een stabiele en moderne ZFS versie. • ZFSguru - een nieuwe variant helemaal op ZFS gericht, nog erg in ontwikkeling maar heeft als grote voordeel dat er een volledige FreeBSD installatie achter zit, zonder dingen weggesnoeid zoals bij FreeNAS. Dit maakt het installeren van extra software makkelijker, wat bij FreeNAS toch een stuk lastiger is. Voor de nog ontbrekende features moet je terugvallen op de text shell, iets wat steeds minder nodig zal zijn naarmate ZFSguru zich verder ontwikkelt. CiPHER ontwikkelt sinds november 2011 mee aan dit project. ZFSguru kan beschouwd worden als gemakkelijkste all-in-one ZFS oplossing. • 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. Deze oplossingen zijn lang niet even stabiel en volwassen genoeg om buiten testdoeleinden te gebruiken. Beschikbaar zijn: • ZFS-on-Fuse • ZFS Linux kernel modules (zelf compileren) • 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 virtualizatie te gaan werken, maar dat zou ik alleen doen als je daar bekend mee bent. |
| 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: onboard AMD C60 dualcore Brazos (passief gekoeld) Moederbord: Asus moederbord met AMD C60 Brazos CPU: pricewatch: Asus C60M1-I Geheugen: 1x8GiB DDR3. Door één reepje te nemen kun je altijd uitbreiden naar 2x8GiB. 8GiB reepjes worden officiëel niet ondersteund, maar die werken wel! Hardeschijven: 3x pricewatch: Seagate Barracuda 7200.14 ST3000DM001, 3TB Krachtige ZFS NAS Processor: Intel 3570 (geen K versie want deze ondersteunt geen vt-d instructies voor PCI passthrough) Moederbord: één van de vele bordjes met 70-series chipset Geheugen: 4x 8GiB DDR3 dus 32GiB minimaal Controller: 2x IBM M1015 betekent 2x 8 = 16 schijven totaal aansturen met de twee controllers + onboard SATA dus meer dan 20 disks. Hardeschijven: 20x pricewatch: Seagate Barracuda 7200.14 ST3000DM001, 3TB verdeeld over 2x 10-disk RAID-Z2 in één pool Solid State Drives: 1x Intel 320 voor Dedicated ZIL en een Crucial M4 / Samsung 830 of reguliere consumenten SSD voor L2ARC caching. Deze dien je te gebruiken op de onboard SATA van de chipset (AHCI). Last but not least: 10 Gigabit networking |
| 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. |
| 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 |
CiPHER wijzigde deze reactie 29-10-2012 22:57 (255%)
Reden: L2ARC en SLOG toevoegd
Druk bezig met 'belangrijke dingen'.
ZFS; wanneer ga jij jouw data serieus beschermen?







