ตรวจสอบผลรวมของการสร้างไฟล์ใหม่


1

มีการตรวจสอบไฟล์ที่ออกแบบมาโดยเฉพาะสำหรับการกู้คืนไฟล์เดียว (ไฟล์เก็บถาวร) ที่มีข้อมูลเสียหายหรือไม่? สิ่งที่ง่ายเหมือนแฮชที่สามารถใช้กู้คืนไฟล์ได้

ฉันกำลังพยายามที่จะสำรองข้อมูลบางอย่างของบ้านและไฟล์ธุรกิจ (ไม่ใช่ไฟล์มีเดีย) โดยการบีบอัดพวกเขาและออกเดทพวกเขา ไฟล์เก็บถาวรที่ใหญ่ที่สุดในปัจจุบันทำงานประมาณ 250GB หลังจากสร้างไฟล์เก็บถาวรแล้วฉันได้ทำการตรวจสอบ MD5 กับมันแล้วถ่ายโอนไฟล์เก็บถาวรไปยังไดรฟ์อื่นจากนั้นใช้ MD5 เพื่อตรวจสอบว่าไฟล์ถูกถ่ายโอนอย่างถูกต้องและเก็บ MD5 แฮชด้วยคลังเก็บสำหรับการตรวจสอบในอนาคต ฉันวางแผนที่จะพยายามสำรองข้อมูลสำรองเหล่านี้ปีละ 1-2 ครั้งและเก็บไว้ใน HDD และเทปตามที่งบประมาณอนุญาต

รูปแบบไฟล์เก็บถาวรปัจจุบันคือ "Zipx" ที่มีการตั้งค่าสูงสุด

เมื่อพิจารณาจากปริมาณข้อมูลประมาณ 1-2 TB ต่อปีในปัจจุบันฉันมองว่ามีความเสียหายของข้อมูลที่จะจัดการ โดยเฉพาะอย่างยิ่งไฟล์เหล่านี้อยู่ในไดรฟ์ผู้บริโภค เพิ่มในการสำรองข้อมูลที่จบลงด้วยการถ่ายโอนจากจากไดรฟ์ไปยังไดรฟ์ไปยังเทปและกลับมาอีกครั้งว่าไฟล์เก็บถาวรขนาด 250GB เริ่มต้นนั้นสามารถเขียนและอ่านข้อมูลได้หลายเทราไบต์ และการตรวจสอบ MD5 หลังจากการถ่ายโอนแต่ละครั้งจะเพิ่มจำนวนมากเนื่องจากการตรวจสอบ MD5 คือ I / O จำกัด การตรวจสอบ MD5 ในการเก็บถาวร 250GB ใช้เวลานานโดยการเก็บถาวรทั้งหมดและ MD5s ถูกผูกไว้เพื่อไม่ได้รับการตรวจสอบบ่อยเท่าที่พวกเขาต้องการ

ดังนั้นสมมติฐานคือ:

  1. ข้อมูลจะเสียหาย
  2. เราจะไม่รู้เกี่ยวกับมันจนกว่าจะเกิดขึ้นจริง
  3. เนื่องจากข้อ จำกัด ด้านงบประมาณและการขาด "ภารกิจวิกฤติ" เราจึงไม่มีสำเนาสำรองถาวรที่เหมือนกันหลายชุดเท่านั้นมีการทำซ้ำข้อมูลสำรองต่างกัน
  4. เราต้องการลดจำนวนสำเนาสำรองของเราให้น้อยที่สุดในขณะที่ป้องกันความเสียหายของข้อมูล
  5. หากไฟล์หนึ่งหรือสองไฟล์ในไฟล์เก็บถาวรเสียหายและเราสูญเสียข้อมูลเมื่อเราพยายามกู้คืน ชีวิตจะดำเนินต่อไป นี่ไม่ใช่ภารกิจที่สำคัญ
  6. คลังข้อมูลเป็นข้อมูลสำรองสำรองและหวังว่าจะไม่ใช้งานมากกว่าสองสามครั้งในทศวรรษหรือน้อยกว่า การสำรองข้อมูลสดไม่มีการบีบอัด

