ฉันจะสร้างและตรวจสอบไฟล์ซัมซุงได้อย่างมีประสิทธิภาพได้อย่างไร


12

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

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


ในฐานะที่เป็นคำตอบให้ทราบสิ่งสำคัญคือการแยกประเภทของภัยคุกคามที่คุณกำลังบรรเทาและตรวจสอบตาม ห้องสมุดก่อนหน้านี้และคำตอบล้นกองวิทยาศาสตร์ข้อมูลที่ฉันมีส่วนร่วมอาจเป็นที่สนใจแม้ว่าส่วนใหญ่เกี่ยวกับ HDFS
Andy Jackson

คำตอบ:


13

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

ZFS ยังสามารถกู้คืนข้อมูลที่ล้มเหลวในการตรวจสอบแฮชโดยอัตโนมัติโดยใช้ความซ้ำซ้อนใด ๆ ที่คุณตั้งไว้ไม่ว่าจะเป็นพาริตีแบบ 5 สไตล์ไดรฟ์มิเรอร์หรือสำเนาที่ซ้ำกัน จากข้อมูลใด ๆ ที่คุณเขียน) นอกจากนี้ยังเก็บแฮชในแผนผัง Merkle โดยที่ค่าแฮชของไฟล์ขึ้นอยู่กับแฮชของบล็อกการแฮชของรายการไดเรกทอรีขึ้นอยู่กับค่าแฮชของไฟล์และไดเรกทอรีที่มีแฮชของระบบไฟล์ขึ้นอยู่กับ ในแฮชของไดเรกทอรีราก ฯลฯ

คุณจะพบว่ากระบวนการนั้นถูก จำกัด ด้วยความเร็วของดิสก์ของคุณไม่ใช่ด้วยความเร็วของ CPU ของคุณ

นอกจากนี้อย่าลืมคำนึงถึงเบอร์ของดิสก์ของคุณด้วย มันเป็นเพียงจานหมุนสนิมเท่านั้น ไดรฟ์ระดับผู้บริโภคมีอัตราข้อผิดพลาด 1 บิตที่อ่านไม่ถูกต้องสำหรับทุกๆ 10 ^ 14 บิตที่อ่านซึ่งทำงานได้ถึง 1 บิตจากทุก 11 เทราไบต์ที่คุณอ่าน หากคุณมีชุดข้อมูล 11 เทราไบต์และคุณคำนวณแฮชของไฟล์ทุกไฟล์ในนั้นคุณจะต้องทำการตรวจสอบหนึ่งใน checksums เหล่านั้นอย่างไม่ถูกต้องและเสียหายอย่างถาวรหนึ่งบล็อกของหนึ่งในไฟล์ในชุดข้อมูล อย่างไรก็ตาม ZFS รู้ถึงความยุ่งเหยิงของทุกบล็อคที่เขียนไปยังดิสก์ทุกตัวในพูลของคุณและดังนั้นจึงรู้ว่าบล็อกใดหายไป จากนั้นสามารถใช้ความซ้ำซ้อน (พาริตี้, มิรเรอร์หรือสำเนาพิเศษ) ในกลุ่มของคุณเพื่อเขียนข้อมูลในบล็อกนั้นใหม่ด้วยค่าที่ถูกต้อง

เบ็นนำจุดที่ดีในความคิดเห็นอย่างไรก็ตาม ZFS ไม่เปิดเผยค่าแฮชที่คำนวณให้กับผู้ใช้ดังนั้นข้อมูลที่เข้าหรือออกจากระบบ ZFS ควรมาพร้อมกับแฮช ฉันชอบวิธีที่ Internet Archive ทำเช่นนี้ด้วยไฟล์ xml ที่มาพร้อมกับทุกรายการในไฟล์เก็บถาวร ดูhttps://ia801605.us.archive.org/13/items/fakebook_the-firehouse-jazz-band-fake-book/fakebook_the-firehouse-jazz-band-fake-book_files.xmlเป็นตัวอย่าง


1
คุณเอาชนะฉันไป ฉันจะแนะนำระบบที่ใช้แฮชด้วย แฮชไฟล์แต่ละไฟล์แฮชไฟล์แฮช (+ แฮชย่อยย่อย) สำหรับแฮชไดเรกทอรี ฯลฯ การแลกเปลี่ยนคือ CPU / IO เทียบกับความน่าจะเป็นข้อผิดพลาด Checksum / CRC มีราคาถูก แต่โอกาสที่จะเกิดข้อผิดพลาดเพิ่มขึ้นตามขนาด ดังนั้นแฮชทั่วไป แต่เริ่มต้นด้วยความน่าจะเป็นที่ต่ำกว่าของข้อผิดพลาด
The Diamond Z

