Je transfère fréquemment des images de machine virtuelle des hyperviseurs vers un serveur d'archives pour un stockage à long terme.
Je transfère en utilisant netcat car il est plus rapide que scp, rsync, ect ..
hypervisor$ cat foo.box | nc <archive IP> 1234
archive$ nc -l -p 1234 > foo.box
Une fois le transfert du fichier terminé, je vérifie qu'il n'y a pas eu de corruption en exécutant md5sum
à la fois la cible et la source.
Malheureusement, l'exécution d'une somme md5 sur un fichier volumineux peut prendre très longtemps. Comment comparer plus rapidement l'intégrité de deux gros fichiers?
Mise à jour:
- Ma transmission est rarement interrompue, donc la capacité de redémarrage n'est pas un problème.
- Il faut généralement 3-4 heures pour transférer via NC, puis 40 minutes pour obtenir la somme md5.
- La sécurité du hachage n'est pas un problème dans ce cas.
Réponses:
Vous pouvez utiliser tee pour faire la somme à la volée avec quelque chose comme ça (adaptez les commandes netcat à vos besoins):
Serveur:
Client:
la source
md5deep
a un mode "chunk" ( md5deep.sourceforge.net/md5deep.html ) qui peut être utile pour cela.La réponse de Nerdwaller à propos de l'utilisation
tee
pour transférer et calculer simultanément une somme de contrôle est une bonne approche si vous êtes principalement préoccupé par la corruption sur le réseau. Il ne vous protégera pas contre la corruption sur le chemin du disque, etc., car il prend la somme de contrôle avant qu'il ne frappe le disque.Mais je voudrais ajouter quelque chose:
1 TiB / 40 minutes ≈ 437 MiB / sec 1 .
C'est assez rapide, en fait. N'oubliez pas que si vous n'avez pas beaucoup de RAM, cela doit revenir du stockage. Donc, la première chose à vérifier est de regarder
iostat -kx 10
pendant que vous exécutez vos sommes de contrôle; en particulier, vous voulez faire attention à la%util
colonne. Si vous fixez les disques (près de 100%), la réponse est d'acheter un stockage plus rapide.Sinon, comme d'autres affiches l'ont mentionné, vous pouvez essayer différents algorithmes de somme de contrôle. MD4, MD5 et SHA-1 sont tous conçus pour être des hachages cryptographiques (bien qu'aucun de ceux-ci ne devrait plus être utilisé à cette fin; tous sont considérés comme trop faibles). En termes de vitesse, vous pouvez les comparer avec
openssl speed md4 md5 sha1 sha256
. J'ai jeté dans SHA256 pour avoir au moins un hachage encore assez fort.De ce qui précède, vous pouvez voir que MD4 est le plus rapide et SHA256 le plus lent. Ce résultat est typique sur du matériel de type PC, au moins.
Si vous voulez encore plus de performances (au prix d'être triviales à falsifier et également moins susceptibles de détecter la corruption), vous voulez regarder un hachage CRC ou Adler. Des deux, Adler est généralement plus rapide, mais plus faible. Malheureusement, je ne connais aucune implémentation de ligne de commande vraiment rapide; les programmes sur mon système sont tous plus lents que le md4 d'OpenSSL.
Donc, votre meilleur pari en termes de vitesse est
openssl md4 -r
(le-r
fait ressembler à une sortie md5sum).Si vous êtes prêt à faire de la compilation et / ou une programmation minimale, consultez le code de Mark Adler sur Stack Overflow et également xxhash . Si vous avez SSE 4.2, vous ne pourrez pas battre la vitesse de l'instruction matérielle CRC.
1 1 TiB = 1024⁴ octets; 1 Mio = 1024² octets. Vient à 17417MB / sec avec des puissances de 1000 unités.
la source
shasum
place?La
openssl
commande prend en charge plusieurs résumés de messages. Parmi ceux que j'ai pu essayer,md4
semble fonctionner dans environ 65% du tempsmd5
et environ 54% du tempssha1
(pour le seul fichier que j'ai testé).Il y a aussi un
md2
dans la documentation, mais il semble donner les mêmes résultats quemd5
.En gros, la vitesse semble être inversement liée à la qualité, mais puisque vous n'êtes (probablement) pas préoccupé par un adversaire créant une collision délibérée, cela ne devrait pas être un gros problème.
Vous pourriez chercher des résumés de messages plus anciens et plus simples (y en avait-il un
md1
, par exemple)?Un point mineur: vous avez une utilisation inutile de
cat
. Plutôt que:vous pouvez utiliser:
ou même:
Cela permet d'économiser un processus, mais n'aura probablement aucun effet significatif sur les performances.
la source
cat
" n'est donc pas nécessairement entièrement mauvais. S'il n'y a pas de gain de performances en l'évitant, il est préférable d'aller avec tout ce qui vous convient le mieux, en supposant que vous serez le responsable de ce code.Deux options:
Utilisation
sha1sum
Dans certaines circonstances, le sha1sum est plus rapide .
Utilisation
rsync
Le transfert prendra plus de temps, mais rsync vérifie que le fichier est arrivé intact.
Depuis la page de manuel de rsync
la source
La science progresse. Il semble que la nouvelle fonction de hachage BLAKE2 soit plus rapide que MD5 (et cryptographiquement beaucoup plus puissante pour démarrer).
Référence: https://leastauthority.com/blog/BLAKE2-harder-better-faster-stronger-than-MD5.html
Des diapositives de Zooko:
la source
Vous ne pouvez probablement pas faire mieux qu'un bon hachage. Vous voudrez peut-être vérifier d'autres fonctions de hachage / somme de contrôle pour voir si certaines sont beaucoup plus rapides que
md5sum
. Notez que vous pourriez ne pas avoir besoin de quelque chose d'aussi solide que MD5. MD5 (et des choses comme SHA1) sont conçues pour être cryptographiquement solides, il est donc impossible pour un attaquant / imposteur de créer un nouveau fichier qui a la même valeur de hachage qu'une valeur existante (c.-à-d., Pour qu'il soit difficile de falsifier l'e signé) -mails et autres documents). Si vous n'êtes pas préoccupé par une attaque sur vos communications, mais uniquement par une erreur de communication courante, quelque chose comme un contrôle de redondance cyclique (CRC) peut être suffisant. (Mais je ne sais pas si ce serait plus rapide.)Une autre approche consiste à essayer de faire le hachage en parallèle avec le transfert. Cela pourrait réduire le temps global et pourrait certainement réduire le facteur d'irritation d'avoir besoin d'attendre la fin du transfert, puis d'attendre à nouveau la fin du MD5. Je n'ai pas testé cela, mais il devrait être possible de faire quelque chose comme ça:
Sur la machine source:
Sur la machine de destination:
Bien sûr, la vérification de la taille des fichiers est un bon moyen rapide de détecter si des octets ont été supprimés.
la source
L'envoi de fichiers volumineux est pénible. Pourquoi ne pas essayer de fragmenter les fichiers en générant un hachage pour chaque morceau, puis de l'envoyer à la destination, puis de vérifier le hachage et de joindre les morceaux.
Vous pouvez également configurer un réseau BitTorrent personnel. Cela garantirait que le tout parvienne en toute sécurité.
la source