Citat:
Ursprungligen inskrivet av NakedApe
Jo, det är faktiskt just dataintegriteten som kontrolleras här, kontrollern läser in data och kontrollerar att CRC stämmer samt vanligtvis skriver tillbaka datablocken.
Detta för att undvika ett "vanligt" problem med större RAID-arrayer där man, när en disk kraschar, upptäcker att det uppstått bit-röta i andra block och rebuildprocessen ('resilvering' i ZFS-terminologi) misslyckas eftersom den inte kan återskapa korrekt data.
Normala implementationer av RAID-1/5/6 skriver inga CRC checksummor själva. Dock så har hårddiskar mer eller mindre alltid någon egen form av feldetekering/felkorrigering.
RAID lever på att hårddiskarna själva "klagar" (d.v.s. rapporterar när det blir fel vid läsning, S.M.A.R.T. fel) eller att kontrollern helt enkelt märker att det inte går att läsa.
När man "scrubbar" en vanlig RAID så läser man in blocken från alla diskarna och kollar om de stämmer eller inte, t.ex. att blocken är lika i fallet med RAID-1 eller att pariteten stämmer för RAID-5/6.
Observera att om diskarna i en RAID-1 (med två diskar) eller RAID-5 inte "klagar" men det fortfarande upptäcks ett fel (inte samma data på båda diskarna för RAID-1; pariteten stämmer inte för RAID-5) så kan felet vanligtvis inte heller fixas, då man helt enkelt inte vet vilken/vilka av diskarna som är de "felaktiga".
För vanlig RAID så måste du åtminstonde ha "en disk mer än antalet fel" för att reparera sådana fel.
Dock så är det oerhört sällan att vissa bit-ar flippar på hårddisken och hårddiskens egna checksummor inte hittar dem. Det är mycket troligare att hårddisk-kontrollern eller annat bit-flippar och därmed får kontrollern felaktig data även om datat på den magnetiska skivan "stämmer".
Citat:
Ursprungligen inskrivet av NakedApe
ZFS sköter detta automatiskt i bakgrunden och är ett av de stora argumenten för ZFS gentemot hårdvaru-RAID.
RAIDZ (och ZFS's spegling) har ett teoretiskt sett mycket starkare skydd än vanlig RAID-1/5/6. Några av de vanligaste argumenten för RAIDZ:
- Varje block som läses "garanteras" att vara korrekt. ZFS checksummar alla blocken och vid läsning jämförs checksumman med det beräknade checksumman för blocket i fråga. Stämmer inte checksummorna så läses paritetsblocket in också (osäker på om den annars gör det), och man försöker att avgöra vilken av diskarna som gav den felaktiga datan. Vanlig RAID "garanterar" endast av blocken läses korrekt om den/dem felaktiga länken/länkarna själv/själva "klagar" (i.e. vanligtvis den/dem "trasiga" hårddisken/hårddiskarna). (se nedan)
- ZFS skyddar mycket högre upp i hierarkin. Bit-flippar när datan transporteras från disk-kontrollern till RAM-minnet skyddas inte av vanlig RAID... eller om disk-kontrollern i sig är trasig och flippar bittarna själv. ZFS med RAIDZ garanterar mer eller mindre att "datan i RAM-et som skrevs till diskarna läses tillbaka i RAM-et exakt som det såg ut förut".
- Inga "write-holes" (inte helt relevant för diskussionen kanske).
P.g.a av att en RAIDZ-X med N diskar alltid måste läsa från minst (N - X) diskar (d.v.s. (N - 1) diskar för RAIDZ-1) så stryps antalet IOPS i en RAIDZ array effektivt till detsamma som för endast en enda disk. Vanliga RAID har inte detta "problem" då den endast behöver läsa små block från en enda disk (d.v.s inte läsa heller stripen).