Ich habe gelesen, dass ZFS und Btrfs Prüfsummen verwenden, um eine Verschlechterung der Daten zu verhindern , und ich habe gelesen, dass Git Integrität hat, indem es im Wesentlichen alles mit jedem Commit hascht.
Ich wollte einen Git-Server auf einem Linux-NAS mit Btrfs-RAID 1 als Speicher verwenden, aber wenn Git über Integrität verfügt, ist dies vermutlich nicht erforderlich (zumindest nicht, wenn ich nur die Verhinderung von Datenverschlechterungen möchte).
Frage: Verhindert oder hilft Gits Integrität, obwohl sie im Wesentlichen alles mit jedem Commit hat, gegen Bit-Rot?
git
zfs
btrfs
data-integrity
MADforFUNandHappy
quelle
quelle
Antworten:
Das Hashing von Git findet nur zu dem Zeitpunkt statt, an dem Commits erstellt werden, 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 hat git einen eingebauten Befehl, um diese Art von Verlust zu erkennen, git fsck , aber wie in der Dokumentation angegeben, sind Sie dafür verantwortlich, beschädigte Daten aus Sicherungen wiederherzustellen.
quelle
fsck
für mich immer nach einem schlechten Wort aus ... Ich nehme an, wenn es positivKommt darauf an, was du mit "verhindern" meinst.
(Erstens ist bit-rot ein Begriff mit mehreren Definitionen. Bei dieser Frage geht es nicht darum, dass Code aufgrund mangelnder Wartung nicht mehr ausgeführt werden kann .)
Wenn Sie mit "verhindern" meinen, dass es wahrscheinlich eine Beschädigung durch Zerfall von Bits erkennen wird, ja, das wird funktionieren. Es wird jedoch nicht helfen, diese Beschädigung zu beheben: Die Hashes bieten nur eine Fehlererkennung, keine Korrektur .
Dies ist im Allgemeinen das, was unter "Integrität" zu verstehen ist : Die Möglichkeit, unbefugte / unbeabsichtigte Manipulationen von Daten zu erkennen , nicht die Möglichkeit, diese zu verhindern oder zu korrigieren.
Sie möchten im Allgemeinen immer noch ein RAID1 zusammen mit Sicherungen (möglicherweise mit ZFS-Snapshots oder ähnlichem implementiert, ich kenne die ZFS-Semantik für RAID1 + -Snapshots nicht), und zwar aus mehreren Gründen:
Wenn eine Festplatte ausfällt, benötigen Sie entweder ein RAID1 (oder ein aktuelles Backup), um Ihre Daten wiederherzustellen. Keine Fehlerkorrektur kann einen Ausfall der gesamten Festplatte beheben, es sei denn, sie verfügt über eine vollständige Kopie der Daten (RAID1). Für eine kurze Ausfallzeit benötigen Sie im Wesentlichen RAID1.
Wenn Sie versehentlich Teile oder das gesamte Repository löschen, benötigen Sie ein Backup (RAID1 schützt Sie nicht, da es sofort die Änderung aller Geräte widerspiegelt).
Block-Level-RAID1 (z. B. über LVM oder ähnliches) mit nur zwei Festplatten an sich schützt Sie jedoch nicht vor unbeaufsichtigtem Datenverfall: Der RAID-Controller kann nicht wissen, welche der beiden Festplatten die richtigen Daten enthält. Dazu benötigen Sie zusätzliche Informationen, beispielsweise eine Prüfsumme über Dateien. Hier werden die ZSF und Btrfs Prüfsummen kommen: sie verwendet werden können (was nicht heißt, dass sie sich in diesen Fällen verwendet werden, ich weiß nicht , wie ZFS oder Btrfs Dinge dort handhaben ) , die von den beiden Scheiben zu unterscheiden hält die richtigen Daten.
quelle
Nein, überhaupt nicht. Es gibt keine RAID-ähnliche Redundanz, die von git eingeführt wird. Wenn die Dateien in Ihrem
.git
Verzeichnis etwas verrottet sind, verlieren Sie wie gewohnt Daten.Jjjj ... nein. Es hilft nicht gegen Bit-Rot, aber es hilft, Bit-Rot zu erkennen. Dies geschieht jedoch zu keinem Zeitpunkt während des normalen Gebrauchs auf eigene Rechnung (natürlich auch, wenn Sie einige Objekte auschecken, aber nicht für Ihren Verlauf). Sie müssten Cron-Jobs erstellen, um die Hashes aus dem Inhalt neu zu berechnen und mit den tatsächlichen Hashes zu vergleichen. Es ist ziemlich trivial, dies zu tun, da
git
Hashes buchstäblich nur die Inhalts-Hashes sind. Es ist trivial, sie neu zu berechnen undgit fsck
tut dies für Sie. Aber wenn es Bit-Rot erkennt, gibt es nichts Bestimmtes, was es dagegen tun kann. Insbesondere, da größere Blöcke automatisch komprimiert werden, wird wahrscheinlich ein vollständiger Blockverlust eintreten, wenn ein Teil in einem größeren Objekt gespiegelt wird.quelle