1TB dosyasının doğru bir şekilde aktarıldığını nasıl doğrulayabilirim?


25

VM görüntülerini hiper yöneticilerden uzun süreli depolama için sıklıkla bir arşiv sunucusuna aktarırım.

Netcat kullanarak transfer yapıyorum çünkü scp, rsync, vb.

hypervisor$ cat foo.box | nc <archive IP> 1234

archive$ nc -l -p 1234 > foo.box

Dosya aktarımı tamamladığında md5sum, hem hedefte hem de kaynakta çalışarak bozulma olmadığını doğrularım .

Ne yazık ki, md5sum'u büyük bir dosyada çalıştırmak çok uzun sürebilir. İki büyük dosyanın bütünlüğünü daha hızlı nasıl karşılaştırabilirim?

Güncelleştirme:

  • İletimim nadiren kesiliyor, bu nedenle yeniden başlatma yeteneği bir sorun değil.
  • NC yoluyla transfer etmek genellikle 3-4 saat sürer ve md5sum elde etmek için 40 dakika sürer.
  • Bu durumda, karmaşanın güvenliği bir sorun değildir.

2
Farklı checksum deneyebilirsiniz: en.wikipedia.org/wiki/Checksum . Performansları hakkında hiçbir fikrim yok
tumchaaditya

Asıl aktarım ne kadar sürer ve md5sum ne kadar sürer?
Keith Thompson,

Transfer genellikle 3-4 saat sürer ve md5sums'lerin hesaplanması yaklaşık 40 dakika sürer.
tbenz9

Yanıtlar:


18

Toplamı böyle bir şeyle anında yapmak için tee'yi kullanabilirsiniz (netcat komutlarını gereksinimlerinize uyarlayın):

Sunucu:

netcat -l -w 2 1111 | tee >( md5sum > /dev/stderr )

Müşteri:

tee >( md5sum > /dev/stderr ) | netcat 127.0.0.1 1111

1
Sadece bir düşünce: Bunun için yararlı olabilecek md5deepbir "yığın" moduna ( md5deep.sourceforge.net/md5deep.html ) sahiptir.
LawrenceC

@ultrasawblade - Harika bir bağlantı, başka amaçlarla kontrol etmek zorunda kalacağım. Bahsettiğin için teşekkürler!
nerdwaller

10

Nerdwaller'intee aynı zamanda bir sağlama toplamı aktarma ve hesaplamada kullanılmasına ilişkin cevabı , öncelikle ağ üzerinden yolsuzluktan endişeleniyorsanız iyi bir yaklaşımdır. Yine de diske giderken yolsuzluğa karşı koruma sağlamaz, ancak diske çarpmadan önce sağlama toplamı alır.

Ama bir şeyler eklemek istiyorum:

1 TiB / 40 dakika ≈ 437 MiB / sn 1 .

Aslında bu oldukça hızlı. Eğer bir olmadığı sürece unutmayın çok depolama alanındaki geri gelmek için var olduğunu, RAM. Kontrol edilecek ilk şey iostat -kx 10, sağlama toplamınızı çalıştırırken izlemek ; özellikle de %utilsütuna dikkat etmek istiyorsun . Diskleri sıkıştırıyorsanız (% 100'e yakın), cevabı daha hızlı depolama satın almaktır.

Aksi halde, belirtilen diğer afişlerde olduğu gibi, farklı sağlama toplamı algoritmaları deneyebilirsiniz. MD4, MD5 ve SHA-1 şifreli karmalar olarak tasarlanmıştır (bunlardan hiçbiri artık bu amaç için kullanılmamalıdır; hepsi çok zayıf olarak kabul edilir). Hız bilge, bunları karşılaştırabilirsiniz openssl speed md4 md5 sha1 sha256. SHA256'da en az bir tane hala yeterince güçlü olacak şekilde atıldım.

The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md4              61716.74k   195224.79k   455472.73k   695089.49k   820035.58k
md5              46317.99k   140508.39k   320853.42k   473215.66k   539563.35k
sha1             43397.21k   126598.91k   283775.15k   392279.04k   473153.54k
sha256           33677.99k    75638.81k   128904.87k   155874.91k   167774.89k

Yukarıdakilerin arasında MD4'ün en hızlı ve SHA256'nın en yavaş olduğunu görebilirsiniz. Bu sonuç, en azından PC benzeri donanımlarda tipiktir.

Daha fazla performans istiyorsanız ( tahrifat için önemsiz olmanın maliyeti ve ayrıca yolsuzluğu algılama olasılığı daha düşüktür), bir ÇHS'ye veya Adler karmaşasına bakmak istersiniz. İkisinden, Adler tipik olarak daha hızlı, ancak daha zayıf. Ne yazık ki, gerçekten hızlı bir komut satırı uygulamalarının farkında değilim; sistemimdeki programların tümü OpenSSL’nin md4’ünden daha yavaş.

Bu nedenle, en iyi bahis hızınız akıllıca openssl md4 -r( -rmd5sum çıktısı gibi görünmesini sağlar).

Bazı derleme ve / veya asgari düzeyde programlama yapmak ediyoruz istekli Eğer varsa, bkz Yığın taşması üzerine Mark Adler'in kodunu ve ayrıca xxhash . SSE 4.2'ye sahipseniz, donanım CRC komutunun hızını geçemezsiniz.


1 1 TiB = 1024⁴ bayt; 1 MiB = 1024² bayt. 1000 birim güçle 17417MB / sn'ye geliyor.


Hızlı, büyük bir RAID dizisinden 2. büyük RAID dizisine kopyalama yapıyorum.
tbenz9,

@ tbenz9 Ben tek bir disk olmadığını anladım! Bazı hızlı işaretçilere bazı işaretçiler ekledim, maalesef en azından bunları derlemenizi gerektirecek ... Ama kesinlikle disklerinizin (hatta RAM'iniz) veri sağlayabildiği kadar hızlı çalışacaklar. (Ve Mark Adler v. Adler32'yi merak ediyorsanız, evet, bu
Adler32'nin

@derobert, Test etmek için küçük dosyalar kullanmak yerine, 1TB gibi büyük bir dosyayla test etmemelisiniz?
Pacerier

@derobert, Neden kullanmıyorsun shasum?
Pacerier

@ OpenSSL'nin yerleşik benchmarkından elde edilen çıktı makinesi. Daha uzun bloklarda şüphesiz, biraz daha hızlı olacak, ancak sıralamanın değişmesi pek olası değil (test ettiği tüm boyutlarda tutarlıydı). Shasum'un OpenSSL'den daha hızlı bir uygulaması var mı? Günümüzde dürüst olmak gerekirse, hızlı bir şifreleme özeti istiyorsanız, BLAKE2'yi kullanırsınız.
derobert

9

opensslKomut birkaç mesaj külliyatlar destekler. Ben denemek mümkün olanların, md4zamanında 65 yaklaşık% olarak çalıştırmak gibi görünüyor md5ve zamanı% 54 yaklaşık sha1(ı ile test bir dosya için).

Orada da bir var md2belgelerinde, ancak aynı sonuçları verir gibi görünüyor md5.

Çok kabaca, hızın kalite ile ters orantılı olduğu görülüyor, ancak (muhtemelen) bilinçli bir çarpışma yaratan bir rakip hakkında endişelenmediğiniz için, bu çok fazla bir sorun olmamalı.

Daha yaşlı ve daha basit mesaj özeti için etrafa bakabilirsiniz ( md1örneğin bir vardı)?

Küçük bir nokta: Yararsız bir kullanımıcat var . Ziyade:

cat foo.box | nc <archive IP> 1234

kullanabilirsiniz:

nc <archive IP> 1234 < foo.box

ya da:

< foo.box nc <archive IP> 1234

Bunu yapmak bir işlemi kurtarır, ancak muhtemelen performans üzerinde önemli bir etkisi olmaz.


1
Kediyle ilgili ipucu için teşekkürler, soru ile ilgili değil, ancak yine de yararlı bir ipucu. Şerefe!
tbenz9

@ tbenz9: okunabilir kodun hata ayıklaması, bakımı ve değiştirilmesi kolaydır. “Yararsız cat” bu nedenle mutlaka tamamen fena değil. Hiçbir performans kazancı onu kaçınarak varsa, o zaman bile varsaysak, daha rahat konum ne olursa olsun gitmek daha iyi sen bu kodun sürdürücü olacaktır.
iconoclast

1
@Keith, Link down ..
Pacerier

4

İki seçenek:

kullanım sha1sum

sha1sum foo.box

Bazı durumlarda sha1sum daha hızlıdır .


kullanım rsync

Aktarılması daha uzun sürecek, ancak rsync dosyanın sağlam olduğunu doğruladı.

Rsync man sayfasından

Rsync’in her zaman, aktarılan her dosyanın, dosya aktarılırken oluşturulan tam bir sağlama toplamı denetleyerek alıcı tarafa doğru şekilde yeniden yapılandırıldığını doğrular.


1
Sha1sum'daki bahşiş için teşekkürler, rsync 10 saniyeden fazla sürüyor, nc ve md5sum kullanarak aynı dosyayı aktarabilir ve md5sums'leri yaklaşık 4 saat içinde çalıştırabilirim. 4 saatimi daha da düşürmeye çalışıyorum.
tbenz9

3

Bilim ilerliyor. Yeni BLAKE2 karma işlevinin MD5'ten daha hızlı olduğu (ve kriptografik olarak önyükleme için çok daha güçlü) görünmektedir.

Referans: https://leastauthority.com/blog/BLAKE2-harder-better-faster-stronger-than-MD5.html

Zooko'nun slaytlarından:

Intel Core i5-3210M (Ivy Bridge) 
işlevindeki bayt başına çevrimler bayt başına çevrimler
uzun msg 4096 B 64 B MD5 5.0 5.2 13.1 SHA1 4.7 4.8 13.7 SHA256 12,8 13,0 30,0 Keccak 8.2 8.5 26.0 BLAKE1 5.8 6.0 14.9 BLAKE2 3.5 3.5 9.3

2

Muhtemelen iyi bir karmadan daha iyisini yapamazsın. Herhangi birinin çok daha hızlı olup olmadığını görmek için diğer karma / sağlama toplamı işlevlerini kontrol etmek isteyebilirsiniz md5sum. MD5 kadar güçlü bir şeye ihtiyacınız olmayabilir. MD5 (ve SHA1 gibi şeyler) kriptografik olarak güçlü olacak şekilde tasarlanmıştır, bu nedenle bir saldırganın / sahtekarın varolan bir değerle aynı hash değerine sahip yeni bir dosya oluşturması imkansızdır (yani, imzalı e ile kurcalamayı zorlaştırmak için -postalar ve diğer belgeler). İletişiminize yapılan bir saldırıdan endişe duymuyorsanız, ancak yalnızca bir fabrika çıkışı hatası hatası durumunda, döngüsel artıklık denetimi (CRC) gibi bir şey yeterince iyi olabilir. (Ama daha hızlı olacağını bilmiyorum.)

Başka bir yaklaşım, karışıma aktarıma paralel olarak yapmaya çalışmaktır. Bu, toplam süreyi kısaltabilir ve transferin bitmesini beklemek zorunda kalan iritasyon faktörünü kesinlikle azaltabilir ve daha sonra MD5'in bitmesini bekleyebilir. Bunu test etmedim, ancak böyle bir şey yapmak mümkün olmalı:

  • Kaynak makinede:

    mkfifo myfifo
    tee myfifo < source_file | nc dest_host  port_number & md5sum myfifo
    
  • Hedef makinede:

    mkfifo myfifo
    nc -l -p port_number | tee myfifo> dest_file & md5sum myfifo
    

Elbette dosyaların boyutlarını kontrol etmek, bayt sayısının düştüğünü tespit etmek için iyi ve hızlı bir yoldur.


2

Büyük dosyalar göndermek bir acıdır. Neden her öbek için bir karma üreten dosyaları öbek yapmayı denemiyor ve sonra hedefe gönderiyor ve ardından karmaşayı kontrol edip topakları birleştiriyorsunuz.

Kişisel bir BitTorrent ağı da kurabilirsiniz. Bu, her şeyin güvenli bir şekilde ulaşmasını sağlar.


Anladığım kadarıyla bir kaynak ve bir hedef bir BitTorrent ağının fayda sağlayamayacağı. Bu sadece birçok kaynaktan birçok varış noktasına giderken fayda sağlamaz mı?
tbenz9

Bu yaklaşımı önermeyi düşündüm (giriş dosyasını parçalara ayırma, ayrı ayrı gönderme ve diğer uca tekrar monte etme) ve bir iyileştirme bile olsa, performansı nasıl nötr hale getireceğini çözemedim. Hala aynı miktarda ağ aktarma süresine sahipsiniz, ancak her iki uçta daha fazla ek yükünüz var. Bu aslında, kaynak makinesinden dosya kopyalama gerektirir kaynak makinesine kopyalama daha sonra, hedef makineye kopyalama, ve hedef makineye hedef makineden . Büyük RAM disklerde bile, bu ücretsiz değildir.
Scott

1
Bu yaklaşımın tek yararı, bir iletim hatasından daha hızlı iyileşme de dahil olmak üzere yeniden başlatılabilirliktir. OP ne kadar sıklıkla başarısızlığa uğradığını söylemedi ve bunun optimize etmek istediği bir şey olduğunu göstermedi.
Scott

@ tben9 Bittorrent, tek bir dosya aktarımı için geçerli olan araçtır. Dosyayla ilgili karma bilgiye sahip olmak, son müşterinin indirilen verileri doğrulayabilmesi ve gerektiğinde düzeltebilmesi anlamına gelir. Çoklu kaynaklar hız içindir. Bu nedenle, evet, bu durumda, bir dosyanın doğru şekilde aktarıldığından emin olmak için BT kullanmak faydalı olur.
36’daki aldatmaca
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.