Voor de inclusie in de Linux-kernel 6.2 worden verbeteringen aan Btrfs voorgesteld, die betrekking hebben op het oplossen van het probleem van de "write hole" in de implementatie van RAID 5/6. De essentie van het probleem is dat als er een crash plaatsvindt tijdens het schrijven, het in eerste instantie onmogelijk is te begrijpen welke blokken op welke van de RAID-apparaten correct zijn geschreven en welke schrijfbeurten niet zijn voltooid. Bij een poging om RAID in een dergelijke situatie te herstellen, kan blokkeren van de blokken optreden die overeenkomen met de niet-afgeronde blokken, omdat de status van de RAID-blokken niet meer gesynchroniseerd is. Dit probleem doet zich voor bij elke RAID-configuratie zoals RAID1/5/6, waar geen speciale maatregelen zijn genomen om dit effect tegen te gaan.
In de implementatie van RAID, zoals RAID1 in Btrfs, wordt dit probleem opgelost door het gebruik van controlegetallen in beide kopieƫn; bij een discrepantie worden de gegevens eenvoudig hersteld uit de tweede kopie. Deze benadering werkt ook als een apparaat onjuiste gegevens begint te leveren in plaats van volledig falen.
Echter, in het geval van RAID5/6 slaat het bestandssysteem geen controlegetallen op voor de pariteitsblokken: onder normale omstandigheden wordt de correctheid van de blokken gecontroleerd aan de hand van het feit dat ze allemaal met een controlegetal zijn uitgerust, en het pariteitsblok kan worden hersteld uit de gegevens. Maar in het geval van een gedeeltelijke opname kan deze aanpak in bepaalde situaties falen. In dat geval is het bij het herstellen van de array niet uitgesloten dat de blokken die onder een niet-afgeronde opname vallen, onjuist worden hersteld.
Bij btrfs is dit probleem het meest relevant wanneer de te schrijven data kleiner is dan de stripe. In dit geval moet het bestandssysteem een lees-wijziging-schrijf (read-modify-write, RMW) operatie uitvoeren. Als er tijdens deze operatie blokkades met een onvoltooide schrijfoperatie wordentegengekomen, kan de RMW-operatie wegbrekingen veroorzaken die niet gedetecteerd worden, ondanks de controlewaarden. De ontwikkelaars hebben wijzigingen aangebracht zodat de RMW-operatie de controlewaarde van de blokken controleert voordat deze operatie wordt uitgevoerd, en indien nodig, controleert het ook de controlewaarden na het schrijven tijdens gegevensherstel. Helaas leidt dit in situaties met onvoltooide schrijfstripes (RMW) tot extra overhead voor het berekenen van controlewaarden, maar verhoogt het aanzienlijk de betrouwbaarheid. Voor RAID6 is dit logica nog niet klaar, maar voor een dergelijke storing in RAID6 is het noodzakelijk dat de schrijfoperatie op twee apparaten tegelijk mislukt, wat minder waarschijnlijk is.
Daarnaast kunnen we de aanbevelingen voor het gebruik van RAID5/6 door de ontwikkelaars opmerken, die inhouden dat in Btrfs het opslagprofiel voor metadata en data kan verschillen. Hierbij kan een RAID1-profiel (spiegel) of zelfs RAID1C3 (3 kopieƫn) voor metadata worden gebruikt, terwijl voor data RAID5 of RAID6 wordt ingezet. Dit biedt een betrouwbare bescherming van metadata en voorkomt een "write hole" aan de ene kant, en aan de andere kant een efficiƫnter gebruik van ruimte dat kenmerkend is voor RAID5/6. Dit voorkomt schade aan de metadata, terwijl datacorrupties kunnen worden hersteld.
Het is ook vermeldenswaard dat voor SSD's in Btrfs in kernel 6.2 standaard asynchrone uitvoering van de "discard"-bewerking (markeren van vrijgegeven blokken die fysiek niet meer hoeven te worden opgeslagen) zal worden geactiveerd. Het voordeel van deze modus is de hoge prestaties door effectieve groepering van "discard"-bewerkingen in de wachtrij en vervolgens verwerking door de achtergrondverwerker, waardoor normale bestandssysteemoperaties niet worden vertraagd, zoals bij synchronisatie "discard" na het vrijgeven van blokken, terwijl SSD efficiƫntere besluiten kan nemen. Aan de andere kant is het niet langer nodig om hulpprogramma's zoals fstrim te gebruiken, aangezien alle beschikbare blokken in het bestandssysteem zullen worden schoongemaakt zonder extra scanning en zonder vertraging van de operaties.
Bron: opennet.ru
