ตรวจสอบความถูกต้องของไฟล์ที่คัดลอก


14

หลังจากฉันคัดลอกไฟล์ 50+ GB (30,000 ไฟล์รวมถึงรูปแบบที่แตกต่างกัน) จากฮาร์ดไดรฟ์ภายในไปยังไดรฟ์ภายนอกแล้วมีวิธีใดบ้างที่จะทราบว่าทุกอย่างถูกคัดลอกอย่างถูกต้องหรือไม่? นอกจากนี้ถ้าฉันหยุดในระหว่างโดยการยกเลิกการดำเนินการและในภายหลังบอกว่าผสานเมื่อดำเนินการต่อไปความถูกต้องจะถูกตี?

ฉันสามารถใช้งานเช่นback-in-timeแต่ผมมากจู้จี้จุกจิกในการคัดลอกไฟล์และสำหรับครั้งต่อไปผมตั้งใจที่จะใช้copyดำเนินงานและพูดแทนmerge replaceแนะนำให้ทำการคัดลอกไฟล์จำนวนมากหรือไม่?


2
คุณอาจพบคำตอบที่นี่
Takkat

คำตอบ:


16

ฉันใช้hashdeepเพื่อตรวจสอบการสำรองข้อมูล / เรียกคืนและบางครั้งเพื่อตรวจสอบความเสียหายของระบบไฟล์ใน RAID

ความเร็วขึ้นอยู่กับฟังก์ชั่นแฮชที่คุณใช้ (บาง CPU มีความเข้มข้นมากกว่าซีพียูอื่น ๆ ) รวมถึงความเร็วในการอ่านดิสก์ของคุณ ในระบบของฉันhashdeepสามารถประมวลผลหรือตรวจสอบประมาณ 1 TB / ชั่วโมงด้วยความเร็วในการอ่าน md5 และ 300 MB / s


ตัวอย่างการคำนวณ checksums และเก็บไว้ในไฟล์:

cd my-data
hashdeep -rlc md5 . > ~/checksums.txt

พารามิเตอร์:

  • r - วนซ้ำ
  • l - ใช้เส้นทางสัมพัทธ์
  • c - ระบุฟังก์ชั่นแฮช
  • . - วนซ้ำเริ่มต้นที่ไดเรกทอรีปัจจุบัน
  • > - เปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์ที่ระบุ

ดูหน้าคน


ตัวอย่างการตรวจสอบ checksums และการพิมพ์รายการความแตกต่าง:

$ cd /mnt/my-backup
$ hashdeep -ravvl -k ~/checksums.txt .
hashdeep: Audit passed
          Files matched: 40914
Files partially matched: 0
            Files moved: 0
        New files found: 0
  Known files not found: 0

พารามิเตอร์:

  • a - การตรวจสอบ (เปรียบเทียบกับรายการเช็คซัมที่รู้จัก)
  • v- verbose (เพื่อให้ได้รายการที่ไม่ตรงกันหลายvs หมายถึง verbose มากขึ้น)
  • k - ไฟล์แฮชที่รู้จัก

โปรดทราบว่า ณ มีนาคม 2016 hashdeepดูเหมือนจะถูกทอดทิ้ง


14

ดูเหมือนว่างานที่สมบูรณ์แบบสำหรับrsync Rsync กำลังเปรียบเทียบและคัดลอก diffs

rsyncยูทิลิตี้ครั้งแรกที่ผุดขึ้นมาในใจของฉันเมื่อฉันเห็นคำถามของคุณ การทำสิ่งต่าง ๆ ด้านล่างอาจแสดงว่าไฟล์ใดอยู่ในไดเรกทอรีอย่างรวดเร็วaแต่ไม่แสดงในb:

$ rsync -rcnv a/* b/

-r will recurse into the directories
-c will compare based on file checksum
-n will run it as a "dry run" and make no changes, but just print out the files 
   that would be updated
-v will print the output to stdout verbosely

นี่เป็นตัวเลือกที่ดีเพราะคุณสามารถเปรียบเทียบเนื้อหาของไฟล์ได้เพื่อให้แน่ใจว่าตรงกัน rsyncอัลกอริทึมของเดลต้าได้รับการปรับให้เหมาะกับกรณีการใช้งานประเภทนี้ จากนั้นหากคุณต้องการbจับคู่เนื้อหาของaคุณสามารถลบ-nตัวเลือกเพื่อทำการซิงค์ที่แท้จริงได้

บางคำถามที่เกี่ยวข้อง:


1
rsync เป็นเครื่องมือสำหรับงานนี้แน่นอน แต่มันไม่ได้เปรียบเทียบและคัดลอก diffs ต่อ se มันเปรียบเทียบไฟล์โดยใช้ขนาดและแฮช
Justin Force

@JustinForce ใช้ขนาด? แน่นอนว่าขนาดที่แตกต่างกันทำให้แน่ใจได้ว่าไฟล์นั้นไม่เหมือนกันทุกประการ แต่ rsync นั้นมีความหลากหลายสามารถเลือกที่จะไว้วางใจเมทาดาทา (เหมือนเวลา) เพื่อหลีกเลี่ยงการอ่านไฟล์ทั้งหมดอีกครั้ง เมื่อทำการคัดลอกผ่านเครือข่ายจะทำการคำนวณแฮชแบบกลิ้งเพื่อตรวจหาชิ้นส่วนทั่วไปอย่างละเอียดเพื่อหลีกเลี่ยงการถ่ายโอน แต่ในไดรฟ์ในเครื่องโดยแฮชเริ่มต้นจะไม่เล่นบทบาทนี้ (หากใช้เลย) คุณสามารถขอให้มันไว้วางใจว่าปลายทางที่สั้นกว่านั้นมีเนื้อหาที่ถูกต้องอยู่แล้วและต้องการการต่อท้ายแม้ว่าจะอยู่ในหัวข้อนั้น
Stéphane Gourichon

8

หากแอพ GUI แนะนำที่เครื่องมือการเปรียบเทียบไฟล์และไดเรกทอรี? อย่าทำเพื่อคุณพยายามdiff -rq /path/to/one /path/to/otherชดเชยทั้งสองไดเรกทอรีอย่างเงียบ ๆ โดยบันทึกเฉพาะความแตกต่างในหน้าจอ


3

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

หากคุณต้องการสิ่งที่ง่ายและรวดเร็ว (มันจะไม่ทำงานในสถานการณ์ที่ซับซ้อนมาก) คุณสามารถใช้Meld

sudo apt-get install meld

0

ใน "ถ้าทุกอย่างถูกคัดลอกอย่างถูกต้อง" ฉันใช้ cp (หรือ mv) ที่มีการแก้ไขซึ่งรวมถึงการตรวจสอบ (เก็บไว้ใน xattr ซึ่งจะต้องคำนวณเพียงครั้งเดียวสำหรับแหล่งที่มา) http://sourceforge.net/projects / crcsum /


1
แม้ว่าคำตอบของคุณจะถูกต้อง 100% แต่ก็แทบจะเป็นไปไม่ได้ที่ผู้ใช้มือใหม่จะเริ่มใช้งาน ดังนั้นโปรดแก้ไขคำตอบของคุณและรวมถึงขั้นตอนในการดาวน์โหลดรวบรวมติดตั้งและถอนการติดตั้งcrccpในคำตอบของคุณ! ;-) คุณสามารถทิ้งลิงค์ไว้ที่ด้านล่างของคำตอบเพื่อเป็นแหล่งข้อมูลของคุณ ...
Fabby
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.