จะทำข้อมูลซ้ำซ้อน 40TB อย่างไร


17

ฉันได้สืบทอดคลัสเตอร์การวิจัยที่มี ~ 40TB ของข้อมูลในระบบไฟล์ทั้งสาม ข้อมูลนั้นยืดเยื้อมาเกือบ 15 ปีและมีแนวโน้มที่จะเกิดการซ้ำซ้อนได้มากเนื่องจากนักวิจัยคัดลอกข้อมูลของแต่ละคนด้วยเหตุผลที่แตกต่างกัน

ฉันรู้เกี่ยวกับเครื่องมือกำจัดความผิดพลาดเช่น fdupes และ rmlint ฉันพยายามหาชุดที่ทำงานบนชุดข้อมูลขนาดใหญ่เช่นนั้น ฉันไม่สนใจว่าจะใช้เวลาหลายสัปดาห์ (หรืออาจเป็นเดือน) ในการรวบรวมข้อมูลทั้งหมด - ฉันอาจจะเร่งความเร็วเพื่อให้ง่ายต่อระบบไฟล์ แต่ฉันต้องการค้นหาเครื่องมือที่มีประสิทธิภาพสูงสุดกับ RAM หรือสามารถเก็บข้อมูลตัวกลางทั้งหมดที่ต้องการในไฟล์มากกว่า RAM ฉันสมมติว่า RAM ของฉัน (64GB) จะหมดลงหากฉันรวบรวมข้อมูลทั้งหมดนี้เป็นชุดเดียว

ฉันกำลังทดลองกับ fdupes บนต้นไม้ 900GB เป็น 25% ของวิธีการผ่านและการใช้ RAM ได้คืบคลานช้าตลอดเวลาตอนนี้มันอยู่ที่ 700MB

หรือมีวิธีที่จะนำกระบวนการไปใช้แรมที่ดิสก์แมปดังนั้นจึงมีให้ใช้มากขึ้นและไม่ใช้ RAM ระบบหรือไม่

ฉันใช้ CentOS 6


ระบบไฟล์คือ XFS ในกรณีที่เกี่ยวข้อง นั่นคือฉันรู้ว่าไม่ใช่ fs ที่มีความสามารถในการกำจัดความผิดพลาดเช่น XFS
Michael Stauffer

ทำไมคุณถึงกังวลเรื่อง RAM ในตอนแรก? ระบบปฏิบัติการมีอัลกอริทึมการจัดการหน่วยความจำของตัวเองและความจริงที่ว่าการใช้ RAM คือ "คืบคลานขึ้น" ไม่ได้หมายความว่าในที่สุดมันจะกิน RAM ทั้งหมดของคุณ ฉันค่อนข้างมั่นใจว่ามันจะไม่เกิดขึ้น
Art Gertner

1
ฉันไม่ทราบว่าเครื่องมือเฉพาะทำงานอย่างไร แต่คุณสามารถคำนวณแฮชสำหรับแต่ละไฟล์และบันทึกมันพร้อมกับเส้นทางของไฟล์จากนั้นเรียงลำดับตามแฮชและการซ้ำซ้อน มันควรจะทำได้ด้วยสคริปต์ Python แบบง่าย ๆ หรือแม้กระทั่งใน Bash การใช้ RAM ควรน้อยที่สุดยกเว้นขั้นตอนการเรียงลำดับ แต่ฉันคิดว่าคุณสามารถใช้การผสานที่ได้รับการปรับเปลี่ยนบางชนิดเพื่อให้มันอยู่ในระดับที่สมเหตุสมผล
gronostaj

1
ใช่เครื่องมือเฉพาะคำนวณแฮช แต่ก่อนอื่นให้ทำสิ่งต่าง ๆ เช่นดูขนาดไฟล์และแฮชเฉพาะจุดเริ่มต้นของไฟล์เพื่อ จำกัด จำนวนแฮชเต็มที่ต้องคำนวณ
Michael Stauffer

สำหรับ RAM ฉันกังวลเกี่ยวกับการชะลอตัวของไฟล์เซิร์ฟเวอร์ - ดูความคิดเห็นของฉันด้านล่างเพื่อตอบ
Michael Stauffer

คำตอบ:


4

หรือมีวิธีที่จะนำกระบวนการไปใช้แรมที่ดิสก์แมปดังนั้นจึงมีให้ใช้มากขึ้นและไม่ใช้ RAM ระบบหรือไม่

ใช่มันเรียกว่า swap drive คุณอาจมีอยู่แล้ว หากคุณกังวลว่า RAM จะหมดการเพิ่มที่นี่เป็นจุดเริ่มต้นที่ดี มันทำงานโดยอัตโนมัติ แต่ไม่จำเป็นต้องทำอะไรเป็นพิเศษ

ฉันจะไม่กังวลเกี่ยวกับ fdupes ลองใช้มันควรจะทำงานได้โดยไม่มีปัญหา


ฉันคิดว่าการใช้ swap จะทำให้ทั้งระบบช้าลง - เป็นไฟล์เซิร์ฟเวอร์ที่ไม่ว่าง แต่อาจไม่เพียงพอที่จะกังวลเกี่ยวกับ? ฉันสามารถใช้ ulimit เพื่อป้องกันไม่ให้กระบวนการใช้มากกว่า ram ระบบในกรณีใด ๆ ฉันคิดว่าเป็นความล้มเหลว แต่ดูเหมือนว่า krowe และ smc ไม่คิดว่า fdupes จะใช้ ram มากขนาดนั้นอยู่แล้วดังนั้นฉันควรลองดู
Michael Stauffer

1

การค้นหารายการที่ซ้ำกันตามแฮชคีย์ทำงานได้ดีและรวดเร็วมาก

find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate

0

เขียนแอปด่วนเพื่อเดินต้นไม้ไม่ว่าจะเป็นการกด (hash, mtime) => filepath ในพจนานุกรมหรือทำเครื่องหมายไฟล์เพื่อลบหากมีรายการอยู่แล้ว แฮชจะเป็น MD5 ที่ถูกคำนวณเหนือ N ไบต์แรก คุณอาจทำสองรอบที่แตกต่างกันโดยมีแฮชเหนือ N ขนาดเล็กและอีกอันที่มีแฮชเหนือ N ขนาดใหญ่

คุณสามารถทำสิ่งนี้ได้ใน Python น้อยกว่ายี่สิบหรือสามสิบบรรทัด (โดยใช้ os.walk ())

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