Gitはデータの劣化を防ぎますか


40

ZFSとBtrfsはチェックサムを使用してデータの劣化を防ぎ、Gitはコミットごとに基本的にすべてをハッシュすることで整合性があることを読みました。

ストレージ用にBtrfs RAID 1を備えたLinux NASでGitサーバーを使用するつもりでしたが、Gitに整合性があれば、これは必要ないと思います(少なくともデータの劣化を防ぐことが必要な場合はそうではありません)。

質問: それで、Gitの整合性は、コミットごとに基本的にすべてをハッシュすることで、ビット腐敗を防止または支援しますか?



3
また、ローカルクローンに注意してください。gitは、同じファイルシステムでクローンを作成するときにハードリンクを使用しようとします。これにより、クローン作成は驚くほど高速になりますが、1つのオブジェクトが破損すると、両方のクローンが破損します。
アロ

破損が特定のマシン上の一部の古代オブジェクトに対してのみ発生する場合、それらのオブジェクトはレポの他のクローンに存在する可能性が高いことに注意してください。ただし、これがパックファイルとどのように統合されるかはわかりません。
o11c

回答:


61

Gitのハッシュは、コミットが作成されたときにのみ発生し、そこからコミットを識別するためにハッシュが使用されます。これは、ファイルの整合性を保証するものではありません。Gitリポジトリは破損し、データを失う可能性があります。実際、gitにはこの種の損失を検出する組み込みコマンドgit fsckがありますが、ドキュメントにあるように、バックアップから破損したデータを復元する責任があります。


4
なぜfsck私にとって常に悪い言葉のように見えるのか...私は肯定的になり、あなたが適切かもしれないバックアップを持っていない場合、;)
CAD97

7
@ CAD97プログラマーは、これらの比較的不器用なしゃれで知られています。それは実際にはかなり一般的です...私の頭の上には、sh(shell)、bsh(Bourne shell)、bash(Bourne again shell)などがあります...最後の1つはラメしゃれです...
ネルソン

1
魚を忘れてはいけない@Nelson
user253751

@ CAD97地獄、git自体の名前は、適切に機能していないときのように考えることができます。
SGR

1
@ CAD97-それはfvcctkのようなフラグで実行する前です-そのように実行している場合、データは既に「fvcctk」されている可能性があります。;)
ジョー

16

「予防」の意味に依存します。

(すべて、ビット腐敗の第一は、複数の定義を持つ用語である。この問題はない程度のコードはメンテナンスが不足しているためunrunnableになってきて。)

ビットの減衰による破損を検出する可能性が高いという「予防」を意味する場合、はい、それは機能します。ただし、その破損を修正するのに役立ちません。ハッシュはエラー検出のみを提供し、修正は提供しません

これは一般に「整合性」が意味するものです。データの不正または意図しない操作を検出する可能性であり、それを防止または修正する可能性ではありません。

一般に、いくつかの理由から、RAID1とバックアップ(ZFSスナップショットなどで実装されている可能性がありますが、RAID1 +スナップショットのZFSセマンティクスに精通していません)が必要です。

  • ディスクに致命的な障害が発生した場合、データを復元するにはRAID1(または最近のバックアップ)が必要です。データの完全なコピー(RAID1)がない限り、ディスク全体のエラーを修正するエラー修正はできません。短いダウンタイムの場合、基本的にRAID1が必要です。

  • リポジトリの一部または全体を誤って削除した場合、バックアップが必要です(RAID1は、すべてのデバイスへの変更をすぐに反映するため、保護されません)

ただし、LVMなどを介したブロックレベルRAID1自体が2つのディスクのみである場合、データのサイレント減衰から保護されません。2つのディスクのどちらが正しいデータを保持しているかをRAIDコントローラーが認識できません。そのためには、ファイルのチェックサムなどの追加情報が必要です。ZSFとのbtrfsチェックサムが来るところである:彼らは(彼らはと言っているわけではないが使用することができますされて保持する2枚のディスクのどの区別するために、これらの例で使用される、私はZFSかのbtrfsが物事を処理する方法を知りません)正しいデータ。


5
したくない場合は、ミラーリングを使用する必要はありません。ZFSは、1、2、または3台のドライブに相当するパリティのストライピングをサポートしています。任意の数のドライブでのミラーリング(単一ドライブを含む=冗長性なし)。私の主な大容量記憶装置は、RAIDZ2構成の6台のドライブを備えたZFSです。これは、基本的にファイルシステムレベルのRAID6(2台のドライブに相当する冗長性を持つストライピング)です。これにより、これらのドライブのいずれか1つが失われ、さらにもう1つが修正不可能なエラーを検出して回復できます。または、2つのドライブが失われ、同期中にエラーが発生しなかった場合。データの損失なし。バックアップが引き続き推奨されます。
CVn

1

ビット腐敗を防ぐ

いいえ、まったくありません。gitによって導入されるRAIDのような冗長性はありません。.gitディレクトリ内のファイルがビット腐敗した場合、通常と同様にデータが失われます。

ビット腐敗に対する助け?

Yyyy ...いいえ。ビット腐敗の発生を防ぐことはできませんが、ビット腐敗の検出には役立ちます。ただし、通常の使用中は、独自のアカウントでは実行されません(もちろん、一部のオブジェクトなどをチェックアウトするときに実行されますが、履歴に対しては実行されません)。コンテンツからハッシュを再計算して実際のハッシュと比較するには、cronジョブを作成する必要があります。gitハッシュは文字通り単なるコンテンツハッシュであるため、そうするのは非常に簡単git fsckです。再計算するのは簡単であり、あなたのためにそうします。しかし、ビット腐敗を検出した場合、それに対してできることは特にありません。具体的には、大きなチャンクが自動的に圧縮されるため、大きなオブジェクトのビットが反転された場合、チャンクが完全に失われる可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.