Megareply over ZFS + ECC en corruptie
Ik bedoelde met 'puinruimen' niet dat ik reacties zou verwijderen of verplaatsen - ze zijn immers on-topic over ZFS - maar juist dat ik weer dezelfde argumenten moet herhalen als ik al eerder heb gedaan. Die studie is al een paar keer eerder in dit topic aan bod geweest.
Maar natuurlijk zou het in de startpost thuishoren. Nu ga ik die binnenkort herschrijven en nieuwe topics openen, dus het kan nog even wachten hoop ik.
En verder is de discussie ook niet afgerond. De tests die ik heb gedaan zijn ook niet uitgebreid genoeg om er superveel over te zeggen. Maar dat ZFS met een paar RAM bitflips op zijn bek gaat vind ik sterk overtrokken. Een beetje corruptie kan ZFS juist prima hebben.
Nog even wat aanvullingen:
Dus het corrupt worden van hele pools door dergelijke fouten kan ook naar het rijk der fabelen verwezen worden?
Dat vind ik erg moeilijk want het zou zeker theoretisch mogelijk kunnen zijn dat in heel specifieke omstandigheden met (meervoudige?) RAM corruptie je een pool om zeep kunt helpen. Veel aannemelijker is het dat in een zeldzaam geval je een enkele file als corrupt ziet binnen de 'zpool status -v' output en je dus 1 file kwijt bent, afhankelijk van hoeveel redundancy je hebt.
Metadata is nog eens extra beveiligd met copies=2 en beide kopiën hebben ook weer redundantie (RAID-Z123/mirror) dus bij RAID-Z2 heb je minimaal 4 sources van metadata en voor cruciale metadata nog véél meer.
hoewel het misschien voor een thuisgebruiker overdreven is, wordt ecc in best practices ook aangeraden
Als je goedkoop een optie hebt voor ECC geheugen zoals bij het ASRock Avoton bordje wat onlangs in dit topic (of DIY RAID NAS topic) aan bod is gekomen, dan zou ik zelf ook ECC pakken natuurlijk. Het is zeker wel een plus. Eigenlijk zouden alle computersystemen ECC RAM moeten hebben; errorcorrectie wordt immers bijna overal toegepast binnen computertechnologie dus waarom niet voor je RAM? 1/8e of 1/16e meer kosten. Bij SSDs zie je ook dat 1/16e wordt opgeofferd voor RAID4/RAID5 bitcorrectie; dat is de reden dat SSDs als 120GB ipv 128GB en 240GB ipv 256GB worden verkocht (dit staat los van GB versus GiB). Het verschil is precies 1/16e wat voor RAID5 wordt gebruikt. Je hebt dan de opslag van 15 'disks' ofwel NAND
dies (een chip of
package kan meerdere
dies bevatten; meestal 2).
Ik reageer vooral dat ECC bijna als must-have wordt gezien omdat anders je pool op springen staat. Dat is echt niet zo. Maar wil je nog dat extra beetje betrouwbaarheid, wat je nog niet hebt afgedekt, dan is de ECC optie leuk. Vooral als je je workstations ook ECC geeft, omdat zij natuurlijk de data aanleveren aan ZFS. Als ZFS het al corrupt in zijn handen krijgt gaan alle beveiligingen natuurlijk niet werken. Dus ECC op je workstations enzo is zeker wel een overweging. Vooral als je maar één of twee systemen hebt die regelmatig schrijven naar je ZFS NAS.
Overigens zou Kabini (zeg maar de moderne opvolger van AMD Brazos; goedkoop mobo met onboard CPU met laag TDP) ook ECC ondersteunen en zou dus uitstekend zijn voor een low-end instap ZFS NAS met toch extra hoge betrouwbaarheid.
Maar ik heb hier zelf belangrijke data op een systeem zonder ECC en ik maak me er niet druk om. Het leuke is ook: je gaat RAM corruptie merken omdat je onverklaarbaar checksum errors ziet. Die kunnen van je disk komen (zoals de NCQ-write bij Samsung F4EG die zo'n write dan niet uitvoert) maar zeker ook van RAM bitflips.
Dit heb ik dus ondervonden bij mijn tests. Bij een scrub zal door de RAM bit flips een heleboel data gecorrumpeerd worden. Maar van de 4-disk RAID-Z altijd maar op één plaats. Dus bij een volgende scrub met goed geheugen wordt alle corruptie veroorzaakt door RAM bitflips keihard ook weer gecorrigeerd. Dus een enkele bitflip ben ik niet zo heel bang voor.
Wel is het zo, dat een fout tijdens het maken van de checksum problematisch is. Je file zou dan onafhankelijk van redundancy altijd als corrupt worden aangemerkt, terwijl eigenlijk alleen de checksum corrupt is. Maar dan zie je dus keihard een corrupte file in zpool status -v. En dat is ook zo fijn van ZFS: als er problemen zijn met je disks of systeem of RAM dan merk je dat in de output. Alle corruptie wordt vroeg of laat ontdekt. En de corruptie blijft vrijwel altijd beperkt tot enkele bestanden. Het feit dat je weet om welke bestanden het gaat maakt ook dat je je er fijner door voelt. Silent corruption en oh kut opeens mn trouw-fotoalbum corrupt, dat wil je niet meemaken. Maar daar heb je natuurlijk ook backups voor.
Maar wat nu als die silent corruption keihard doorstroomt naar je backup? Ah ha... dacht je goed voor elkaar te hebben met je backup en RAID5 maar dan nog keihard corrupt. Daarom draai je dus ZFS! Weten wanneer corruptie optreedt is superhandig. Zo kun je bij corruptie eens een MemTest cycle draaien om er achter te komen dat je RAM opeens corrupt is. Dat komt zeker voor bij anderen en ook bij mijzelf.
Ok helder, maar dat geldt voor elk bestandssysteem toch?
Nee. Andere filesystems gebruiken vrijwel geen RAM. Ze hebben RAM nodig voor read-ahead (8*16/32/64K meestal) en een kleine write buffer (enkele megabytes) en command queue en nog wat filesystem-specifieke meuk. Je kunt 1e en 2e generatie filesystems (alles behalve ZFS/Btrfs/ReFS) gebruiken op systemen met superweinig RAM, zoals 64MB ofzo.
Maar indirect is het verbruik hoger: de VFS (Virtual FileSystem) laag van het operating system wat swap en filesystem cache aanstuurt, verbruikt meer dan het filesystem zelf. Dit kan zo groot groeien als de grootte van de RAM. Een 128GB bestand inlezen op een systeem met 128
GB geheugen zal ervoor zorgen dat vrijwel al het geheugen in gebruik is, voornamelijk met (delen van) dat bestand dus.
Bij ZFS ligt het heel anders. ZFS heeft zijn eigen cache-infrastructuur; de ARC (Adaptive Replacement Cache).
Adaptive omdat het zich aanpast aan de workload, dus het probeert slim te zijn en de belangrijkste data voor zowel korte als lange termijn in de cache te houden.
Replacement Cache omdat het de traditionele VFS-laag vervangt en dus buiten deze laag om werkt. Of althans het deelt niet de reguliere cache-infrastructuur die gebruikt wordt bij traditionele filesystems (FAT/NTFS/Ext2/3/4/UFS/HFS).
Mijn (concluderende) reactie op jouw quote is dus: ZFS verbruikt (direct) véél meer RAM dan andere filesystems, dus het heeft ook een hogere kans op het 'vangen' van RAM bitrot. Dat is best fijn eigenlijk, want zo bescherm je dus 50-90% van je RAM gedeeltelijk tegen de zeldzame RAM bitflip. Dan zie je bij een scrub ooit een keer dat er een checksum error is op een willekeurige disk zonder verklaring.
Desktopsystemen zoals Windows hebben bij RAM bitflips een hogere kans om appliaties te laten crashen, en bijvoorbeeld blauwe schermen te veroorzaken. Bij servers met ZFS is het vooral ZFS die de RAM bitflips opvangt, ipv de appliaties.