Apakah ada perintah salin dan verifikasi di Ubuntu / Linux?

23

Saya mencadangkan semua foto digital saya ke beberapa tempat. Saya telah menggunakan perintah cp, tetapi - mengingat nilai pribadi - sudah mulai bertanya-tanya apakah ada cara yang lebih dapat diandalkan. Saya tidak asing dengan Linux, Bash, Perl, dll, jadi saya bisa menulis sesuatu untuk menyalin dan membandingkan hash md5, tapi saya bertanya-tanya apakah ada sesuatu yang sudah ada (reinvention, roda dan apa-tidak).

Sebagian besar googling saya untuk salinan dan (verifikasi | valid | cek | hash | konfirmasi) muncul rsync. Namun, sejauh yang saya tahu, rsync hanya menggunakan hash untuk melihat apakah file perlu diperbarui. Itu tidak melakukan perbandingan hash sesudahnya.

Untuk penggunaan ini, khususnya, file-file tersebut adalah biner dan biasanya 8-10MB. Setiap rekomendasi untuk utilitas atau panduan untuk solusi DIY akan sangat dihargai.

N13
sumber
Bagaimana kalau serempak ? Ini digunakan untuk sinkronisasi dua arah tetapi pasti memeriksa checksum suatu file.
lancip

Jawaban:

19

Dari man rsync, di bawah -copsi:

-c, --checksum: lewati berdasarkan checksum, bukan mod-time & size

Perhatikan bahwa rsync selalu memverifikasi bahwa setiap file yang ditransfer direkonstruksi dengan benar di sisi penerima dengan memeriksa checksum seluruh file yang dihasilkan saat file ditransfer, tetapi verifikasi setelah transfer otomatis tidak ada hubungannya dengan opsi ini. sebelum transfer "Apakah file ini perlu diperbarui?" memeriksa.

icyrock.com
sumber
7
Beberapa orang tahu bahwa manual rsync menyesatkan tentang pemeriksaan salinan posting default: unix.stackexchange.com/a/66702/148560 Tampaknya tidak ada pemeriksaan seperti itu. Untuk memverifikasi semua salinan Anda harus melakukan rsync lain dengan opsi --checksum, kata mereka.
Rotareti
5

Beberapa tahun yang lalu saya memiliki tuntutan yang sama seperti Anda. Solusi yang saya pilih adalah menggunakan ZFS melalui driver ZFS-FUSE di server penyimpanan saya. Pemikiran saya adalah foto-foto pribadi saya, dokumen yang dipindai, dan file serupa lainnya adalah hal-hal yang hanya dapat saya akses sesekali, jadi mungkin butuh waktu yang sangat lama, katakanlah setahun atau lebih, sebelum saya perhatikan bahwa file telah rusak karena kesalahan drive atau sejenisnya.

Pada saat itu, semua salinan cadangan yang saya miliki mungkin merupakan versi file yang sedikit busuk ini.

ZFS memiliki kelebihan dibandingkan RAID-5 karena dapat mendeteksi dan memperbaiki kesalahan pada data yang disimpan pada disk individu, bahkan jika drive tidak melaporkan kesalahan baca saat membaca data. Ini akan mendeteksi, melalui checksum, bahwa salah satu disc mengembalikan informasi yang rusak dan akan menggunakan data redundansi untuk memperbaiki disk itu.

Karena cara checksumming di ZFS dirancang, saya merasa bisa mengandalkannya untuk menyimpan data yang jarang digunakan untuk jangka waktu yang lama. Setiap minggu saya menjalankan "scrub zpool" yang melewati dan membaca kembali semua data dan memverifikasi checksum.

ZFS-FUSE telah bekerja cukup baik untuk saya selama beberapa tahun terakhir.

Di masa lalu, untuk klien, saya menerapkan sistem database yang menyimpan informasi checksum pada semua file yang disimpan di bawah direktori tertentu. Saya kemudian memiliki skrip lain yang akan berjalan secara berkala dan memeriksa file terhadap checksum yang disimpan dalam database. Dengan itu kita dapat dengan cepat mendeteksi file yang rusak dan mengembalikan dari cadangan. Kami pada dasarnya menerapkan jenis pemeriksaan yang sama dengan yang dilakukan ZFS secara internal.

Sean Reifschneider
sumber
Mengapa memilih? Karena tidak ada komentar yang tersisa saya akan menganggap itu "-1, tidak setuju". :-)
Sean Reifschneider
... tapi kemudian: bagian apa yang tidak disetujui? Meskipun mungkin agak di luar topik untuk pertanyaan, ini kedengarannya solid bagi saya. Jadi saya berharap downvote adalah untuk "tidak menjawab pertanyaan" daripada meninggalkan kita tidak menyadari beberapa kesalahan nyata di atas ...
Arjan
Saya menyadari pagi ini bahwa saya berasumsi bahwa icyrock bertanya karena khawatir tentang bit-rot, yang merupakan keprihatinan saya. Tapi mungkin itu entah bagaimana berbeda. Meskipun saya tidak bisa membayangkan apa kasus penggunaannya yang akan mengubah konten file secara sah tanpa mengubah waktu file.
Sean Reifschneider
Saya pikir kekhawatiran OP adalah korupsi data dalam perjalanan. Anda menyalin file dan salinannya berbeda dari aslinya.
Jon Bentley
btrfs? yang memiliki checksum dan asli ...
Dmitry Kudriavtsev
1

Saya menemukan utilitas ini (Linux dan Windows) yang melakukan apa yang Anda inginkan (salinan hash + verifikasi hash dengan log): http://sourceforge.net/projects/quickhash/

Satu-satunya downside adalah bahwa itu hanya ada sebagai GUI (tidak ada akses baris perintah)

Sejak v1.5.0, folder sumber yang dipilih dapat di-hash, kemudian disalin & direkonstruksi ke folder tujuan di mana konten kembali hash untuk verifikasi. Sejak 1.5.5, mask file yang dipilih juga dapat digunakan (* .doc; * .xls dll).

2072
sumber
0

jika Anda menyalin file secara lokal (seperti yang tersirat oleh referensi Anda cpalih-alih scpdll), maka hanya cmpfile sumber dan tujuan ... tetapi secara realistis, jika cptidak memancarkan semacam kesalahan (baik pada baris perintah atau dalam nilai pengembalian eksekusi), tidak ada alasan untuk percaya itu tidak berfungsi.

jika Anda memang ingin cadangan berlebihan secara sah, pertimbangkan solusi jarak jauh seperti dropbox .

Brad Clawsie
sumber
+1. Tidak jelas mengapa jawaban ini diturunkan karena memberikan (apa yang tampak bagi saya) menjadi solusi yang benar-benar valid untuk masalah ini, meskipun membutuhkan dua perintah daripada satu.
Jon Bentley
Anda benar-benar harus menulis skrip dengan loop untuk menggunakan jawaban ini, karena itu tidak mempertimbangkan banyak file dan folder.
Gringo Suave