3
แม้ว่าคุณจะเรียกใช้ระบบไฟล์เช่น ZFS (Btrfs ก็มีฟังก์ชั่นที่คล้ายกัน แต่ยังอยู่ในการพัฒนาอย่างมากและยังไม่พร้อมสำหรับการใช้งานจริงในขณะนี้) คุณจะต้องดำเนินการ "ขัด" เป็นระยะเพื่อให้แน่ใจว่าข้อมูล อ่านและตรวจสอบกับ checksums หรือ hash เพียงแค่คำนวณผลรวมตรวจสอบแล้วไม่ทำอะไรกับมันจนกว่าคุณจะต้องเข้าถึงข้อมูลนั้นอาจเลวร้ายยิ่งกว่าไร้ค่า
CVn

1
ใช่นั่นเป็นจุดที่ดี การขัดครั้งสุดท้ายของฉันแก้ไขข้อมูล 2 กิโลไบท์ที่ไม่ดี นั่นคือสี่ช่วงตึกกระจายไปทั่วห้าไดรฟ์! ยิ่งคุณอ่านข้อมูลที่มีความยาวมากขึ้นเท่าใดความน่าจะเป็นที่คุณจะสะสมข้อผิดพลาดมากพอในไฟล์เดียวจะไม่สามารถกู้คืนได้

1
การรัน userspace md5sum มากกว่า 150 GB ของข้อมูลบนพีซีที่บ้านของฉันใช้เวลาประมาณ 40 นาทีในการวอลล์ล็อค, I / O-bound ล้วนๆ ด้วยขนาดที่เพิ่มขึ้น 100 เท่าเราได้รับการตรวจสอบ 15 TB บนที่ร่มภายใต้สามวันสำหรับฮาร์ดแวร์ผู้บริโภค แน่นอนฉันจะพิจารณาว่าทำได้แม้จะอยู่ในที่เก็บถาวรขนาดใหญ่พร้อมด้วยช่วงเวลาที่เลือกไว้อย่างเหมาะสม
CVn

3
ZFS คำนวณ checksums สำหรับบล็อกไม่ใช่ไฟล์หรือ bitstreams ไม่ใช่หรือ? ในขณะที่ ZFS แก้ปัญหาการคำนวณ แต่ดูเหมือนว่ามนุษย์สามารถตรวจสอบได้น้อยกว่าและไม่ได้ผลิตข้อมูล fixity ที่พกพาได้ไม่ว่าระบบไฟล์จะเป็นอะไรก็ตาม

6

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

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

ด้วยวิธีนี้ข้อมูลของคุณมีแนวโน้มที่จะอยู่รอด


นั่นทำให้รู้สึกอย่างแน่นอน ฉันแค่สงสัยว่ากลยุทธ์ใดที่มีอยู่สำหรับการจัดการเพลงที่มีราคาแพงในการสร้างและตรวจสอบเช็คซัมนับแสน

4

บางทีนี่อาจเป็นเวลาที่ดีในการนำBagItมาใช้ นี่เป็นรูปแบบไฟล์บรรจุภัณฑ์ที่เรียบง่าย แต่ทรงพลังสำหรับการเก็บถาวรการเก็บรักษาระยะยาวและการถ่ายโอนวัตถุดิจิทัล ผู้ใช้รวมถึง Library of Congress และ California Digital Library

เครื่องมือ BagIt (มีอยู่ในหลายภาษาโปรแกรม) ทำให้ไฟล์ของคุณอยู่ในโครงสร้างไดเรกทอรีที่แน่นอนและทำการตรวจสอบ / hashing ให้คุณ นั้นคือทั้งหมด.

PS: แน่นอนเครื่องมือ BagIt ยังสามารถตรวจสอบกระเป๋ากับเช็คซัม / แฮชที่รวมอยู่และคุณสามารถเพิ่มข้อมูลเมตาลงในกระเป๋าได้ แต่มันซับซ้อนพอ ๆ กับที่ถุงจะได้รับ


1

คำตอบนี้คือการรวมกันของที่ @ lechlukaszและ @ db48xรวมถึงบางประเด็นที่แสดงความคิดเห็นรวมถึงความคิดของฉันเองด้วย

เส้นทางแบบง่าย ๆ คือการรวมระบบไฟล์เข้ากับเมทาดาทาที่แยกกัน

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

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

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

