Periksa kebenaran file yang disalin

14

Setelah saya salin katakan 50+ GB (30.000 file termasuk format yang berbeda) dari file dari hard drive internal ke drive eksternal apakah ada cara untuk mengetahui apakah semuanya telah disalin dengan benar? Juga jika saya berhenti di antara dengan membatalkan operasi dan kemudian mengatakan bergabung ketika melanjutkan operasi akan kebenaran terpukul?

Saya bisa menggunakan aplikasi seperti back-in-timetetapi saya sangat pemilih dalam menyalin file dan untuk waktu berikutnya saya berniat untuk menggunakan copyoperasi dan mengatakan mergebukan replace. Apakah disarankan saat menyalin sejumlah besar file?

Chethan S.
sumber
2
Anda dapat menemukan jawabannya di sini .
Takkat

Jawaban:

16

Saya menggunakan hashdeep untuk memverifikasi cadangan / mengembalikan dan kadang-kadang untuk memeriksa kerusakan sistem file dalam RAID.

Kecepatannya tergantung pada fungsi hash mana yang Anda gunakan (ada yang lebih intensif CPU daripada yang lain) serta kecepatan baca disk Anda. Di sistem saya hashdeepdapat memproses atau memverifikasi sekitar 1 TB / jam dengan kecepatan baca md5 dan 300 MB / s.


Contoh menghitung checksum dan menyimpannya dalam file:

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

Parameter:

  • r - rekursif
  • l - Gunakan jalur relatif
  • c - tentukan fungsi hash
  • . - Mulai secara rekursif di direktori saat ini
  • > - redirect output ke file yang ditentukan

Lihat halaman manual .


Contoh tentang memverifikasi checksum dan mencetak daftar perbedaan:

$ 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

Parameter:

  • a - audit (bandingkan dengan daftar checksum yang diketahui)
  • v- verbose (untuk mendapatkan daftar ketidakcocokan, multiple vs berarti lebih banyak verbose)
  • k - File hash yang dikenal

Perhatikan bahwa pada Maret 2016 hashdeeptampaknya ditinggalkan .

jg-faustus
sumber
14

Sepertinya tugas yang sempurna untuk rsync . Rsync membandingkan dan menyalin perbedaan.

The rsyncutilitas pertama muncul dalam pikiran saya ketika saya melihat pertanyaan Anda. Melakukan sesuatu seperti di bawah ini dapat dengan cepat menampilkan file apa yang ada di direktori atetapi tidak di 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

Ini adalah opsi yang baik karena Anda dapat membandingkan konten file juga untuk memastikan mereka cocok. rsyncAlgoritma delta dioptimalkan untuk jenis kasus penggunaan ini. Kemudian jika Anda ingin bmencocokkan isi a, Anda dapat menghapus -nopsi untuk melakukan sinkronisasi yang sebenarnya.

Beberapa pertanyaan terkait:

ddeimeke
sumber
1
rsync jelas merupakan alat untuk pekerjaan ini, tetapi itu tidak membandingkan dan menyalin perbedaan, per se. Ini membandingkan file menggunakan ukuran dan hash.
Justin Force
@JustinForce Menggunakan ukuran? Tentu, ukuran yang berbeda memastikan bahwa file tersebut tidak persis sama, tetapi rsync sangat fleksibel, secara opsional dapat mempercayai metadata (seperti waktu) untuk menghindari membaca kembali semua file. Saat menyalin melalui jaringan, itu menghitung hash bergulir untuk secara halus mendeteksi bagian-bagian umum untuk menghindari mentransfernya, tetapi pada drive lokal dengan hash default tidak memainkan peran ini (jika digunakan sama sekali). Anda bahkan dapat memintanya untuk percaya bahwa tujuan yang lebih pendek sudah memiliki konten yang benar dan hanya perlu ditambahkan, namun mari kita tetap pada topik.
Stéphane Gourichon
8

Jika aplikasi GUI disarankan pada alat perbandingan File dan direktori? jangan lakukan itu untuk Anda, cobalah diff -rq /path/to/one /path/to/otheruntuk menelusuri kembali kedua direktori dengan tenang, hanya mencatat perbedaan pada layar.

Amanda
sumber
3

Situasi yang Anda katakan terlalu rumit. Meskipun Anda dapat menulis skrip untuk menghitung MD5 dari semua file yang ingin Anda salin dan kemudian membandingkannya dengan yang disalin:

Jika Anda menginginkan sesuatu yang sederhana dan cepat (itu tidak akan bekerja dalam skenario yang sangat kompleks) Anda dapat menggunakan Meld

sudo apt-get install meld
puneet
sumber
0

Pada "jika semuanya telah disalin dengan benar", saya menggunakan cp yang dimodifikasi (atau mv) yang mencakup checksumming (opsional disimpan dalam xattr, maka itu hanya harus dihitung sekali untuk sumbernya) http://sourceforge.net/projects / crcsum /

Hans
sumber
1
Meskipun jawaban Anda 100% benar, hampir tidak mungkin bagi pengguna pemula untuk menerapkan. Karena itu, harap edit jawaban Anda, dan sertakan langkah-langkah tentang cara mengunduh, menyusun, menginstal, dan mencopot pemasangan crccpdalam jawaban Anda! ;-) Anda selalu dapat meninggalkan tautan di bagian bawah jawaban Anda sebagai sumber untuk materi Anda ...
Fabby