Git ป้องกันการเสื่อมของข้อมูลหรือไม่


40

ฉันอ่านว่า ZFS และ Btrfs ใช้ checksums เพื่อป้องกันการเสื่อมสภาพของข้อมูลและฉันอ่านว่า Git มีความซื่อตรงโดยการทำทุกอย่างด้วยการทำสัญญา

ฉันจะใช้เซิร์ฟเวอร์ Git บน Linux NAS ที่มี Btrfs RAID 1 สำหรับจัดเก็บ แต่ถ้า Git มีความสมบูรณ์ฉันคิดว่ามันไม่จำเป็นเลย (อย่างน้อยก็ถ้าป้องกันการเสื่อมสภาพของข้อมูลก็เป็นสิ่งที่ฉันต้องการ)

คำถาม: ดังนั้นความสมบูรณ์ของ Git แม้ว่าการทำทุกอย่างจะมีการป้องกันหรือช่วยป้องกันการเน่าหรือไม่?



3
และระวังการลอกแบบโลคอล git พยายามใช้ฮาร์ดลิงก์เมื่อคุณสร้างโคลนบนระบบไฟล์เดียวกัน ทำให้การโคลนเร็วอย่างไม่น่าเชื่อ แต่หากวัตถุหนึ่งได้รับความเสียหายทั้งสองโคลนจะเสียหาย
อัลโล

โปรดทราบว่าหากความเสียหายเกิดขึ้นเฉพาะกับวัตถุโบราณบางอย่างในเครื่องที่กำหนดวัตถุเหล่านั้นมีแนวโน้มที่จะปรากฏในโคลนอื่น ๆ ของ repo ในขณะที่ไฟล์ล่าสุด (น้อยกว่า) อาจยังคงใช้งานได้ ฉันไม่ทราบว่าวิธีนี้จะทำงานร่วมกับไฟล์แพ็คได้อย่างไร
o11c

คำตอบ:


61

การแฮชของ Git จะเกิดขึ้นในเวลาที่มีการคอมมิทเท่านั้นและจากนั้นจะมีการใช้แฮชเพื่อระบุคอมมิท สิ่งนี้ไม่ช่วยให้มั่นใจได้ถึงความสมบูรณ์ของไฟล์ repos Git อาจเสียหายและสูญเสียข้อมูล ในความเป็นจริง git มีคำสั่งในตัวเพื่อตรวจสอบการสูญเสียชนิดนี้git fsckแต่ตามที่เอกสารระบุไว้คุณต้องรับผิดชอบในการกู้คืนข้อมูลที่เสียหายจากการสำรองข้อมูล


4
ทำไมfsckดูเหมือนคำไม่ดีกับฉันเสมอ ... ฉันคิดว่าถ้าผลบวกและคุณไม่มีการสำรองข้อมูลที่อาจเหมาะสม;)
CAD97

7
@ CAD97 โปรแกรมเมอร์เป็นที่รู้จักกันค่อนข้างเล่นอ่อนแอเหล่านี้ มันค่อนข้างธรรมดาจริงๆ ... จากส่วนบนของหัวคุณมีสิ่งต่าง ๆ เช่น sh (shell), bsh (Bourne shell), และ bash (Bourne shell อีกครั้ง) ... คนสุดท้ายที่เป็นคนอ่อนแอ ...
เนลสัน

1
@Nelson อย่าลืมปลา
user253751

@ CAD97 Hell ชื่อของ git นั้นสามารถถูกพิจารณาได้ในตอนนั้นเมื่อมันไม่เหมาะกับคุณ
SGR

1
@ CAD97 - และนั่นคือก่อนที่คุณจะรันด้วยค่าสถานะเช่น fvcctk - เพราะ - หากคุณใช้งานเช่นนี้ข้อมูลของคุณอาจเป็น "fvcctk" ed ;)
โจ

16

ขึ้นอยู่กับสิ่งที่คุณหมายถึงโดย "ป้องกัน"

(ก่อนอื่น bit-rot เป็นคำที่มีหลายคำจำกัดความคำถามนี้ไม่เกี่ยวกับโค้ดที่ไม่สามารถเรียกใช้ได้เนื่องจากการขาดการบำรุงรักษา )

หากคุณหมายถึงโดย "ป้องกัน" ว่ามีแนวโน้มที่จะตรวจพบความเสียหายจากการสลายตัวของบิตใช่ว่าจะทำงาน แต่มันจะไม่ช่วยในการแก้ไขความเสียหายที่: hashes เพียงให้ข้อผิดพลาดการตรวจสอบไม่ได้แก้ไข

โดยทั่วไปนี่คือความหมายของ "ความซื่อสัตย์": ความเป็นไปได้ในการตรวจจับการใช้ข้อมูลโดยไม่ได้รับอนุญาต / ไม่ได้ตั้งใจไม่เป็นไปได้ที่จะป้องกันหรือแก้ไข