ด้วยฮาร์ดแวร์ของทุกวันนี้และสิ่งใดที่เป็นประโยชน์สำหรับการจัดเก็บข้อมูลจำนวนมาก (การหมุนดิสก์ฮาร์ดดิสก์เมื่อเทียบกับ solid-state disk / SSDs) แม้แต่อัลกอริทึมการแฮชที่ซับซ้อนเช่น SHA1 จะเป็น I / O-bound เป็นส่วนใหญ่ ข้อมูลที่ถูกแฮชจะเป็นหน้าที่ของความเร็วในการอ่านของระบบจัดเก็บข้อมูลมากกว่าความสามารถของตัวประมวลผลของคอมพิวเตอร์ในการคำนวณแฮช ฉันทำการทดลองใช้การแปลงข้อมูล MD5 พื้นที่ผู้ใช้มากกว่า 150 GB ของข้อมูลในปี 2012 ว่าเป็นพีซีสำหรับผู้บริโภคระดับกลางและเสร็จสิ้นหลังจากออกกำลังกายดิสก์โดยทั่วไปโดยไม่หยุดชะงักเป็นเวลาประมาณ 40 นาที การเพิ่มตัวเลขเหล่านี้ให้สูงขึ้น 100 เท่าคุณจะได้รับ MD5 hash ของคอลเล็กชัน 15 TB ในเวลาประมาณสามวันบนฮาร์ดแวร์เดียวกัน โดยการเพิ่มอัตราการอ่านการถ่ายโอน (ซึ่งสามารถทำได้ง่ายเช่นตัวอย่างRAID 0คือการสตริปโดยไม่มีความซ้ำซ้อนซึ่งโดยทั่วไปจะใช้เพื่อให้ได้ประสิทธิภาพการอ่าน / เขียนที่สูงขึ้นเมื่อรวมกับ RAID 1 ที่สร้างRAID 10 ) เวลาในการดำเนินการจะลดลงตามปริมาณข้อมูลที่เท่ากัน

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


1

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

มีแอปพลิเคชั่น Linux ชื่อ TripWire ที่ใช้อย่างกว้างขวางสำหรับการตรวจสอบความสามารถในการทำงานของระบบเพื่อตรวจสอบว่าไม่มีการเปลี่ยนแปลงหลังจากการโจมตี เห็นได้ชัดว่าโครงการนั้นถูกทอดทิ้ง แต่มีโครงการใหม่ที่เรียกว่าAIDE (Advanced Intrusion Detection Environment)แนะนำบน ServerFault:

/server/62539/tripwire-and-alternatives

เมื่อคุณติดตั้งมันจะทำงานทุก ๆ x นาทีผู้ใช้สามารถกำหนดค่าได้และจะตรวจสอบโฟลเดอร์ทั้งหมดที่คุณระบุสำหรับการเปลี่ยนแปลงในไฟล์ จำเป็นต้องเรียกใช้หนึ่งครั้งเพื่อคำนวณแฮชไฟล์ทั้งหมดแล้วหลังจากนั้นจะตรวจสอบแฮชทั้งหมดกับไฟล์ปัจจุบันและทำให้แน่ใจว่ามันยังคงเหมือนเดิม คุณสามารถระบุประเภทของแฮชหรือแฮชที่จะใช้ (ฉันจะไม่แนะนำอะไรที่อ่อนแอกว่า SHA-256) ซึ่งไฟล์แอ็ตทริบิวต์ที่จะใช้ (เนื้อหาขนาดการแก้ไขเวลาประทับ ฯลฯ ) ความถี่ในการตรวจสอบ วิธีจัดเก็บฐานข้อมูลแฮช / อื่น ๆ

บางคนอาจคิดว่าราคาแพงเกินไป แต่ขึ้นอยู่กับข้อกำหนดของ OP มันอาจทำให้เขาอุ่นใจมากขึ้นว่าข้อมูลที่เขาเก็บไว้จะยังคงเหมือนเดิมหลังจากผ่านไประยะหนึ่ง


0

หอจดหมายเหตุแห่งชาติของออสเตรเลียได้พัฒนา [Checksum Checker] ( http://checksumchecker.sourceforge.net/ ) ซึ่งให้บริการฟรีภายใต้ GPLv3

มันตรวจสอบการตรวจสอบและอัลกอริทึมจากฐานข้อมูลจากนั้นคำนวณการตรวจสอบสำหรับไฟล์เปรียบเทียบทั้งสองค่าและรายงานหากมีข้อผิดพลาด รองรับ MD5, SHA1, SHA2, SHA256 และ SHA512

ซอฟต์แวร์อื่น ๆ ในที่เก็บข้อมูลดิจิตอล [DPR] ( http://dpr.sourceforge.net/ ) สร้างการตรวจสอบครั้งแรก (รวมถึงการทำกิจกรรมการประมวลผลอื่น ๆ ทั้งหมด)

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