ด้วยสมมติฐานเหล่านี้เราจะป้องกันความเสียหายของข้อมูลได้อย่างไร

การเก็บแฮช MD5 อนุญาตให้ใครบางคนเท่านั้นที่รู้ว่าข้อมูลปัจจุบันตรงกับข้อมูลดั้งเดิมหรือไม่ ไม่อนุญาตให้บุคคลใดบุคคลหนึ่งหรือช่วยเหลือในทางใดทางหนึ่งเพื่อซ่อมแซมข้อมูล นั่นคือถ้าฉันต้องการเรียกคืนจากการสำรองข้อมูลและมีข้อมูลเสียหายในไฟล์หรือไฟล์ที่ฉันต้องการ MD5 นั้นไร้ประโยชน์อย่างมีประสิทธิภาพ

ดังนั้นจะมีการตรวจสอบที่ออกแบบมาเป็นพิเศษเพื่อไม่เพียง แต่ตรวจสอบข้อมูล แต่ซ่อมแซมด้วยหรือไม่ ชอบ ECC สำหรับหน่วยความจำ แต่สำหรับไฟล์?

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

ปรับปรุง: ดูเหมือนว่า บางรูปแบบเก็บถาวร ทำการสนับสนุนการกู้คืนแม้ว่ากระแสหลักเดียวเท่านั้นที่ดูเหมือนว่าจะเป็น WinRAR มันจะเป็นไปไม่ได้ที่จะถูกล็อคในรูปแบบเพียงอย่างเดียวสำหรับตัวเลือกนี้เนื่องจากรูปแบบที่ได้รับความนิยมมากที่สุด (75% +/- ในรายการที่เชื่อมโยง) ดูเหมือนจะไม่สนับสนุนการกู้คืน


ECC เพิ่มความซ้ำซ้อนในขณะที่คอมเพรสเซอร์มีแนวโน้มที่จะลดลงเหลือน้อยที่สุด ข้อผิดพลาด 1 บิตในไฟล์บีบอัดมีแนวโน้มที่จะเปลี่ยนแปลงหลายไฟล์ เมื่อ MD5 แตกต่างกันข้อใดผิด? :)
levif

ชนิดของจุดของฉัน นี่คือเหตุผลที่ฉันกำลังมองหาบางอย่างที่สามารถสร้างข้อมูลภายนอกการเก็บถาวรเพื่อหลีกเลี่ยงปัญหาที่เกิดขึ้นกับไฟล์เก็บถาวรและไฟล์ดิบ มันจะต้องทำงานกับระดับบิตกับระดับไฟล์ ดูเหมือนว่าจะใช้การแก้ไขข้อผิดพลาด Reed-Solomon แต่ไม่มีอะไรที่ฉันพบว่าใช้งานง่ายใช้งานง่ายยืนยาวและ / หรือพร้อมใช้งาน ทุกอย่างดูเก่าหรือไม่ได้รับการสนับสนุนซับซ้อน ฯลฯ
Damon

คำตอบ:


1

ฉันสร้างชุดเครื่องมือสำหรับจุดประสงค์นี้โดยใช้ Reed-Solomon และโทรมา pyFileFixity ( ดูที่นี่สำหรับรายการเครื่องมือรวม ) ส่วนใหญ่ใช้งานได้จาก commandline แต่ให้ทดลองใช้ GUI หากคุณต้องการทดลองใช้จริงๆ --gui ที่บรรทัดคำสั่ง)

