{"id":2601,"date":"2023-12-07T15:13:09","date_gmt":"2023-12-07T15:13:09","guid":{"rendered":"https:\/\/byte-bucket.com\/2023\/12\/07\/fehler-beim-speichern-von-dateien-in-freebsd-in-verbindung-mit-openzfs-aufgetreten\/"},"modified":"2023-12-07T15:13:09","modified_gmt":"2023-12-07T15:13:09","slug":"fehler-beim-speichern-von-dateien-in-freebsd-in-verbindung-mit-openzfs-aufgetreten","status":"publish","type":"post","link":"https:\/\/byte-bucket.com\/?p=2601","title":{"rendered":"Fehler beim Speichern von Dateien in FreeBSD in Verbindung mit OpenZFS aufgetreten"},"content":{"rendered":"<p>Bei der Entwicklung von FreeBSD wurde k\u00fcrzlich ein Fehler entdeckt, der beim Speichern von Dateien auftritt und offenbar mit der neuen Version 2.2.0 des Dateisystems OpenZFS zusammenh\u00e4ngt. Nach einer gr\u00fcndlichen Untersuchung verd\u00e4chtigen die Entwickler die neu implementierte Block-Cloning-Optimierung von OpenZFS als Ursache f\u00fcr das Problem.<\/p>\n<p>Auch Terin Stocks vom Gentoo Linux-Team stie\u00df auf Fehler im Zusammenhang mit der Datenspeicherung, als er den Go-Compiler auf einem Gentoo Linux mit OpenZFS installierte. Nachdem die Bin\u00e4rdateien \u00fcber die Paketverwaltung Portage erstellt wurden, enthielten zahlreiche der erzeugten Dateien Nullen oder Datenm\u00fcll. Besonders frustrierend ist dabei, dass der Integrit\u00e4tspr\u00fcfer &#8222;scrub&#8220; von ZFS diese Fehler nicht erkannte.<\/p>\n<p>Am 13. Oktober wurde OpenZFS 2.2.0 ver\u00f6ffentlicht. Eine der neuen Funktionen ist die Block-Cloning-Funktion. Statt tats\u00e4chlich kopierte Bl\u00f6cke einer Datei anzulegen, werden sie nur zus\u00e4tzlich referenziert. Erst wenn entweder die originalen oder die kopierten Daten ge\u00e4ndert werden, wird ein zweiter physischer Datenblock erstellt. Der cp-Befehl von GNU\/Linux macht bereits von dieser Funktion Gebrauch.<\/p>\n<p>Das FreeBSD-Team beschloss daraufhin, das Block Cloning f\u00fcr FreeBSD 14 zu deaktivieren, was zun\u00e4chst das Problem zu l\u00f6sen schien. Diese Vorgehensweise wurde auch bei OpenZFS 2.2.1 sowie bei den k\u00fcrzlich ver\u00f6ffentlichten Versionen von Proxmox Virtual Environment 8.1 und Proxmox Backup Server 3.1 angewendet, die ebenfalls OpenZFS f\u00fcr ihre Speicherbereiche verwenden.<\/p>\n<p>Allerdings scheint der eigentliche Fehler nicht unbedingt in der Block-Cloning-Funktion selbst zu liegen. Viele Entwickler vermuten, dass das Problem m\u00f6glicherweise bereits in fr\u00fcheren Versionen von OpenZFS vorhanden war, jedoch durch die Block-Cloning-Funktion st\u00e4rker hervortritt.<\/p>\n<p>Ed Maste von der FreeBSD Foundation r\u00e4t daher allen OpenZFS-Nutzern dringend davon ab, das Block Cloning vorerst zu aktivieren. Um den Workaround f\u00fcr FreeBSD 14.0 und 13.2 zu implementieren, bei dem &#8222;Enable forcing txg sync to find holes&#8220; deaktiviert wird, k\u00f6nnen folgende Schritte ausgef\u00fchrt werden:<\/p>\n<p>Die Datei &#8222;\/etc\/sysctl.conf&#8220; \u00f6ffnen und die Zeile &#8222;vfs.zfs.dmu_offset_next_sync=0&#8220; hinzuf\u00fcgen.<br \/>\nDen Befehl &#8222;sysctl vfs.zfs.dmu_offset_next_sync=0&#8220; als Root-Benutzer ausf\u00fchren.<\/p>\n<p>Um zu \u00fcberpr\u00fcfen, ob das Block Cloning unter FreeBSD 14 aktiviert ist, k\u00f6nnen folgende Schritte durchgef\u00fchrt werden:<\/p>\n<p>Den Befehl &#8222;sysctl -d vfs.zfs.bclone_enabled&#8220; ausf\u00fchren, um eine Beschreibung des Parameters &#8222;vfs.zfs.bclone_enabled&#8220; zu erhalten.<br \/>\nDen Befehl &#8222;sysctl vfs.zfs.bclone_enabled&#8220; ausf\u00fchren, um den aktuellen Wert von &#8222;vfs.zfs.bclone_enabled&#8220; abzurufen. Wenn der Wert 0 ist, ist das Block Cloning deaktiviert.<\/p>\n<p>Es sollte beachtet werden, dass \u00e4ltere Versionen von OpenZFS m\u00f6glicherweise einen Fehler melden (sysctl: unknown oid vfs.zfs.bclone_enabled) und standardm\u00e4\u00dfig deaktiviert sind.<\/p>\n<p>Da die Entwickler noch nicht vollst\u00e4ndig sicher sind, ob der Fehler ausschlie\u00dflich auf die neue Block-Cloning-Funktion zur\u00fcckzuf\u00fchren ist, wird vermutet, dass das Block Cloning einen tief im System von OpenZFS verankerten Fehler verursacht.<\/p>\n<p>Bronek Kozicki bem\u00fcht sich, die Ursache genauer zu beschreiben: Wenn eine Datei oder eine \u00c4nderung asynchron geschrieben wird und der Schreibvorgang noch nicht abgeschlossen ist, k\u00f6nnte ein weiterer Prozess, der versucht, diese Daten zu lesen, anstelle der ge\u00e4nderten Daten Nullen erhalten. Der Prozess schreibt diese Nullen dann auf den Datentr\u00e4ger, was f\u00fcr OpenZFS und den scrub-Vorgang korrekt ist. Dadurch werden inkorrekte Daten korrekt in das OpenZFS-Dateisystem geschrieben. Um sicherzustellen, dass die Daten korrekt sind, k\u00f6nnen Pr\u00fcfsummen verwendet oder sie mit fr\u00fcheren Backups abgeglichen werden.<\/p>\n<p>Tony Hutter hat auf Github ein n\u00fctzliches Skript ver\u00f6ffentlicht, mit dem eigene OpenZFS-Dateisysteme umfassend \u00fcberpr\u00fcft werden k\u00f6nnen. Das Skript erzeugt zahlreiche Dateien, kopiert sie und pr\u00fcft ihre Integrit\u00e4t. Es ist jedoch wichtig zu beachten, dass das Skript lediglich als Hilfsmittel betrachtet werden sollte, um eine potenziell fehlerhafte Version von OpenZFS zu erkennen. Nur weil keine Fehler auftreten, bedeutet das nicht zwangsl\u00e4ufig, dass der Fehler nicht doch im System verborgen ist.<\/p>\n<p>Schlagw\u00f6rter: FreeBSDTeam + OpenZFS + BlockCloningFehler<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bei der Entwicklung von FreeBSD wurde k\u00fcrzlich ein Fehler entdeckt, der beim Speichern von Dateien auftritt und offenbar mit der neuen Version 2.2.0 des Dateisystems OpenZFS zusammenh\u00e4ngt. Nach einer gr\u00fcndlichen Untersuchung verd\u00e4chtigen die Entwickler die neu implementierte Block-Cloning-Optimierung von OpenZFS als Ursache f\u00fcr das Problem. Auch Terin Stocks vom Gentoo&#46;&#46;&#46;<\/p>\n","protected":false},"author":4,"featured_media":2600,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2601","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/byte-bucket.com\/index.php?rest_route=\/wp\/v2\/posts\/2601","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/byte-bucket.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/byte-bucket.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/byte-bucket.com\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/byte-bucket.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2601"}],"version-history":[{"count":0,"href":"https:\/\/byte-bucket.com\/index.php?rest_route=\/wp\/v2\/posts\/2601\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/byte-bucket.com\/index.php?rest_route=\/wp\/v2\/media\/2600"}],"wp:attachment":[{"href":"https:\/\/byte-bucket.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/byte-bucket.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2601"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/byte-bucket.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}