Git은 데이터 저하를 방지합니까


40

ZFS와 Btrfs는 데이터 저하 를 방지하기 위해 체크섬을 사용한다는 것을 읽었으며 Git은 기본적으로 각 커밋마다 모든 것을 해싱함으로써 무결성을 가지고 있음을 읽었습니다.

스토리지 용으로 Btrfs RAID 1이 설치된 Linux NAS에서 Git 서버를 사용하려고했지만 Git에 무결성이있는 경우 이것이 필요하지 않은 것 같습니다 (적어도 데이터 저하 방지가 필요한 경우는 아님).

질문 : 각 커밋으로 본질적으로 모든 것을 해싱하는 것이 Git의 무결성으로 인해 비트 로트를 방지하거나 방지합니까?



3
그리고 로컬 클론을 조심하면서 git은 동일한 파일 시스템에서 클론을 만들 때 하드 링크를 사용하려고 시도합니다. 이렇게하면 복제 속도가 엄청나게 빨라지지만 한 개체가 손상되면 두 복제본이 모두 손상됩니다.
allo

특정 머신에서 일부 고대 오브젝트에 대해서만 손상이 발생하면 해당 오브젝트는 다른 리포지토리 복제본에있을 가능성이 높지만 (더 적은) 최신 파일을 계속 사용할 수 있습니다. 그래도 이것이 팩 파일과 어떻게 통합되는지는 잘 모릅니다.
o11c

답변:


61

Git의 해싱은 커밋이 생성 될 때만 발생하며, 그로부터 해시가 커밋을 식별하는 데 사용됩니다. 이것은 파일의 무결성을 보장하지 않습니다. 힘내 repos는 손상되어 데이터를 잃을 수 있습니다. 실제로 git에는 이러한 종류의 손실을 감지하는 git fsck 명령이 내장되어 있지만 설명서에서 알 수 있듯이 백업에서 손상된 데이터를 복원해야합니다.


4
fsck항상 나에게 나쁜 단어처럼
보이는가

7
@ CAD97 프로그래머는 상대적으로 절름발이 인 것으로 알려져 있습니다. 사실 꽤 흔합니다 ... 내 머리 꼭대기에서 sh (shell), bsh (Bourne shell), 그리고 bash (Bourne shell)과 같은 것들이 있습니다 ... 마지막으로 절름발이입니다 ...
Nelson

1
물고기 잊지 마세요 @Nelson
user253751

@ CAD97 Hell, git 자체의 이름은 그것이 제대로 작동하지 않을 때와 같이 고려 될 수 있습니다.
SGR

1
@ CAD97-그리고 fvcctk와 같은 플래그로 실행하기 전입니다. 왜냐하면-그렇게 실행하면 데이터가 이미 "fvcctk"일 수 있습니다. ;)
Joe

16

"예방"의 의미에 따라 다릅니다.

(우선은 비트 부패는 여러 정의와 용어입니다.이 질문은 하지 에 대한 유지 관리의 부족으로 실행 불가로 인해되고 코드 .)

"예방"을 의미한다면 비트의 붕괴로 손상을 감지 할 가능성이 있습니다. 그렇습니다. 그러나이 손상을 수정하는 데 도움이 되지 않습니다 . 해시는 오류가 아닌 수정 만 제공합니다 .

이것은 일반적으로 "무결성 (integrity)"의 의미 입니다. 데이터를 예방하거나 수정할 가능성이 아니라 데이터의 무단 / 의도하지 않은 조작 을 탐지 할 가능성.

일반적으로 여러 가지 이유로 백업과 함께 RAID1을 원할 것입니다 (ZFS 스냅 샷 또는 이와 유사한 것으로 구현 될 수 있습니다. RAID1 + 스냅 샷의 ZFS 의미론에 익숙하지 않습니다).

  • 디스크에 치명적인 오류가 발생한 경우 데이터를 복원하려면 RAID1 (또는 최신 백업)이 필요합니다. 전체 데이터 사본 (RAID1)이없는 한 전체 디스크 장애에 대해서는 오류 정정을 수행 할 수 없습니다. 짧은 가동 중지 시간을 위해서는 기본적으로 RAID1이 있어야합니다.

  • 실수로 리포지토리의 일부 또는 전체를 삭제 한 경우 백업이 필요합니다 (RAID1은 모든 장치의 변경 사항을 즉시 반영하므로 보호하지 않습니다)

자체에만 두 개의 디스크와 블록 레벨 RAID1 (예를 통해 LVM 또는 유사한) 할 수 없습니다 RAID 컨트롤러가 올바른 데이터를 보유하고있는이 개 디스크의 알 수없는 :하지만 데이터의 침묵 부식으로부터 보호. 파일에 대한 체크섬과 같은 추가 정보가 필요합니다. 이것은 ZSF와 btrfs 체크섬이 들어오는 곳입니다. 두 디스크 중 어떤 디스크를 보유하고 있는지 구별하기 위해 사용할 수 있습니다 ( 이 경우 에는 사용되지 않습니다) 올바른 데이터.


5
원하지 않는 경우 미러링을 사용할 필요가 없습니다. ZFS는 1, 2 또는 3 개의 드라이브에 해당하는 패리티의 스트라이핑을 지원합니다. 임의의 수의 드라이브로 미러링 (단일 드라이브 포함 = 중복 없음). 나의 주요 벌크 스토리지는 RAIDZ2 구성에서 6 개의 드라이브가있는 ZFS이며 기본적으로 파일 시스템 레벨 RAID6입니다 (2 개의 드라이브 가치가있는 스트라이핑). 이를 통해 해당 드라이브 중 하나의 손실과 수정 불가능한 오류를 하나 이상 발견하여 복구 할 수 있습니다. 또는 리 실버 (resilver) 동안 다른 곳에서는 두 개의 드라이브 손실 및 오류 없음; 데이터 손실없이. 백업이 여전히 권장됩니다.
CVn

1

비트 부패 방지

아니, 전혀 그렇지 않습니다. git이 도입 한 RAID와 같은 중복성은 없습니다. .git디렉토리 의 파일에 비트 로트가 발생하면 평소와 같이 파일 이 손실됩니다.

비트 로트에 대한 도움?

예 .. 아니요 비트 로트 발생에 대해서는 도움이되지 않지만 비트 로트를 감지하는 데 도움이됩니다. 그러나 정상적인 사용 중에는 자체 계정으로 수행하지 않습니다 (물론 일부 개체 등을 체크 아웃 할 때 기록하지만 역사는 아닙니다). 컨텐츠에서 해시를 다시 계산하고 실제 해시와 비교하기 위해 cron 작업을 작성해야합니다. 이 이렇게 꽤 간단하다 git해시가 내용 해시 말 그대로 단순히 그들을 다시 계산하는 사소한이고, git fsck당신을 위해 그렇게한다. 그러나 비트 로트를 감지하면 특히 비트 로트에 대해 할 수있는 일은 없습니다. 특히 큰 청크가 자동으로 압축되므로 큰 오브젝트의 비트가 뒤집 히면 총 청크 손실이 발생할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.