โดยทั่วไปคุณยังคงต้องการ RAID1 พร้อมกับการสำรองข้อมูล (อาจนำไปใช้กับ ZFS snapshot หรือคล้ายกันฉันไม่คุ้นเคยกับความหมาย ZFS บน RAID1 + snapshots ด้วยเหตุผลหลายประการ:

  • หากดิสก์ล้มเหลวอย่างร้ายแรงคุณต้องมี RAID1 (หรือการสำรองข้อมูลล่าสุด) เพื่อกู้คืนข้อมูลของคุณ ไม่มีการแก้ไขข้อผิดพลาดที่สามารถแก้ไขได้สำหรับดิสก์ที่ล้มเหลวทั้งหมดเว้นแต่จะมีสำเนาข้อมูลเต็มรูปแบบ (RAID1) ในช่วงเวลาสั้น ๆ คุณต้องมี RAID1 เป็นหลัก

  • หากคุณลบบางส่วนหรือพื้นที่เก็บข้อมูลทั้งหมดโดยไม่ได้ตั้งใจคุณต้องมีการสำรองข้อมูล (RAID1 ไม่ได้ปกป้องคุณเนื่องจากมันสะท้อนถึงการเปลี่ยนแปลงในทุกอุปกรณ์ทันที)

RAID1 ระดับบล็อก (เช่นผ่าน LVM หรือคล้ายกัน) ที่มีดิสก์เพียงสองแผ่นในตัวมันเองจะไม่ปกป้องคุณจากการสลายตัวของข้อมูลอย่างเงียบ ๆ แม้ว่าคอนโทรลเลอร์ RAID ไม่สามารถรู้ได้ว่าดิสก์ตัวใดในสองตัวที่มีข้อมูลที่ถูกต้อง คุณต้องการข้อมูลเพิ่มเติมสำหรับสิ่งนั้นเช่นเช็คซัมผ่านไฟล์ นี่คือที่ ZSF และ btrfs checksums มาใน: พวกเขาสามารถใช้ (ซึ่งไม่ได้ที่จะบอกว่าพวกเขาจะใช้ในกรณีนี้ผมไม่ทราบวิธี ZFS หรือ btrfs จัดการกับสิ่งที่มี) เพื่อให้เห็นความแตกต่างที่ของทั้งสองดิสก์ถือ ข้อมูลที่ถูกต้อง


5
ไม่จำเป็นต้องไปกับการมิเรอร์ถ้าคุณไม่ต้องการ ZFS รองรับการสตริปที่มีพาริตี้ 1, 2 หรือ 3 ไดรฟ์ และการมิรเรอร์ด้วยจำนวนไดรฟ์โดยพลการ (รวมถึงไดรฟ์เดียว = ไม่มีความซ้ำซ้อน) ที่เก็บข้อมูลหลักของฉันคือ ZFS ที่มีหกไดรฟ์ในการกำหนดค่า RAIDZ2 ซึ่งโดยทั่วไปแล้วเป็นระบบไฟล์ระดับ RAID6 (การสตริปพร้อมกับความซ้ำซ้อนของไดรฟ์สองตัว) สิ่งนี้สามารถตรวจจับและกู้คืนจากการสูญเสียไดรฟ์ตัวใดตัวหนึ่งรวมทั้งข้อผิดพลาดที่ไม่สามารถแก้ไขได้อีกต่อไป หรือสูญเสียไดรฟ์สองตัวและไม่มีข้อผิดพลาดที่อื่นระหว่างการกู้คืน โดยไม่สูญเสียข้อมูลใด ๆ ขอแนะนำให้สำรองข้อมูล
CVN

1

ป้องกันบิตเน่า

ไม่มันไม่มีทางเลย ไม่มีความซ้ำซ้อนแบบ RAID ที่แนะนำโดย git หากไฟล์ใน.gitไดเรกทอรีของคุณประสบกับการเน่าบิตคุณจะสูญเสียสิ่งต่าง ๆ ตามปกติ

ช่วยป้องกันเน่าบิต?

ปปปป ... ไม่มี มันไม่ได้ช่วยป้องกันการเกิดบิตเน่า แต่มันจะช่วยในการตรวจสอบบิตเน่า แต่ไม่มีประโยชน์ในระหว่างการใช้งานปกติโดยใช้บัญชีของตัวเอง (แน่นอนว่ามันทำเมื่อคุณตรวจสอบวัตถุบางอย่างและอื่น ๆ แต่ไม่ใช่สำหรับประวัติของคุณ) คุณจะต้องสร้างงาน cron เพื่อคำนวณแฮชจากเนื้อหาและเปรียบเทียบกับแฮชจริง มันค่อนข้างง่ายที่จะทำเช่นนั้นเมื่อgitแฮ็คนั้นเป็นเพียงแค่เนื้อหาที่แฮชมันเป็นเรื่องไม่สำคัญที่จะคำนวณใหม่และgit fsckทำเพื่อคุณ แต่เมื่อมันตรวจจับบิต - เนทไม่มีสิ่งใดที่สามารถทำกับมันได้ โดยเฉพาะอย่างยิ่งเมื่อชิ้นส่วนที่มีขนาดใหญ่ถูกบีบอัดโดยอัตโนมัติคุณอาจจะสูญเสียชิ้นส่วนทั้งหมดหากมีการพลิกบิตของวัตถุขนาดใหญ่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.