Git có ngăn chặn sự xuống cấp dữ liệu không


40

Tôi đọc rằng ZFS và Btrfs sử dụng tổng kiểm tra để ngăn chặn sự xuống cấp dữ liệu và tôi đọc rằng Git có tính toàn vẹn thông qua việc băm tất cả mọi thứ với mỗi cam kết.

Tôi sẽ sử dụng máy chủ Git trên Linux NAS với Btrfs RAID 1 để lưu trữ, nhưng nếu Git có tính toàn vẹn thì tôi đoán điều này sẽ không cần thiết (ít nhất là nếu tôi không muốn làm suy giảm dữ liệu).

Câu hỏi: Vì vậy, tính toàn vẹn của Git mặc dù băm tất cả mọi thứ với mỗi cam kết đều ngăn chặn hoặc giúp chống lại sự thối bit?



3
Và hãy cẩn thận với các bản sao cục bộ, git cố gắng sử dụng các liên kết cứng khi bạn tạo một bản sao trên cùng một hệ thống tệp. Điều đó làm cho việc nhân bản nhanh đến mức khó tin, nhưng nếu một đối tượng bị hỏng thì cả hai nhân bản đều bị hỏng.
allo

Lưu ý rằng nếu tham nhũng chỉ xảy ra đối với một số đối tượng cổ trên một máy cụ thể, thì các đối tượng đó có nhiều khả năng có mặt trên các bản sao khác của repo, trong khi các tệp gần đây hơn (ít hơn) vẫn có thể sử dụng được. Tôi không biết làm thế nào điều này tích hợp với các tập tin gói, mặc dù.
o11c

Câu trả lời:


61

Băm của Git chỉ xảy ra tại thời điểm xác nhận được tạo và từ đó, băm được sử dụng để xác định các xác nhận. Điều này không có cách nào đảm bảo tính toàn vẹn của các tập tin. Git repos có thể bị hỏng và mất dữ liệu. Trên thực tế, git có một lệnh tích hợp để phát hiện loại mất mát này, git fsck , nhưng như tài liệu nói, bạn có trách nhiệm khôi phục mọi dữ liệu bị hỏng từ các bản sao lưu.


4
Tại sao fsckluôn luôn trông giống như một từ xấu đối với tôi ... Tôi cho rằng nếu bật lên tích cực và bạn không có một bản sao lưu có thể phù hợp mặc dù;)
CAD97

7
Các lập trình viên @ CAD97 được biết đến với những cách chơi chữ tương đối khập khiễng. Nó thực sự khá phổ biến ... Ngoài đỉnh đầu của tôi, bạn có những thứ như sh (shell), bsh (Bourne shell), và sau đó bash (Bourne shell shell) ... cái cuối cùng là sự chơi chữ khập khiễng ...
Nelson

1
@Nelson đừng quên cá
user253751

@ CAD97 Địa ngục, tên của git có thể được coi như sau đó khi nó không hoạt động đúng với bạn.
SGR

1
@ CAD97 - và đó là trước khi bạn chạy nó với các cờ như fvcctk - bởi vì - nếu bạn đang chạy nó như vậy, dữ liệu của bạn có thể đã là "fvcctk" ed. ;)
Joe

16

Phụ thuộc vào những gì bạn có nghĩa là "ngăn chặn".

(Trước hết, bit-rot là một thuật ngữ có nhiều định nghĩa. Câu hỏi này không phải là về việc mã trở nên không thể truy cập được do thiếu bảo trì .)

Nếu bạn có nghĩa là "ngăn chặn" rằng nó có khả năng sẽ phát hiện tham nhũng bằng cách phân rã bit, vâng, điều đó sẽ hoạt động. Tuy nhiên, nó sẽ không giúp khắc phục tham nhũng đó: băm chỉ cung cấp phát hiện lỗi , không sửa lỗi .

Đây thường là những gì có nghĩa là "tính toàn vẹn": Khả năng phát hiện thao tác dữ liệu trái phép / ngoài ý muốn, không phải là khả năng ngăn chặn hoặc sửa chữa nó.

Nhìn chung, bạn vẫn muốn có RAID1 cùng với các bản sao lưu (có thể được thực hiện bằng ảnh chụp nhanh ZFS hoặc tương tự, tôi không quen với ngữ nghĩa ZFS trên ảnh chụp nhanh RAID1 +), vì một số lý do:

  • nếu một đĩa bị hỏng nghiêm trọng, bạn cần RAID1 (hoặc bản sao lưu gần đây) để khôi phục dữ liệu của bạn; không sửa lỗi có thể sửa cho toàn bộ lỗi đĩa, trừ khi nó có bản sao đầy đủ của dữ liệu (RAID1). Đối với thời gian chết ngắn, về cơ bản bạn phải có RAID1.

  • nếu bạn vô tình xóa các phần hoặc toàn bộ kho lưu trữ, bạn cần một bản sao lưu (RAID1 không bảo vệ bạn vì nó ngay lập tức phản ánh sự thay đổi đối với tất cả các thiết bị)

RAID1 cấp khối (ví dụ: thông qua LVM hoặc tương tự) chỉ có hai đĩa sẽ không bảo vệ bạn khỏi sự phân rã dữ liệu thầm lặng: bộ điều khiển RAID không thể biết được hai đĩa nào chứa dữ liệu chính xác. Bạn cần thêm thông tin cho điều đó, như tổng kiểm tra các tập tin. Đây là nơi mà tổng kiểm tra ZSF và btrfs xuất hiện: chúng có thể được sử dụng (không có nghĩa là chúng được sử dụng trong các trường hợp này, tôi không biết ZFS hoặc btrfs xử lý mọi thứ ở đó như thế nào) để phân biệt cái nào trong hai đĩa giữ dữ liệu chính xác.


5
Không cần phải đi với phản chiếu nếu bạn không muốn. ZFS hỗ trợ phân loại với giá trị tương đương 1, 2 hoặc 3 ổ đĩa; và phản chiếu với số lượng ổ đĩa tùy ý (bao gồm một ổ đĩa duy nhất = không có dự phòng). Bộ lưu trữ số lượng lớn chính của tôi là ZFS với sáu ổ đĩa trong cấu hình RAIDZ2, về cơ bản là tệp RAID6 ở cấp hệ thống (loại bỏ với độ dư thừa của hai ổ đĩa). Điều này có thể phát hiện và phục hồi từ việc mất bất kỳ một trong các ổ đĩa đó cộng với các lỗi không thể sửa chữa trên một ổ đĩa nữa; hoặc mất hai ổ đĩa và không có lỗi ở nơi khác trong quá trình phục hồi; mà không mất dữ liệu Sao lưu vẫn được khuyến khích.
một CVn

1

ngăn ngừa thối bit

Không, nó không, không có cách nào cả. Không có dự phòng giống như RAID được giới thiệu bởi git. Nếu các tệp trong .gitthư mục của bạn bị bit-rot, bạn sẽ mất công cụ như bình thường.

Giúp chống thối bit?

Yyyy ... không. Nó không giúp chống lại sự thối bit, nhưng nó sẽ giúp phát hiện sự thối bit. Nhưng không có lúc nào trong quá trình sử dụng bình thường, nó sẽ làm như vậy bằng tài khoản của chính nó (rõ ràng là nó làm khi bạn kiểm tra một số đối tượng, v.v., nhưng không phải cho lịch sử của bạn). Bạn sẽ phải tạo các công việc định kỳ để tính toán lại các giá trị băm từ nội dung và so sánh chúng với các giá trị băm thực tế. Nó là khá tầm thường để làm như vậy, vì gitbăm chỉ đơn giản là băm nội dung, nó là tầm thường để tính toán lại chúng và git fscklàm như vậy cho bạn. Nhưng khi nó phát hiện bit-rot, không có gì đặc biệt là nó có thể chống lại nó. Cụ thể, khi các khối lớn hơn được tự động nén, bạn có thể sẽ phải chịu tổn thất toàn bộ nếu một bit trong một vật thể lớn hơn bị lật.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.