ฉันทำเครื่องมือนี้ให้เป็นโอเพนซอร์สและเชื่อถือได้มันเป็นหน่วยทดสอบที่ 83% (ความครอบคลุมสาขา) ห้องสมุดทั้งหมดได้รับการแสดงความคิดเห็นอย่างกว้างขวางและฉันพัฒนาตัวแปลงสัญญาณ Reed-Solomon ด้วยตัวเองทั้งหมดใน Python ล้วน (ดังนั้นโครงการทั้งหมดเป็นแบบสแตนด์อโลนไม่มีห้องสมุดภายนอก) ดังนั้นจึงเป็นข้อพิสูจน์ในอนาคต (ตราบใดที่คุณมี Python 2 ล่าม แต่ก Python 3 เวอร์ชั่นที่ใช้งานอยู่ ) มันควรจะผลิตพร้อมฉันใช้มันเป็นประจำและฉันมี ตอบรับเชิงบวกหลายประการ และข้อเสนอแนะเพิ่มเติมใด ๆ ยินดีมาก!

รูปแบบ ecc ที่ฉันคิดค้นควรมีความเสถียรและยืดหยุ่นต่อความเสียหายเนื่องจากเป็นไปได้ที่จะแก้ไขไฟล์ ecc (ดู repair_ecc.py และไฟล์ดัชนี) โครงการจะให้ทุกอย่างแก่คุณในการดูแลข้อมูลของคุณและเพื่อทดสอบรูปแบบการดูแลของคุณ (ดู filetamper.py และ resilency_tester.py คุณสามารถทดสอบรูปแบบการดูแลทั้งหมดโดยใช้ไฟล์ที่คล้ายกับ makefile ที่อธิบายรูปแบบการดูแล การแปลงไฟล์, การบีบอัดไฟล์ซิป, การคำนวณ ecc ของ pyFileFixity หรือรูปแบบการคำนวณ ecc อื่น ๆ และทดสอบว่าท่อของคุณสามารถทนต่อความเสียหายของข้อมูลที่สุ่มได้หรือไม่)

อย่างไรก็ตามข้อ จำกัด คือการคำนวณจะใช้เวลาค่อนข้างนานอัตราปัจจุบันอยู่ที่ ~ 1MB / s แม้ว่าฉันจะมีแผนที่จะใช้การขนานเพื่อเพิ่มความเร็วเป็นสี่เท่า ถึงกระนั้นคุณสามารถเห็นว่านี่เป็นข้อ จำกัด และโชคไม่ดีที่ฉันไม่คิดว่าจะมีการแก้ไขข้อผิดพลาดที่เป็นผู้ใหญ่ได้เร็วขึ้น (Reed-Solomon นั้นค่อนข้างเป็นผู้ใหญ่เพียงตัวเดียวที่ LDPC กำลังมา แต่ยังไม่มี)

อีกทางเลือกหนึ่งถ้าคุณไม่ต้องการให้แน่ใจว่าความสมบูรณ์ของข้อมูลทั้งหมด แต่เป็นความสมบูรณ์ของข้อมูลส่วนใหญ่คือการใช้อัลกอริทึมการเก็บถาวรที่ไม่มั่นคงเช่น ZIP DEFLATE และคำนวณ ECC แฮชเฉพาะส่วนหัวโดยใช้ header_ecc.py ( ระบุไว้ใน pyFileFixity) วิธีนี้จะช่วยให้มั่นใจได้ว่าไฟล์เก็บถาวรของคุณจะเปิดได้ตลอดเวลาและข้อมูลภายในส่วนใหญ่จะไม่สามารถบีบอัดได้ แต่จะไม่สามารถแก้ไขข้อมูลทั้งหมดได้

นอกจากนี้ยังมี รูปแบบไฟล์เก็บถาวร DAR ซึ่งเป็นทางเลือกแทน TAR ซึ่งอนุญาตให้บีบอัดในรูปแบบที่ไม่แข็ง (ดังนั้นจึงไม่สามารถบีบอัดส่วนที่เก็บถาวรที่เสียหายได้บางส่วน) และคำนวณแฮชการกู้คืนตาม PAR2 และยังมีการแยกแคตตาล็อก เป็นการสำรองข้อมูล) แต่จริงๆแล้วฉันไม่คิดว่าคุณจะได้รับความเร็วมากนักกับ PAR2 และคุณจะสูญเสียความซ้ำซ้อนมาก (รูปแบบ PAR2 นั้นขึ้นอยู่กับ Reed-Solomon ด้วย แต่มีข้อ จำกัด มากมายที่ห้องสมุดของฉันทำ ไม่ได้และ PAR2 ก็เหมือนคนตาย ... )

