Update OpenZFS 2.1.14 und 2.2.2 zur Behebung eines Fehlers, der zu Dateibeschädigungen führt.

Korrekturversionen des OpenZFS-Projekts 2.1.14 und 2.2.2 wurden erstellt, um die ZFS-Dateisystemimplementierung für Linux und FreeBSD weiterzuentwickeln. In den Updates wurde ein Problem im Code zur Überprüfung der Konsistenz des dnode-Caches behoben, das zu Datenbeschädigungen in Dateien führte, die leere Bereiche enthielten, wenn sie nach Änderungen kopiert wurden.

Ursprünglich wurde versucht, das Problem in der Version 2.2.1 zu beheben, jedoch war die Korrektur nicht effektiv. Der Fehler blieb lange unentdeckt und trat auf, nachdem Änderungen an dem Programm „cp“ im coreutils-Paket 9.x vorgenommen wurden. Es wird vermutet, dass das Problem in Red Hat Enterprise Linux und darauf basierenden Distributionen nicht auftritt, da in RHEL 9 das Paket coreutils 8.x mit einer anderen Logik für das Programm „cp“ verwendet wird.

Das Problem tritt auf, wenn Dateiübertragungswerkzeuge verwendet werden, die in der Lage sind, leere Bereiche in Dateien zu erkennen und zu optimieren. Eine Beschädigung kann in stark belasteten Dateisystemen beim Kopieren einer Datei auftreten, wenn die Operation fast unmittelbar nach einer Änderung durchgeführt wird und ein Teil der Daten nur im Dirty-Cache verbleibt und noch nicht auf die Festplatte geschrieben wurde.

Zur Optimierung des Umgangs mit leeren Bereichen in Dateien unterstützt OpenZFS seit Release 0.6.2 die Operationen SEEK_HOLE und SEEK_DATA, mit denen leere Bereiche einer Datei beim Lesen von der Festplatte übersprungen werden können. Die Erkennung leerer Bereiche und die Speicherung der Informationen darüber erfolgt erst, nachdem alle im Cache verbleibenden Daten, die mit der Datei verbunden sind, auf die Festplatte geschrieben wurden. Um den Schreibvorgang in OpenZFS zu initiieren, gibt es eine Überprüfung, die die Anwesenheit ungespeicherter Daten im Cache bewertet und einen erzwungenen Schreibvorgang auf die Festplatte durchführt, der erforderlich ist, um SEEK_HOLE und SEEK_DATA nutzen zu können.

Leider war die Überprüfung unvollständig, und unter bestimmten Umständen wurden die Informationen zum Status des Zurücksetzens nicht korrekt ermittelt, sodass auf der Festplatte alte Daten über den Inhalt der Datei vorhanden waren, wenn die Anfrage in ein kurzes Zeitfenster zwischen zwei Zurücksetzoperationen aus dem Cache fiel. Die Lesevorgänge, die darauf abzielen, leere Bereiche zu optimieren, konnten in diesem Moment Teile der Daten übersehen, da sie als leer betrachtet wurden, während das Programm, das mit der Datei arbeitete, möglicherweise zuvor Änderungen in diesen leeren Bereichen vorgenommen hatte. Infolgedessen konnte die Verwendung des Befehls „cp“ dazu führen, dass eine Kopie erstellt wurde, die leere Bereiche enthielt, wo im Original keine vorhanden waren.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster