J'ai transféré récursivement de nombreux fichiers et dossiers avec scp
, à l'aide de la commande:
scp -rp /source/folder [email protected]:/destination/folder
Une fois le transfert terminé, dois-je vérifier si tous les fichiers ont été transférés sans aucune corruption, ou en scp
prend soin (c'est-à-dire affiche un message d'erreur si l'un des fichiers n'est pas correctement transféré)?
scp
et un message d'erreur qui l'accompagne à stderr , il aura tout copié correctement et complètement.rsync
si vous le pouvez. Il copie les validations pour chaque fichier après la fin d'une transaction, c'est donc une bonne idée de l'utiliser pour être un peu plus sûr.Réponses:
scp
vérifie qu'il a copié toutes les données envoyées par l'autre partie. L'intégrité du transfert est garantie par le protocole de canal cryptographique. Vous n'avez donc pas besoin de vérifier l'intégrité après le transfert. Ce serait redondant et très peu susceptible de détecter une erreur matérielle, car les données que vous comparez seraient probablement lues dans le cache. La vérification périodique des données peut être utile, mais la vérification immédiatement après le transfert est inutile.Vous devez cependant vous assurer que cela
scp
ne vous dit pas que quelque chose s'est mal passé. Il devrait y avoir un message d'erreur, mais l'indicateur fiable est qu'ilscp
renvoie un code de sortie différent de zéro en cas de problème.Plus précisément, vous savez que le fichier a été transmis correctement s'il
scp
renvoie 0 (c'est-à-dire le code d'état de réussite). Il est nécessaire de vérifier que l'état de sortie est 0 lorsque vous exécutez une commande de toute façon. Siscp
renvoie un état d'erreur, ou s'il est tué par un signal, ou s'il ne meurt jamais parce que le système se bloque ou perd de la puissance pendant son fonctionnement, alors vous n'avez aucune garantie. En particulier, puisquescp
copie le fichier directement dans son nom final, cela signifie que vous pouvez vous retrouver avec un fichier partiel en cas de panne du système. La partie copiée est garantie correcte mais le fichier peut être tronqué.Pour une meilleure fiabilité, utilisez rsync au lieu de scp. Sauf indication contraire, rsync écrit dans un fichier temporaire et le met en place une fois qu'il est terminé. Ainsi, si rsync renvoie un code de réussite, vous savez que le fichier est présent et une copie correcte et complète; si rsync n'a pas renvoyé de code d'erreur, aucun fichier ne sera présent (sauf s'il y avait une ancienne version du fichier, auquel cas cette ancienne version ne sera pas modifiée).
la source
Je n'ai jamais eu de problème de corruption après
scp
quelque chose, mais si cela vous inquiète, vous pouvez toujours exécutermd5sum <filename>
les deux systèmes pour vous assurer qu'ils sont identiques.la source
Selon la suggestion de @ david-king, il s'agit d'une
md5
solution basée sur la vérification de l'intégrité des fichiers après le transfert. Exécutez la commande suivante une fois aprèscd
ING/source/folder
sur la machine locale et une fois aprèscd
ING/destination/folder
sur l'hôte distant:find . -type f -print0 | xargs -0 -I {} md5sum {} | md5sum
. Le hachage résultant doit être identique après un transfert réussi.Mise à jour:
Selon cette réponse à une question similaire sur ServerFault ,(Veuillez vérifier cette réponse par @Gilles pour plus de détails). Alternative à la vérification post-transfert des hachages de fichiers, vous pouvez utiliserscp
ne garantit pas l'intégrité des fichiersrsync
pour transférer des fichiers et vérifier son code retour.Mise à jour 2: les éléments suivants vérifient uniquement si les fichiers et leurs tailles respectives correspondent après le transfert:
find . -type f -print0 | xargs -0 -I {} stat --printf="%n %s\n" {} | sort | md5sum
la source
scp
du code de retour suffit et la vérification des hachages est inutile.scp
rendements 0 , il ne garantit pas que le système de fichiers n'a pas sali les choses, afin de vérifier les hash est toujours utile pour vérifier l'intégrité des données sensibles si quelqu'un choisissent d'utiliserscp
plusrsync
.