ดังนั้นคุณต้องไตร่ตรองว่าจะต้องเสียค่าใช้จ่ายมากขึ้นในการทำซ้ำข้อมูล (พื้นที่เก็บข้อมูล) หรือเพื่อคำนวณแฮช ecc (เวลา CPU และปริมาณไฟฟ้า) ในแง่ของการจัดเก็บข้อมูล ecc hash สามารถมีขนาดที่คุณต้องการ แต่โดยปกติแล้ว 20% ~ 30% จะมีการป้องกันจำนวนมาก (ดิสก์ออปติคัลมีเพียง 5% ฮาร์ดไดรฟ์มีน้อย .

หากคุณพิจารณาการทำซ้ำเป็นทางเลือกที่เหมาะสมคุณยังสามารถแก้ไขข้อมูลของคุณได้หากคุณมั่นใจว่าคุณทำสำเนาที่เก็บถาวรอย่างน้อย 3 ชุด จากนั้นคุณสามารถใช้การโหวตเสียงส่วนใหญ่ในการกู้คืนจากความเสียหายของข้อมูล (pyFileFixity ให้สคริปต์ python เพื่อทำมัน: replication_repair.py) นี่ไม่ใช่ความยืดหยุ่นเท่ากับโค้ด ecc แม้ว่าอัตราความยืดหยุ่นจะเท่ากัน: 3 ชุดให้อัตราความยืดหยุ่น 33% (เช่นสำเนา 2 ชุดที่ซ้ำซ้อนใน 3 หารด้วย 2 นี่คือขีด จำกัด ทางทฤษฎี) แต่ หน้าต่าง การป้องกันมีเพียง 1 "ecc" (แทนที่จะเป็น "อะไหล่") เป็นเวลา 3 ไบต์ในขณะที่รหัส ecc จริงโดยใช้ pyFileFixity หรือ PAR2 หน้าต่างจะสูงถึง 255 ไบต์: คุณปกป้อง 255 ไบต์โดยกำหนด 168 ไบต์เป็น ecc ไบต์ ( ดังนั้นคุณจึงมี (255-168) = 87 ไบต์ป้องกันโดย 168 ecc ไบต์ ณ จุดใด ๆ ในไฟล์ใดก็ได้) แน่นอนอัตราความยืดหยุ่น = 0.5 * อัตราส่วนของ ecc ไบต์ดังนั้นคุณต้องมีอัตราส่วน 66% ecc ไบต์เพื่อรับอัตราความยืดหยุ่น 33% แต่ท้ายที่สุดคุณมีรูปแบบการทำซ้ำที่ใช้ขนาด 2x ของการเก็บถาวรดั้งเดิมเพื่อให้ได้หน้าต่างที่มีการป้องกัน 1/3 ไบต์ในขณะที่รูปแบบ ecc ใช้พื้นที่เพิ่มเติมเพียง 0.66 เท่าเพื่อให้ได้รับการปกป้อง 87/255 ไบต์ โดยสังหรณ์ใจก็หมายความว่า:

  • สำหรับรูปแบบการทำซ้ำหากมากกว่า 1 ไบต์เสียหายไบต์จะหายไป
  • ในขณะที่รูปแบบ ecc คุณจะต้องได้รับความเสียหายมากกว่า 87 ไบต์ เป็นแถวเป็นแนว ที่จะสูญเสียพวกเขา หากไบต์ที่เสียหายกระจายไปทั่วทั้งไฟล์เก็บถาวรก็ไม่ใช่ปัญหาเนื่องจากขีด จำกัด 87 ไบต์ต่อหน้าต่าง 255 ไบต์ติดต่อกัน

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


นั่นช่างยอดเยี่ยม คุณยอดเยี่ยม ฉันยอมแพ้แล้วลองหันมาลองใช้ winRAR และมีแนวโน้มจะแยกพวกเขาออกไปเพราะมันทำสิ่งที่เราต้องการในทางเทคนิค แม้ว่าฉันจะขอขอบคุณที่คุณถอดปลั๊กครั้งสุดท้ายสำหรับ ECC sceme กับการทำสำเนา ฉันใหญ่ง่าย เป็นที่ยอมรับว่าเราจะเริ่มสร้างห้องสมุดเทปในไม่ช้า (ต้องใช้เทปไดรฟ์) และจะทำการ "ทำซ้ำ" มากกว่าและเก็บถาวรน้อยลง แต่สำหรับบางสิ่งมันก็ดีที่มีตัวเลือกการจัดเก็บถาวรที่แข็งแกร่งพอที่จะไม่ต้องการการทำซ้ำโดยพลการ
Damon

@Damon ดีใจที่คุณพบคำตอบของฉันมีประโยชน์ :) เกี่ยวกับ WinRAR ระวังตัว รูปแบบ. rar เป็นของแข็งเท่านั้น ดังนั้นนี่หมายความว่าหากการกู้คืนไม่สำเร็จคุณจะไม่สามารถแยกข้อมูลใด ๆ ออกจากไฟล์เก็บถาวรได้! คุณอาจลอง DAR ซึ่งเป็นรูปแบบเดียวที่ฉันรู้ว่ารองรับทั้งแบบไม่แข็งและ ecc (ดังนั้นหากการกู้คืนล้มเหลวคุณยังสามารถแยกสิ่งที่คุณสามารถทำได้จากไฟล์เก็บถาวรโดยทั่วไปเรียกว่า "การแยกบางส่วน") แต่สุดท้าย เวลาที่ฉันลอง DAR มันค่อนข้างซับซ้อนเพื่อให้มันทำงาน: /
gaborous

