Saya sering mentransfer gambar VM dari hypervisor ke server arsip untuk penyimpanan jangka panjang.
Saya mentransfer menggunakan netcat karena lebih cepat daripada scp, rsync, dll ..
hypervisor$ cat foo.box | nc <archive IP> 1234
archive$ nc -l -p 1234 > foo.box
Setelah file selesai ditransfer, saya memverifikasi tidak ada korupsi dengan menjalankan md5sum
target dan sumbernya.
Sayangnya, menjalankan md5sum pada file besar dapat memakan waktu yang sangat lama. Bagaimana saya bisa lebih cepat membandingkan integritas dua file besar?
Memperbarui:
- Transmisi saya jarang terganggu sehingga kemampuan me-restart tidak menjadi masalah.
- Biasanya dibutuhkan 3-4 jam untuk mentransfer melalui NC dan kemudian 40 menit untuk mendapatkan md5sum.
- Keamanan hash tidak menjadi masalah dalam kasus ini.
Jawaban:
Anda dapat menggunakan tee untuk melakukan penjumlahan dengan cepat seperti ini (sesuaikan perintah netcat untuk kebutuhan Anda):
Server:
Klien:
sumber
md5deep
memiliki mode "chunk" ( md5deep.sourceforge.net/md5deep.html ) yang mungkin berguna untuk ini.Jawaban Nerdwaller tentang penggunaan
tee
untuk secara bersamaan mentransfer dan menghitung checksum adalah pendekatan yang baik jika Anda terutama khawatir tentang korupsi melalui jaringan. Itu tidak akan melindungi Anda dari korupsi dalam perjalanan ke disk, dll., Karena mengambil checksum sebelum hits disk.Tetapi saya ingin menambahkan sesuatu:
1 TiB / 40 menit ≈ 437 MiB / detik 1 .
Sebenarnya itu cukup cepat. Ingatlah bahwa kecuali Anda memiliki banyak RAM, itu harus kembali dari penyimpanan. Jadi hal pertama yang harus diperiksa adalah menonton
iostat -kx 10
saat Anda menjalankan checksum Anda; khususnya Anda ingin memperhatikan%util
kolom. Jika Anda mengelompokkan disk (mendekati 100%), maka jawabannya adalah membeli penyimpanan yang lebih cepat.Jika tidak, seperti poster lain yang disebutkan, Anda dapat mencoba berbagai algoritma checksum. MD4, MD5, dan SHA-1 semuanya dirancang untuk hash kriptografi (meskipun tidak ada yang harus digunakan untuk tujuan itu lagi; semua dianggap terlalu lemah). Dari segi kecepatan, Anda dapat membandingkannya
openssl speed md4 md5 sha1 sha256
. Saya telah melempar SHA256 untuk memiliki setidaknya satu hash yang masih cukup kuat.Dari hal di atas, Anda dapat melihat bahwa MD4 adalah yang tercepat, dan SHA256 yang paling lambat. Hasil ini khas pada perangkat keras seperti PC, setidaknya.
Jika Anda ingin lebih banyak kinerja (dengan biaya sepele untuk mengutak-atik, dan juga lebih kecil kemungkinannya untuk mendeteksi korupsi), Anda ingin melihat CRC atau hash Adler. Dari keduanya, Adler biasanya lebih cepat, tetapi lebih lemah. Sayangnya, saya tidak mengetahui adanya implementasi command line yang sangat cepat; program pada sistem saya semua lebih lambat dari md4 OpenSSL.
Jadi, kecepatan terbaik taruhan Anda adalah
openssl md4 -r
(-r
membuatnya terlihat seperti output md5sum).Jika Anda bersedia melakukan kompilasi dan / atau pemrograman minimal, lihat kode Mark Adler di Stack Overflow dan juga xxhash . Jika Anda memiliki SSE 4.2, Anda tidak akan bisa mengalahkan kecepatan instruksi CRC perangkat keras.
1 1 TiB = 1024⁴ byte; 1 MiB = 1024² byte. Datang ke ≈417MB / detik dengan kekuatan-of-1000 unit.
sumber
shasum
saja?The
openssl
perintah mendukung beberapa mencerna pesan. Dari yang saya dapat mencoba,md4
tampaknya berjalan di sekitar 65% dari waktumd5
, dan sekitar 54% dari waktusha1
(untuk satu file yang saya uji dengan).Ada juga
md2
dalam dokumentasi, tetapi tampaknya memberikan hasil yang samamd5
.Sangat kasar, kecepatan tampaknya berbanding terbalik dengan kualitas, tetapi karena Anda (mungkin) tidak peduli tentang musuh yang menciptakan tabrakan yang disengaja, itu seharusnya tidak menjadi masalah.
Anda mungkin mencari-cari pesan yang lebih tua dan lebih sederhana (apakah ada
md1
, misalnya)?Poin kecil: Anda sudah menggunakan Useless of
cat
. Daripada:Anda dapat gunakan:
atau bahkan:
Melakukan hal itu menghemat suatu proses, tetapi mungkin tidak akan memiliki efek signifikan pada kinerja.
sumber
cat
" karenanya tidak selalu sepenuhnya buruk. Jika tidak ada peningkatan kinerja dengan menghindarinya, maka lebih baik untuk pergi dengan apa pun yang Anda merasa lebih nyaman, dengan asumsi Anda akan menjadi pemelihara kode ini.Dua pilihan:
Menggunakan
sha1sum
Dalam beberapa keadaan, sha1sum lebih cepat .
Menggunakan
rsync
Ini akan memakan waktu lebih lama untuk transfer, tetapi rsync memverifikasi bahwa file tersebut tiba utuh.
Dari halaman manual rsync
sumber
Ilmu pengetahuan mengalami kemajuan. Tampaknya fungsi hash BLAKE2 baru lebih cepat daripada MD5 (dan secara kriptografis lebih kuat untuk mem-boot).
Referensi: https://leastauthority.com/blog/BLAKE2-harder-better-faster-stronger-than-MD5.html
Dari slide Zooko:
sumber
Anda mungkin tidak bisa melakukan yang lebih baik daripada hash yang baik. Anda mungkin ingin memeriksa fungsi hash / checksum lainnya untuk melihat apakah ada yang secara signifikan lebih cepat daripada
md5sum
. Perhatikan bahwa Anda mungkin tidak membutuhkan sesuatu yang sekuat MD5. MD5 (dan hal-hal seperti SHA1) dirancang agar kuat secara kriptografis, sehingga tidak mungkin bagi penyerang / penipu untuk membuat file baru yang memiliki nilai hash yang sama dengan nilai yang ada (yaitu, untuk membuatnya sulit untuk mengutak-atik e yang ditandatangani). -mail dan dokumen lainnya). Jika Anda tidak khawatir tentang serangan pada komunikasi Anda, tetapi hanya kesalahan comms run-of-the-mill, sesuatu seperti pemeriksaan redundansi siklik (CRC) mungkin cukup baik. (Tapi aku tidak tahu apakah akan lebih cepat.)Pendekatan lain adalah mencoba melakukan hash secara paralel dengan transfer. Ini mungkin mengurangi waktu keseluruhan, dan pasti bisa mengurangi faktor iritasi karena harus menunggu transfer selesai, dan kemudian menunggu lagi sampai MD5 selesai. Saya belum menguji ini, tetapi mungkin bisa melakukan sesuatu seperti ini:
Di mesin sumber:
Di mesin tujuan:
Tentu saja memeriksa ukuran file adalah cara yang baik dan cepat untuk mendeteksi jika ada byte yang jatuh.
sumber
Mengirim file besar sangat merepotkan. Mengapa tidak mencoba memotong-motong file yang menghasilkan hash untuk setiap chunk dan kemudian mengirimkannya ke tujuan dan kemudian memeriksa hash dan bergabung dengan potongan.
Anda juga dapat mengatur jaringan BitTorrent pribadi. Itu akan memastikan bahwa semuanya mencapai dengan aman.
sumber