FĂŒr den Linux-Kernel 6.2 wurden Verbesserungen von Btrfs vorgeschlagen, die ein Problem mit dem "write hole" in der Umsetzung von RAID 5/6 beheben. Das Problem besteht darin, dass bei einem Absturz wĂ€hrend des Schreibvorgangs zunĂ€chst nicht festgestellt werden kann, welcher Block auf welchem der RAID-GerĂ€te korrekt geschrieben wurde und bei welchem die Aufnahme nicht abgeschlossen war. Bei dem Versuch, RAID in einer solchen Situation wiederherzustellen, kann es zu einer Zerstörung der Blöcke kommen, die den unvollstĂ€ndig geschriebenen Blöcken entsprechen, da der Zustand der RAID-Blöcke nicht synchronisiert ist. Dieses Problem tritt in allen RAID1/5/6-Arrays auf, in denen keine besonderen MaĂnahmen zur BekĂ€mpfung dieses Effekts ergriffen werden.
In der Umsetzung von RAID, wie RAID1 in Btrfs, wird dieses Problem durch die Verwendung von PrĂŒfziffern in beiden Kopien gelöst. Bei Abweichungen werden die Daten einfach aus der zweiten Kopie wiederhergestellt. Dieser Ansatz funktioniert auch, wenn ein GerĂ€t anfĂ€ngt, fehlerhafte Daten anstelle eines vollstĂ€ndigen Fehlers zu liefern.
Bei RAID5/6 speichert das Dateisystem jedoch keine PrĂŒfziffern fĂŒr ParitĂ€tsblöcke: Unter normalen UmstĂ€nden wird die Korrektheit der Blöcke durch die Tatsache ĂŒberprĂŒft, dass sie alle mit einer PrĂŒfziffer versehen sind, und der ParitĂ€tsblock aus den Daten rekonstruiert werden kann. Bei einer partiellen Beschreibung kann dieser Ansatz jedoch in bestimmten Situationen fehlschlagen. In diesem Fall könnte es beim Wiederherstellen des Arrays passieren, dass Blöcke, die von unvollstĂ€ndigen SchreibvorgĂ€ngen betroffen sind, inkorrekt wiederhergestellt werden.
Bei btrfs ist dieses Problem besonders relevant, wenn die zu schreibende Datenmenge kleiner ist als der Stripe. In diesem Fall muss das Dateisystem eine Lese-Modifikation-Schreiboperation (read-modify-write, RMW) durchfĂŒhren. Wenn dabei blöcke mit unvollstĂ€ndigen Aufzeichnungen auftreten, kann die RMW-Operation zu Zerstörungen fĂŒhren, die trotz PrĂŒfziffern unentdeckt bleiben. Die Entwickler haben Ănderungen vorgenommen, sodass die RMW-Operation die PrĂŒfziffern der Blöcke ĂŒberprĂŒft, bevor die eigentliche Operation durchgefĂŒhrt wird. Bei Bedarf werden nach dem Schreiben auch die PrĂŒfungen angeboten. Leider fĂŒhrt dies im Fall der unvollstĂ€ndigen Stripe-Schreibung (RMW) zu zusĂ€tzlichen Overheadkosten fĂŒr die Berechnung der PrĂŒfziffern, erhöht jedoch erheblich die ZuverlĂ€ssigkeit. FĂŒr RAID6 ist diese Logik derzeit noch nicht verfĂŒgbar; allerdings muss fĂŒr einen Ausfall im RAID6 sichergestellt werden, dass der Schreibvorgang auf zwei GerĂ€ten gleichzeitig fehlschlĂ€gt, was weniger wahrscheinlich ist.
ZusĂ€tzlich sind die Empfehlungen der Entwickler zur Verwendung von RAID5/6 erwĂ€hnenswert. Diese besagen, dass in Btrfs die Profile fĂŒr die Speicherung von Metadaten und Daten unterschiedlich sein können. So kann fĂŒr Metadaten das RAID1-Profil (Spiegelung) oder sogar RAID1C3 (3 Kopien) verwendet werden, wĂ€hrend fĂŒr Daten RAID5 oder RAID6 eingesetzt wird. Dies gewĂ€hrleistet einen zuverlĂ€ssigen Schutz der Metadaten und eliminiert "Write Holes" auf der einen Seite, wĂ€hrend gleichzeitig die effiziente Raumnutzung von RAID5/6 auf der anderen Seite gefördert wird. Dadurch wird die Zerstörung von Metadaten vermieden, und DatenbeschĂ€digungen lassen sich korrigieren.
Es ist auch erwĂ€hnenswert, dass im Btrfs des Kernels 6.2 standardmĂ€Ăig die asynchrone AusfĂŒhrung der "discard"-Operation (Markierung freigegebener Blöcke, die physisch nicht mehr gespeichert werden mĂŒssen) aktiviert wird. Ein Vorteil dieses Modus ist die hohe Leistung aufgrund der effektiven Gruppierung von "discard"-Operationen in Warteschlangen und deren anschlieĂender Verarbeitung durch den Hintergrundprozessor. Dadurch werden normale Dateisystemoperationen nicht verlangsamt, wie es bei synchronem "discard" der Fall ist, wenn Blöcke freigegeben werden, und SSDs können bessere Entscheidungen treffen. Andererseits mĂŒssen keine Tools wie fstrim mehr verwendet werden, da alle verfĂŒgbaren Blöcke im Dateisystem ohne zusĂ€tzliche Scans und ohne Verlangsamung der Operationen bereinigt werden.
Quelle: opennet.ru