ขอบคุณสำหรับความเข้าใจ ดูเหมือนว่าโซลูชันจริงจะทำซ้ำเพื่อความเรียบง่ายและเก็บถาวรในกรณีที่จำเป็น ฉันจะดูเป็น DAR อย่างแน่นอน ขอบคุณ!
Damon

WinRAR ที่ฉันใช้มีตัวเลือกสำหรับไฟล์เก็บถาวร แต่ไม่ได้ตรวจสอบตามค่าเริ่มต้น นอกจากนี้ยังมีตัวเลือกในการเพิ่มบันทึกการกู้คืนในทางทฤษฎีเพื่อป้องกันการทุจริต ฉันแค่ใช้การตั้งค่าการบีบอัดสูงสุดที่มีอยู่ในบันทึกการกู้คืน ฉันไม่ชอบถูกล็อคเข้ากับซอฟต์แวร์ที่เป็นกรรมสิทธิ์หากฉันไม่ต้องการ
Damon

@Damon ใช่ฉันคิดว่านี่เป็นกลยุทธ์ที่ดีการทำสำเนารวดเร็วและมีความสามารถในการซ่อมแซมรวมถึงมันจะบังคับให้คุณจัดเก็บบนสื่อต่าง ๆ ดังนั้นมันดี หากคุณต้องการการปกป้องแบบเลเยอร์เพิ่มเติมโดยไม่มีค่าใช้จ่ายคุณสามารถใช้ pyFileFixity header_ecc.py subtool เพื่อป้องกันไบต์มายากลของไฟล์ของคุณ นี่ควรจะเร็วพอที่จะคำนวณ (เพราะคุณจะป้องกันเฉพาะส่วนหัวดังนั้น ~ 1KB / ไฟล์) และจะให้แน่ใจว่าไฟล์ของคุณสามารถอ่านได้เสมอ (แม้ว่าจะเสียหายอย่างน้อยคุณจะไม่ได้รับไฟล์ "ไม่ใช่ไฟล์เก็บถาวร "ข้อผิดพลาดถ้าคุณพยายามเปิดหลังจากความเสียหาย)
gaborous
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.