J'utilise rsync pour copier des fichiers depuis un certain temps. D'après ce que je comprends, rsync est plus rapide que cp lorsque certains des fichiers à transférer se trouvent déjà dans le répertoire de destination, ne transférant que la différence incrémentale (c'est-à-dire les "deltas").
Si cela est correct, serait-il avantageux d'utiliser rsync pour déplacer le contenu d'un dossier A , par exemple d'un dossier B , où B est vide?
Le dossier A contient près de 1 To de données (et des millions de fichiers). Le transfert se ferait sur un réseau local ( A et B étant sur différents systèmes de fichiers, les deux montés sur un superordinateur, par exemple, A est NFS et B est en lustre ).
À part cela, quels indicateurs devrais-je utiliser pour demander à rsync de déplacer (et non de copier) les fichiers de A à B (c'est-à-dire de supprimer A lorsque le transfert est terminé)?
rsync
pouvoir remplacermv
. Je m'attendraismv
à être plus rapide sur la plupart des types de système de fichiers lorsque la source et la destination se trouvent dans le même système de fichiers, car ilrsync
faudrait en faire une copie quoi qu'il en soit, etmv
risquerait probablement de modifier quelques entrées de répertoire. Ce que je trouve le plus proche de anrsync mv
est la--remove-source-files
commande, mais cela ne supprime pas les répertoires.mv
plus vite?mv
ne peut pas fonctionner sur un réseau - il faudrait s’appuyer sur un montage local (par exemple, NFS). Si le goulot d'étranglement est le réseau,rsync
serait probablement plus rapide quemv
parce quersync
peut faire la compression.cp
a l'-u
option de copier le fichier source s'il est plus récent que le fichier de destination ou si le fichier de destination est manquantRéponses:
Vous pouvez passer
--remove-source-files
à rsync pour déplacer des fichiers au lieu de les copier.Mais dans votre cas, l’utilisation de rsync est inutile, car la destination est vide. Une plaine
mv
fera le travail aussi vite que possible.Dans votre cas, ce qui pourrait faire une différence en termes de performances est le choix du protocole réseau, si vous avez le choix entre NFS, Samba, sshfs, sftp, rsync sur ssh, tar transféré dans ssh, etc. La vitesse relative de ces méthodes dépend sur la taille des fichiers, la bande passante du réseau et du disque, et d’autres facteurs, il n’ya donc aucun moyen de donner des conseils généraux, vous devrez exécuter vos propres tests.
la source
--remove-source-files
seul supprime les fichiers de la source. si vous voulez effacer notre source, ne devriez-vous pas faire un rm -rf (oufind
tous les répertoires et transmettre-delete
) sur la source après que rsync s'exécute avec succès?--checksum
pour lui dire de vérifier les résultats de la première synchronisation.Puisque
--remove-source-files
ne supprime pas les répertoires, j'émets les commandes suivantes pour déplacer des fichiers sur ssh:Personnellement, j'aime bien cette
--progress
fonctionnalité, car je fais ce transfert manuellement. Supprimez-le si vous utilisez un script. Je pense que cela ralentira légèrement les transferts. L'find
option delete de la commande ne supprime que les répertoires vides - ne l'utilisez pasrm -rf
car elle risquerait de supprimer des répertoires non vides au cas où un fichier ne serait pas transféré. L'-delete
option active l'-depth
option de sorte que les arborescences de répertoires vides soient supprimées à partir du bas.la source
-delete
est beaucoup plus agréable que-exec rmdir {} +
etc.En général, comme l'a dit Gilles, il n'y a aucun avantage à
rsync
déplacer des fichiers lorsquemv
le même travail est effectué plus facilement et il n'y a pas de gain de vitesse potentiel entre les systèmes de fichiers ordinaires.Il y a cependant des moments où il y a un avantage. En particulier, si vous avez des doutes sur la stabilité de la source, de la destination ou de la machine effectuant le travail, l’utiliser
rsync
vous permet de reprendre. Cela peut constituer un avantage notable si votre transfert est très volumineux et que votre réseau électrique n'est pas fiable, par exemple. Utiliser rsync sera un moyen plus stable d’éviter la corruption des données en cas de défaillance et de reprendre là où vous vous êtes arrêté.la source
mv
vaut mieux que la cible et la source se trouvent dans la même partition, de sorte quemv
seules les métadonnées du fichier sont éditées au lieu d'être copiées.rsync
plutôt que de mv, c’est quand je veux conserver la structure des dossiers (si vous utilisez--relative
).Je me suis trouvé dans une situation où rsync est plus rapide que mv simplement parce que mv ne peut pas gérer le nombre de fichiers du répertoire. J'ai 1,8 million de photos d'une caméra de sécurité qui a fonctionné pendant 20 jours et la commande mv se ferme avec un échec car elle ne peut pas allouer de ressources.
Cependant, rsync semble traiter tous les fichiers sans problème.
la source
Si vous souhaitez fusionner des répertoires de manière récursive ... déplacez un répertoire dans un autre répertoire avec des noms de répertoires potentiellement dupliqués , veuillez consulter ma réponse ici sur serverfault.com.
mv
effectue un travail médiocre lorsque des répertoires portant le même nom existent etrsync
copie (lit + écrit toutes les données) chaque fichier au lieu de les déplacer (lecture et écriture de métadonnées uniquement).la source
Il n’existe aucun moyen de déplacer des fichiers à l’aide de rsync comme le ferait une commande Linux mv. En utilisant --remove-source-files, vous copiez essentiellement des fichiers vers la destination, puis supprimez des fichiers (sauf les répertoires) de la source. Cela peut vous permettre de déplacer des fichiers, mais vous ne gagnerez PAS de temps ni d'opération d'E / S.
la source