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
