Ich habe gelesen, dass ZFS und Btrfs Prüfsummen verwenden, um zu verhindernDatenverschlechterungund ich habe gelesen, dass die Integrität von Git dadurch gewährleistet ist, dass bei jedem Commit praktisch alles gehasht wird.
Ich wollte zur Speicherung einen Git-Server auf einem Linux-NAS mit Btrfs RAID 1 verwenden, aber wenn Git über Integrität verfügt, ist dies vermutlich nicht erforderlich (zumindest nicht, wenn ich lediglich eine Datenverschlechterung verhindern möchte).
Frage: Verhindert oder verhindert die Integrität von Git durch das Hashen praktisch aller Elemente bei jedem Commit Bit-Rot?
Antwort1
Das Hashing von Git erfolgt nur zum Zeitpunkt der Erstellung von Commits und von da an werden die Hashes verwendet, um die Commits zu identifizieren. Dies stellt in keiner Weise die Integrität der Dateien sicher. Git-Repos können beschädigt werden und Daten verlieren. Tatsächlich verfügt Git über einen integrierten Befehl, um diese Art von Verlust zu erkennen.git fsck, aber wie in der Dokumentation angegeben, sind Sie für die Wiederherstellung beschädigter Daten aus Sicherungen verantwortlich.
Antwort2
Hängt davon ab, was Sie mit „verhindern“ meinen.
(Zunächst einmal ist Bit-Rot ein Begriff mit mehreren Definitionen. Diese Frage istnichtumCode wird aufgrund mangelnder Wartung nicht mehr ausführbar.)
Wenn Sie mit "verhindern" meinen, dass es wahrscheinlich eine Beschädigung durch den Zerfall von Bits erkennt, dann wird das funktionieren. Es wird jedochnichthelfen, diese Beschädigung zu beheben: die Hashes liefern nur FehlerErkennung, nicht Korrektur.
Das ist im Allgemeinen, was mit "Integrität" gemeint ist: Die Möglichkeit,erkennenunbefugte/unbeabsichtigte Manipulation von Daten, nicht die Möglichkeit, diese zu verhindern oder zu korrigieren.
Sie möchten im Allgemeinen immer noch ein RAID1 zusammen mit Backups (möglicherweise implementiert mit ZFS-Snapshots oder ähnlichem, ich bin mit der ZFS-Semantik für RAID1 + Snapshots nicht vertraut), und zwar aus mehreren Gründen:
Wenn eine Festplatte komplett ausfällt, benötigen Sie entweder ein RAID1 (oder eine aktuelle Sicherung), um Ihre Daten wiederherzustellen. Keine Fehlerkorrektur kann den Ausfall einer ganzen Festplatte beheben, es sei denn, sie verfügt über eine vollständige Kopie der Daten (RAID1). Für eine kurze Ausfallzeit benötigen Sie grundsätzlich RAID1.
Wenn Sie versehentlich Teile oder das gesamte Repository löschen, benötigen Sie ein Backup (RAID1 schützt Sie nicht, da es die Änderung sofort auf allen Geräten widerspiegelt).
Block-Level-RAID1 (z. B. über LVM oder ähnliches) mit nur zwei Festplatten an sich wirdnichtschützen Sie jedoch vor dem stillen Verfall von Daten: Der RAID-Controller kann nicht wissen, welche der beiden Festplatten die richtigen Daten enthält. Dazu benötigen Sie zusätzliche Informationen, wie etwa eine Prüfsumme über Dateien. Hier kommen die Prüfsummen von ZSF und btrfs ins Spiel: Sie können verwendet werden (was nicht heißt, dass sieSindin diesen Fällen verwendet, ich weiß nicht, wie ZFS oder btrfs dort handhaben), um zu unterscheiden, welche der beiden Festplatten die richtigen Daten enthält.
Antwort3
Bit-Rot verhindern
Nein, das tut es nicht, auf keinen Fall. Git bietet keine RAID-ähnliche Redundanz. Wenn die Dateien in Ihrem .git
Verzeichnis Bit-Rot aufweisen, verlieren Sie wie üblich Daten.
Hilfe gegen Bit-Rot?
Jippie... nein. Es hilft nicht gegen das Auftreten von Bit-Rot, aber es hilft, Bit-Rot zu erkennen. Aber zu keinem Zeitpunkt während der normalen Verwendung tut es dies von sich aus (natürlich tut es das, wenn Sie einige Objekte auschecken usw., aber nicht für Ihren Verlauf). Sie müssten Cron-Jobs erstellen, um die Hashes aus dem Inhalt neu zu berechnen und sie mit den tatsächlichen Hashes zu vergleichen. Das ist ziemlich einfach, da git
Hashes buchstäblich einfach die Inhalts-Hashes sind, ist es einfach, sie neu zu berechnen und git fsck
erledigt das für Sie. Aber wenn es Bit-Rot erkennt, kann es nichts Besonderes dagegen tun. Insbesondere da größere Blöcke automatisch komprimiert werden, werden Sie wahrscheinlich einen vollständigen Blockverlust erleiden, wenn ein Bit in einem größeren Objekt umgedreht wird.