2010-06-25 12:29:20 +0000 2010-06-25 12:29:20 +0000
126
126

Quelles sont les différences entre les options de suppression de rsync ?

Je vois sur la page de manuel rsync qu'il y a un certain nombre d'options delete mais je ne comprends pas vraiment les différences entre elles. Quelles sont les différences entre ces options ?

--del an alias for --delete-during
 --delete delete extraneous files from dest dirs
 --delete-before receiver deletes before transfer (default)
 --delete-during receiver deletes during xfer, not before
 --delete-delay find deletions during, delete after
 --delete-after receiver deletes after transfer, not before
 --delete-excluded also delete excluded files from dest dirs

Réponses (4)

125
125
125
2010-06-25 14:19:55 +0000
  • --del/--delete_during : Supprime les fichiers du répertoire de destination au fur et à mesure qu'ils sont copiés (économise de la mémoire par rapport à --delete-before : --delete-before : effectue un balayage séparé pour rechercher les fichiers effaçables)

  • --delete : Supprime les fichiers du répertoire de destination s'ils n'existent pas dans le répertoire source.

  • --delete-before : Supprime les fichiers dans le répertoire de destination avant de copier le fichier avec le même nom du répertoire source

  • --delete-during : Supprimer les fichiers dans le répertoire de destination pendant la copie du fichier avec le même nom du répertoire source

  • --delete-delay : Marquer les suppressions pendant le transfert, mais attendre que le transfert soit terminé

  • --delete-after : Le récepteur efface après le transfert, pas avant… Si une autre partie de rsync a déplacé des fichiers supplémentaires ailleurs, vous voudriez cela au lieu de --delete-delay, parce que --delete-delay décide de ce qu'il va effacer au milieu du transfert, alors que --delete-after vérifie dans le répertoire les fichiers qui doivent être effacés APRÈS que tout soit terminé.

  • --delete-excluded : Supprime les fichiers du répertoire de destination qui sont explicitement exclus du transfert du répertoire source.

Le but de rsync n'est pas de copier, c'est d'archiver. Il s'agit d'une distinction importante. Le traitement des fichiers supprimés/modifiés est essentiel et, dans de nombreux cas, nuancé.

Le drapeau --delete en particulier est un drapeau que j'ai souvent vu foiré. Beaucoup de gens utilisent rsync pour déplacer des fichiers vers un stockage de faible priorité, et dans ce cas, vous voulez que les fichiers que vous déplacez EXISTENT toujours dans le répertoire de destination. Ce n'est pas ce que fait delete : --delete permet de s'assurer que, lorsque vous supprimez un fichier du répertoire source, il est AUSSI supprimé de votre répertoire de destination, afin que votre destination ne soit pas pleine de saletés… Un jour, j'ai vu un type effacer sa sauvegarde en installant un nouveau disque et en ne désactivant pas son script rsync nocturne. Le script a vu que le répertoire source était maintenant vide, et il a supprimé tous les fichiers du répertoire de destination, pour qu'ils correspondent.

La plupart des autres options sont liées à l'espace ou aux performances. Le moment où vous supprimez les fichiers est important si vous voulez vous assurer que le transfert est réussi avant de faire quoi que ce soit, mais si votre appareil est trop petit pour gérer 2 copies de toutes les informations, vous devez supprimer au fur et à mesure, etc. Il est un peu farfelu en raison de sa longue histoire sur plusieurs plateformes : certaines options ont été ajoutées pour que les personnes habituées à certains comportements ne soient pas confondues.

2
2
2
2013-01-17 18:50:20 +0000

Un autre point qui mérite d'être mentionné est que si votre répertoire source se termine par /*, alors rsync ne prendra en compte que ces fichiers et non le répertoire lui-même (et donc l'absence de fichiers que vous voulez supprimer sur la destination).

Si vous spécifiez une option de suppression ci-dessus, mais que rsync semble ne pas supprimer, alors vérifiez que vous ne globalisez pas accidentellement et ne fournissez pas une liste de fichiers lorsque vous parlez du répertoire lui-même.

2
2
2
2010-06-25 12:57:07 +0000

Il y a deux choses qui se passent :

  1. qui fait la suppression
  2. Lorsque cela se produit

