Update OpenZFS 2.1.14 en 2.2.2 met oplossing voor een bug die leidt tot beschadiging van bestanden

De corrigerende uitgaven van het OpenZFS-project 2.1.14 en 2.2.2 zijn gevormd, waarmee de implementatie van het ZFS-bestandssysteem voor Linux en FreeBSD wordt voortgezet. In de updates is een probleem verholpen in de code voor het controleren van de consistentie van dnode-caches, wat leidde tot gegevensverlies in bestanden die lege gebieden bevatten, bij het kopiƫren na wijzigingen.

Oorspronkelijk werd geprobeerd het probleem op te lossen in versie 2.2.1, maar de patch bleek niet effectief. De fout bleef lange tijd onopgemerkt en begon zich te manifesteren na wijzigingen die in de 'cp'-utility in het coreutils 9.x-pakket waren aangebracht. Er wordt aangenomen dat het probleem zich niet voordoet in Red Hat Enterprise Linux en op hem gebaseerde distributies, omdat in RHEL 9 het coreutils 8.x-pakket met een andere logica voor de 'cp'-utility wordt gebruikt.

Het probleem manifesteert zich bij het gebruik van bestands-copy utilities die lege gebieden in bestanden kunnen detecteren en optimaliseren. Gegevensverlies kan optreden in druk belaste bestandssystemen bij het kopiƫren van een bestand, indien de operatie bijna onmiddellijk na een wijziging wordt uitgevoerd en een deel van de gegevens alleen in de dirty-cache blijft en nog niet naar de schijf is weggeschreven.

Om de werking met lege gebieden in bestanden te optimaliseren, ondersteunt OpenZFS, sinds release 0.6.2, de bewerkingen SEEK_HOLE en SEEK_DATA, waarmee lege gebieden in een bestand kunnen worden overgeslagen bij het lezen van de schijf. Het herkennen van lege gebieden en het opslaan van informatie daarover gebeurt pas na het wegschrijven van alle achtergebleven gegevens in de cache die met het bestand verband houden. Voor de initiatie van het wegschrijven in OpenZFS is er een controle die de aanwezigheid van niet-opgeslagen gegevens in de cache beoordeelt en een geforceerde schrijf- naar-schijf van informatie uitvoert, die noodzakelijk is voor het gebruik van SEEK_HOLE en SEEK_DATA.

Helaas was de controle onvolledig en kon, onder bepaalde omstandigheden, de status van het resetten onjuist worden bepaald, waardoor er oude informatie over de inhoud van het bestand op de schijf stond, als het verzoek zich in een klein tijdsvenster bevond tussen twee resetoperaties van gegevens uit de cache. Leesoperaties die het laden van lege gebieden optimaliseren, konden op dat moment enkele gegevens overslaan en als leeg beschouwen, terwijl het programma dat met het bestand werkte eerder wijzigingen in de lege gebieden had kunnen aanbrengen. Dit resulteerde erin dat het gebruik van het "cp"-hulpmiddel kon leiden tot een kopie die lege gebieden bevatte waar deze in het originele bestand niet aanwezig waren.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster