Est-ce que rsync vérifie les fichiers copiés entre deux lecteurs locaux?

65

Je souhaite créer une nouvelle copie d’un grand nombre de fichiers d’un lecteur local à un autre.

J'ai lu que rsync effectue une comparaison de somme de contrôle des fichiers lors de leur envoi vers une machine distante via un réseau.

  1. Est-ce que rsync fera la comparaison lors de la copie des fichiers entre deux lecteurs locaux?

  2. Si c'est le cas, est-ce une valeur sûre? Ou vaut-il mieux faire une comparaison octet par octet?

Frez
la source

Réponses:

77

rsync utilise toujours des sommes de contrôle pour vérifier qu'un fichier a été transféré correctement. Si le fichier de destination existe déjà, rsync peut ignorer la mise à jour du fichier si l'heure et la taille de modification correspondent au fichier source, mais si rsync décide que les données doivent être transférées, les sommes de contrôle sont toujours utilisées pour les données transférées entre les processus rsync d'envoi et de réception. . Cela permet de vérifier que les données reçues sont les mêmes que les données envoyées avec une probabilité élevée, sans le lourd fardeau lié à une comparaison au niveau octet sur le réseau.

Une fois que les données du fichier sont reçues, rsync les écrit dans le fichier et garantit que si le noyau indique que l'écriture est réussie, les données ont été écrites sans altération du disque. rsync ne relit pas les données et ne les compare pas à la somme de contrôle connue en tant que vérification supplémentaire.

En ce qui concerne la vérification elle-même, pour le protocole 30 et les suivants (premier supporté en 3.0.0), rsync utilise MD5 . Pour les protocoles plus anciens, la somme de contrôle utilisée est MD4 .

Bien que longtemps considéré comme obsolète pour les hachages cryptographiques sécurisés, MD5 et MD4 restent adéquats pour la vérification de la corruption des fichiers.

Source: la page de manuel et le code source de rsync à vérifier.

Kyle Jones
la source
3
Je déteste faire éclater la bulle de tout le monde, mais rsync ne vérifie que la vérification de somme si le drapeau -c est ajouté!
27
@clint Non, la réponse est correcte. Dans l'explication du -cdrapeau par la page de manuel : "Notez que rsync vérifie toujours que chaque fichier transféré a été correctement reconstruit du côté de la réception en vérifiant la somme de contrôle de l'ensemble du fichier générée lors du transfert du fichier, mais cette analyse est ensuite automatique. la vérification n'a rien à voir avec la vérification préalable de cette option "Ce fichier doit-il être mis à jour?" chèque. "
Michael Mrozek
7
Cette réponse ne précise pas si elle vérifie réellement le fichier après une copie. Si la somme de contrôle est calculée lors de la réception du fichier, il ne s'agit pas d'une somme de contrôle post-copie et vous ne pouvez pas être sûr que le fichier est écrit correctement. Vous devrez alors effectuer une comparaison supplémentaire.
Andre Miller
7
Vote négatif parce que je n'aime pas le fait que cette réponse soit détaillée, bien écrite, techniquement correcte et en même temps tellement hors sujet qu'elle induit en erreur les lecteurs. Le problème est que la réponse donne beaucoup de détails sur ce qui se passe pendant le transfert, tandis que le questionneur précise qu'il se soucie des copies locales et non des transferts réseau. Je suis à peu près sûr que Kyle Jones ne voulait induire personne en erreur, mais cette réponse (IMHO) le fait.
Ndemou
4
Kyle Je ne crois pas que vous répondiez est faux. J'ai déjà noté que c'est «détaillé, bien écrit et techniquement correct», mais cela nécessite que le lecteur soit inutilement concentré et prudent. Pourquoi couvrir le manque de vérification des données du disque qui est interrogé à mi-parcours de votre réponse après 117 mots qui décrivent de manière répétée un autre processus de vérification non pertinent? En tout cas merci pour votre temps et votre intérêt pour cette discussion. Je l'apprécie sincèrement.
ndemou
40

rsyncne fait pas la vérification post-copie pour les copies de fichiers locaux. Vous pouvez vérifier que cela n’est pas le cas en rsynccopiant un fichier volumineux sur un lecteur lent (USB), puis en copiant le même fichier avec cp, par exemple:

time rsync bigfile /mnt/usb/bigfile

time cp bigfile /mnt/usb/bigfile

Les deux commandes prennent à peu près le même temps. Par conséquent, vous ne rsyncpouvez pas effectuer la somme de contrôle, car cela impliquerait de relire le fichier de destination sur le disque lent.

La manpage est malheureusement trompeuse à ce sujet. J'ai également vérifié cela avec: une fois stracela copie terminée, rsyncaucun read()appel n'est effectué sur le fichier de destination; il ne peut donc pas y avoir de contrôle. Une dernière chose que vous pouvez vérifier, c’est avec quelque chose comme iotop: vous voyez rsynclire et écrire simultanément (copie de la source à la destination), puis il se ferme. S'il s'agissait de vérifier l'intégrité, il y aurait une phase en lecture seule.