On peut demander à l'expéditeur ou au destinataire de faire la suppression (je ne suis pas sûr de la raison pour laquelle cela est important). Ainsi, lorsque rsync à partir d'un ordinateur se connecte au serveur rsync de l'autre côté, cela détermine qui lance effectivement la commande d'effacement.

Quand cela arrive, c'est assez facile… avant signifie que tous les fichiers sont supprimés, et ensuite rsync copie sur les fichiers. pendant signifie que lorsqu'il parcourt la liste des fichiers, il les supprime quand il en arrive à eux, et après signifie qu'il attend que tous les fichiers soient transférés et ensuite supprime le côté distant. Cela n'a d'importance que lorsque le transfert est interrompu.

0
0
0
2019-12-31 14:32:28 +0000

Par défaut rsync ne supprime aucun fichier du côté de la destination. Pour que rsync supprime des fichiers, vous devez utiliser au moins une des options de suppression.

Si vous ne vous souciez pas du moment où les fichiers sont supprimés, utilisez simplement --delete et laissez le choix à rsync. Vous pouvez combiner --delete avec d'autres options de suppression (cela n'entre pas en conflit) mais vous n'êtes pas obligé de le faire car toutes les autres options de suppression impliquent déjà --delete.

--delete-before fonctionne comme suit : rsync regarde quels fichiers sont présents à la source et quels fichiers sont présents à la destination, supprime tous les fichiers trouvés à la destination mais pas à la source, puis lance la synchronisation proprement dite. Cet ordre est utile si la destination a peu d'espace de stockage car il libère d'abord plus d'espace disque à la destination avant de commencer à transférer de nouveaux fichiers. L'inconvénient est que rsync nécessitera plus de mémoire pour effectuer l'opération et que toute l'opération se fait en deux étapes et est donc plus lente.

--delete-during fonctionne comme suit : rsync commence immédiatement à synchroniser les fichiers et lorsqu'il tombe sur un fichier qui n'existe qu'à la destination, il est supprimé. De cette façon, il n'y a pas de pénalité de vitesse et aucune mémoire supplémentaire n'est nécessaire. L'inconvénient est qu'il peut arriver qu'un grand nombre de nouveaux fichiers soient d'abord copiés vers les destinations avant que les fichiers supprimés ne soient effacés, de sorte que la destination peut nécessiter beaucoup plus d'espace de stockage sur le disque pendant l'opération qu'elle n'en a besoin à la fin, une fois l'opération terminée.

--delete-after fonctionne comme suit : Synchroniser d'abord tous les fichiers, puis effectuer la même opération que --delete-before avant la phase de synchronisation. C'est le pire choix dans la plupart des cas car il nécessite le plus de mémoire, le plus d'espace disque à la destination, et il est plus lent car il s'agit d'un processus en deux étapes ; en gros, il combine tous les inconvénients des deux autres méthodes. Cette option existe principalement dans le cas où vous utilisez des “fichiers de fusion” (ce que sont les fichiers de fusion et comment ils fonctionnent dépasse le cadre de cette réponse). Comme ces fichiers peuvent contenir des règles d'exclusion de fichiers lors de la suppression, les nouveaux fichiers de fusion doivent être copiés avant la phase de suppression si leur contenu doit être pris en compte pendant la phase de suppression. À moins que cela ne soit une exigence, --delete-after n'a aucun avantage.

--delete-delay est une option plutôt nouvelle (elle n'est pas disponible dans rsync 2.6.9, qui est toujours la valeur par défaut dans macOS 10.15 par exemple). Elle fonctionne comme --delete-during, sauf qu'elle ne supprime pas les fichiers immédiatement mais après la synchronisation, c'est donc un hybride de --delete-during et --delete-after. L'avantage est qu'il est plus rapide que --delete-after, l'inconvénient est qu'il nécessite plus de mémoire pendant la synchronisation.

--delete-excluded indique à rsync de ne pas seulement supprimer les fichiers manquants à la source mais aussi de supprimer les fichiers à la destination qui ont été exclus de la synchronisation (--exclude ou --exclude-from), que ces fichiers existent ou non à la source.