ฉันพยายามนอน ในขณะที่ดี (และมีคุณสมบัติที่แตกต่างที่มีประโยชน์ซึ่งอาจเป็นตัวเลือกที่ดีที่สุดสำหรับหลาย ๆ คน) แต่ดูเหมือนว่าจะสแกนไฟล์เป้าหมายทั้งหมดสำหรับ checksums
ซึ่งเจ็บปวดช้า
โปรแกรมอื่น ๆ ในทางกลับกันเช่น rdfind และ rmlint จะสแกนต่างกัน
rdfind มีคุณสมบัติ "ทดลอง" สำหรับการใช้ reflink btrfs (และตัวเลือก "แข็ง" สำหรับ hardlinks, symlinks ฯลฯ )
rmlint มีตัวเลือก "ทึบ" สำหรับ btrfs clone, reflink, hardlinks ปกติ, symlink, delete และคำสั่งที่คุณกำหนดเอง
แต่ที่สำคัญกว่า rdfind และ rmlint เป็นอย่างมีนัยสำคัญได้เร็วขึ้น ในขณะที่คำสั่งของขนาด แทนที่จะสแกนไฟล์เป้าหมายทั้งหมดสำหรับ checksums มันทำสิ่งนี้โดยประมาณ:
- สแกนระบบไฟล์เป้าหมายทั้งหมดรวบรวมเพียงเส้นทางและขนาดไฟล์
- ลบออกจากการพิจารณาไฟล์ที่มีขนาดไฟล์ไม่ซ้ำกัน เพียงอย่างเดียวนี้ช่วยประหยัดเวลาและกิจกรรมของดิสก์ ("Scads" เป็นฟังก์ชันเลขชี้กำลังอินเวอร์สแทนหรือสิ่งที่ตรงกันข้าม)
- ของผู้สมัครที่เหลืออยู่ให้สแกน N ไบต์แรก ลบออกจากการพิจารณาไฟล์ที่มีขนาดเท่ากัน แต่ N ไบต์แรกต่างกัน
- ทำเช่นเดียวกันสำหรับ N ไบต์สุดท้าย
- เฉพาะส่วนที่เหลือ(โดยปกติจะเป็นเศษเล็ก ๆ ) ให้สแกนหาเช็คซัม
ข้อดีอื่น ๆ ของ rmlint ฉันรู้:
- คุณสามารถระบุการตรวจสอบ md5 น่ากลัวเกินไปไหม ลอง sha256 หรือ 512 หรือเปรียบเทียบแบบบิตต่อบิต หรือฟังก์ชั่นคร่ำครวญของคุณเอง
- มันให้ตัวเลือก Btrfs "clone" และ "reflink" ไม่ใช่แค่ reflink "cp --reflink = always" มีความเสี่ยงเพียงเล็กน้อยเนื่องจากไม่ใช่ปรมาณูจึงไม่ทราบว่าจะมีสิ่งใดเกิดขึ้นอีกในไฟล์นั้นในเคอร์เนลและจะไม่เก็บข้อมูลเมตาเสมอไป "Clone", OTOH (ซึ่งเป็นคำศัพท์สั้น ๆ ... ฉันกำลังลบชื่อที่เกี่ยวข้องกับ API อย่างเป็นทางการ) เป็นการเรียกระดับเคอร์เนลที่เป็นอะตอมและเก็บข้อมูลเมตา เกือบจะส่งผลให้เกิดสิ่งเดียวกันเสมอ แต่แข็งแรงกว่าและปลอดภัยกว่า (แม้ว่าโปรแกรมส่วนใหญ่จะฉลาดพอที่จะไม่ลบไฟล์ที่ซ้ำกัน แต่ถ้าไม่สามารถสร้าง reflink ชั่วคราวให้สำเร็จ)
- มีตัวเลือกมากมายสำหรับการใช้งานหลายกรณี (ซึ่งเป็นข้อเสียเปรียบเช่นกัน)
ฉันเปรียบเทียบ rmlint กับ deduperemove - ซึ่งยังสแกนไฟล์เป้าหมายทั้งหมดสำหรับ checksums ด้วยเช่นกัน Duperemove ใช้เวลาหลายวันกับวอลลุ่มของฉันเพื่อให้เสร็จสมบูรณ์ (4 ฉันคิดว่า) เต็มเอียง fmlint ใช้เวลาสองสามชั่วโมงในการระบุรายการซ้ำจากนั้นใช้เวลาน้อยกว่าหนึ่งวันในการคัดลอกด้วย Btrfs
(ที่กล่าวว่าทุกคนที่พยายามเขียนและสนับสนุนคุณภาพซอฟต์แวร์ที่มีประสิทธิภาพและแจกฟรีขอสมควรได้รับความชื่นชมที่สำคัญ!)
Btw: คุณควรหลีกเลี่ยงการหักข้อมูลซ้ำโดยใช้การเชื่อมโยงแบบปกติเป็นวิธีการขจัดคำซ้ำซ้อน "ทั่วไป" โดยมีค่าใช้จ่ายทั้งหมด
ในขณะที่ hardlinks จะมีประโยชน์มากในกรณีการใช้งานที่กำหนดเป้าหมายบางอย่าง (เช่นแฟ้มบุคคลหรือเครื่องมือที่สามารถสแกนหาประเภทไฟล์ที่ระบุเกินขนาดต่ำสุดบาง - หรือเป็นส่วนหนึ่งของการสำรองข้อมูลโซลูชั่นฟรีและพาณิชย์ / ภาพรวมอีกหลายคน) ก็สามารถเป็นหายนะสำหรับ "การขจัดข้อมูลซ้ำซ้อน" บนระบบไฟล์ที่ใช้งานทั่วไปขนาดใหญ่ เหตุผลก็คือผู้ใช้ส่วนใหญ่อาจมีไฟล์หลายพันไฟล์ในระบบไฟล์ของพวกเขาซึ่งเป็นเลขฐานสองเหมือนกัน
ตัวอย่างเช่นหลายโปรแกรมสร้างไฟล์เทมเพลตและ / หรือไฟล์การตั้งค่าที่ซ่อนอยู่ (บางครั้งในทุกโฟลเดอร์เดียวที่สามารถเห็นได้) ซึ่งเหมือนกันในตอนแรก - และส่วนใหญ่ยังคงเป็นเช่นนั้นจนกว่าคุณผู้ใช้จะไม่ต้องการ
ตามภาพประกอบที่ระบุ: ไฟล์ภาพขนาดย่อของแคชซึ่งโปรแกรมจำนวนนับไม่ถ้วนที่สร้างขึ้นในโฟลเดอร์ที่มีรูปถ่าย (และสำหรับเหตุผลที่ดี - ความสะดวกในการพกพา) อาจใช้เวลาหลายชั่วโมงหรือหลายวันในการสร้าง หากไฟล์แคชเริ่มต้นเหล่านี้มีการเชื่อมโยงกันทั้งหมดคุณจะเปิดแอปในไดเรกทอรีและสร้างแคชขนาดใหญ่ในภายหลัง ... จากนั้นเดาว่า: ตอนนี้ทุกโฟลเดอร์ที่มีแคช hardlinked ก่อนหน้านี้ตอนนี้มีแคชที่ไม่ถูกต้อง อาจเกิดขึ้นพร้อมกับผลลัพธ์ที่ร้ายแรงซึ่งอาจทำให้ข้อมูลถูกทำลายโดยไม่ตั้งใจ และอาจเป็นไปได้ที่จะระเบิดโซลูชันสำรองที่ไม่ได้รับการเชื่อมโยงจากฮาร์ดไดรฟ์
นอกจากนี้ยังสามารถทำลายภาพรวมทั้งหมด จุดรวมของสแนปชอตคือเพื่อให้รุ่น "สด" สามารถเปลี่ยนแปลงได้ต่อไปด้วยความสามารถในการย้อนกลับไปสู่สถานะก่อนหน้า หากทุกอย่างเชื่อมโยงกันด้วยกัน แต่ ... คุณ "ย้อนกลับ" เป็นสิ่งเดียวกัน
แต่ข่าวดีก็คือการลบข้อมูลซ้ำด้วย Btrfs clone / reflink สามารถยกเลิกความเสียหายนั้นได้ (ฉันคิดว่า - ในระหว่างการสแกนคุณควรเห็นไฟล์ hardlinked เหมือนกัน ... ยกเว้นว่ามันมีเหตุผลที่จะไม่พิจารณา hardlink มันอาจจะขึ้นอยู่กับ ยูทิลิตีที่เฉพาะเจาะจงที่ทำการหักข้อมูล)