Félix
la source
1
"La page de manuel est malheureusement trompeuse à ce sujet. Je l'ai également vérifié avec strace" Avez-vous tracé la procédure distante, exécutant le processus rsync ou le processus local? Il y a deux ... l'un tourne sur la destination, même si vous utilisez ssh.
user129070
8
Il n'y a pas de vérification post-copie pour les copies, locales ou distantes. Vous courez à rsync -cnouveau si vous voulez le forcer à vérifier.
Psusi
La vérification est effectuée sur le flux entrant au fur et à mesure. Il n'est pas nécessaire de le relire du disque si le système de fichiers a confirmé qu'il a été écrit.
Stop Harming Monica
17

rsynceffectue une comparaison de somme de contrôle avant de copier (dans certains cas), pour éviter de copier ce qui existe déjà. Le but de la comparaison de somme de contrôle n'est pas de vérifier que la copie a réussi. C’est le travail de l’infrastructure sous-jacente: les pilotes de système de fichiers, les pilotes de disque, les pilotes de réseau, etc. Des applications individuelles telles que celle rsyncn’ont pas besoin de s’inquiéter de cette folie. Tout ce qu'il rsyncfaut faire (et fait!) Est de vérifier les valeurs de retour des appels système pour s'assurer qu'il n'y avait pas d'erreur.

Gilles, arrête de faire le mal
la source
1
Cela semble contredire la réponse acceptée ...
djule5
2
@ djule5 De quelle manière? La réponse acceptée semble concerner principalement la manière dont rsync vérifie les fichiers transférés , mais la question et ma réponse concernent les copies locales .
Gilles 'SO- arrête d'être méchant'
3
Ok, dans ce contexte, je conviens que cela a plus de sens. Ainsi, "le point de comparaison de la somme de contrôle n'est pas de vérifier que la copie a réussi" est vrai uniquement pour les copies locales ; et "les sommes de contrôle sont toujours utilisées sur les données transférées entre les processus d'envoi et de réception rsync" n'est vrai que pour les copies transférées . Je trouve la réponse acceptée trompeuse en ce qui concerne la question et je pense que votre réponse devrait être celle qui a été acceptée (mes 2 centimes seulement).
djule5
Je pense toujours que cette réponse est légèrement trompeuse. Par exemple, il est indiqué que les pilotes de réseau en particulier vérifient si la copie a réussi - mais si vous disiez que la comparaison de somme de contrôle ne vérifie pas si la copie a réussi pour local uniquement, les pilotes de réseau n'entrent pas en jeu.
Ken
1
@Ken je ne comprends pas le point que vous essayez de faire. Je soupçonne que vous avez mal interprété quelque chose. Les pilotes de réseau n'entrent en jeu que s'il existe une copie du réseau. Rsync lui-même effectue une comparaison de la somme de contrôle avant de faire une copie, afin de décider si copier. Rsync ne fait aucune comparaison de somme de contrôle après la copie (parce que ce serait inutile: il sait ce que cela vient de copier).
Gilles 'SO- arrête d'être méchant'
4

Réponses rapides et sales, directement aux questions.

Q: Est-ce rsyncque la comparaison sera faite lors de la copie des fichiers entre deux lecteurs locaux? R: Il faudra comparer pour savoir quoi copier.

Q: Si cela se vérifie - est-ce une valeur sûre? Ou vaut-il mieux faire une comparaison octet par octet? A: aussi sûr que les mathématiques derrière la somme de contrôle du fichier MD5. Vous pouvez essayer de faire des expériences simples pour apprendre et faire confiance à l'outil.

Réponse longue: Je suppose que vous vouliez rsyncfaire la comparaison de fichiers (bit par bit ou par somme de contrôle) après la copie des fichiers. Si vous êtes l’un des rares à apprécier l’intégrité des données, les éléments ci-dessous pourraient vous être utiles:

rsync -avh [source] [destination] && rsync -avhc [source] [destination] 

Le rsyncdossier de fichiers de code ci-dessus lors de la première exécution et s’il est complet sans problème, s’exécutera de rsyncnouveau immédiatement tout en effectuant la même comparaison de noms de fichiers en utilisant le hachage du fichier entier.

MN
la source
1

Utilisation de rsync pour vérifier l'intégrité d'un duplicata

Pour garantir que ce test relise physiquement les fichiers du support de lecteur, je suggère de mettre les deux lecteurs hors tension, puis de les redémarrer avant d'exécuter ce test. Cela effacera leurs caches volatiles internes.

Si vous ne redémarrez pas également Linux, vous devriez au moins supprimer les caches ( * ) avec:

sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

Ensuite, relisez les deux arbres et comparez leurs sommes de contrôle:

rsync --dry-run --checksum --itemize-changes --archive SRC DEST

La somme de contrôle rsync moderne utilise MD5, qui est de 128 bits. La probabilité que cela ne détecte pas une erreur dans un fichier individuel est astronomique (quelques discussions ici ), mais pas impossible.

nobar
la source
Bonne chance pour obtenir les dernières barres obliques.
nobar
Pas de nouvelles, bonnes nouvelles.
nobar
Ne vous embêtez pas --checksumjusqu'à ce que le test soit passé sans cela.
nobar