Interrompre rsync avec ctrl-c, dois-je utiliser `--partial` ou` --append`?

14

Je voudrais interrompre rsyncavec ctrl-c(disons après que la moitié du fichier a été transféré) et reprendre sans avoir à renvoyer les données qui ont déjà été transférées.

Les informations de stackexchange / google que j'ai trouvées semblent contradictoires. J'en ai trouvé certains qui disent utilisation --partialet d'autres qui disent utilisation --append. Pour moi, il semble que les deux fonctionnent.

Si je veux interrompre rsync avec ctrl-c, dois-je utiliser --partialou --append?

Si les deux fonctionnent, quand est-il préférable d'utiliser l'un contre l'autre?

Trevor Boyd Smith
la source

Réponses:

8

Pour redémarrer, --partialc'est suffisant. À utiliser --inplacesi vous ne voulez vraiment pas rsynccréer un fichier temporaire qui fusionne les données copiées existantes et les nouvelles, par exemple si rsyncvous rencontrez des problèmes d'autorisation pour créer un fichier temporaire dans le dossier cible.

À n'utiliser que --appendsi vous pouvez garantir que les données partiellement copiées sont toujours identiques à la source. (Il s'agit généralement d'une fausse optimisation.)

roaima
la source
1
donc quand j'utilise les options ci-dessus (en utilisant en fait --append-verify) et rsync prétend toujours que cela commence depuis le début, et je ne vois aucun changement dans la taille du fichier et le temps de fichier restant est ce qu'il était à l'origine quand j'ai commencé la copie, rsync ment, ou devrais-je m'inquiéter?
Michael
@Michael si vous avez une source et une destination locales, toutes les règles changent.
roaima
Je le faisais à travers le LAN, mais après un peu plus d'expérimentation, il semble que le problème est que, puisqu'il --append-verifydoit réellement lire les parties du fichier des deux côtés qui s'y trouvent, il n'est pas plus rapide en raison du goulot d'étranglement étant un disque plus ancien sur le côté lecture et non le LAN lui-même.
Michael
@Michael bien oui, si vous avez demandé la vérification des données déjà transmises alors il faut lire les données!
roaima
1
@alper Je n'ai jamais remarqué cette option auparavant. Il semble qu'il serait préférable de l'utiliser --partial-dir, mais je ne l'ai pas encore essayé.
roaima
3
  • --append suppose que le fichier existe déjà dans la destination, il ne fait que rsync pas vérifier le contenu déjà là (mais voir ci-dessous).
  • --partial indique à rsync de ne pas supprimer les fichiers partiellement transférés.

Vous aurez également besoin --inplacede --partial(cela est implicite avec --append).

S'avère en --inplacefait implique --partial, c'est pourquoi cela --appendsuffit (cela implique --inplacece qui implique --partial). Mais --partialseul ne suffit pas, vous en avez besoin --inplace, sinon rsync crée des fichiers temporaires au lieu de mettre à jour le dernier.

spuk
la source
Si je veux interrompre rsync avec ctrl-c, j'utiliserais --append? Parce que --partialpar lui-même ne reprendrait pas.
Trevor Boyd Smith
J'utiliserais juste --inplace. rsync "reprend toujours" (il essaie de transférer les données minimales nécessaires). Ce --appendqui est dit à rsync de ne pas additionner les données déjà à la destination, donc si le fichier partiel à la destination a été corrompu, il restera corrompu avec --append. --appendpourrait être intéressant si, par exemple, le fichier partiel est très volumineux et que vous ne pouvez pas attendre (et vous êtes sûr ou ne vous souciez pas s'il est corrompu), ou une autre situation spécifique.
spuk
1
sur Fedora 20, man rsyncl'option --appenddit... Implies --inplace
Trevor Boyd Smith
1
--inplacemarchera. --appendfonctionnera parce que (comme je l'ai dit dans la réponse) cela implique --inplace, ce qui implique --partial(qui gardera les fichiers partiellement transférés lorsqu'il est interrompu par Ctrl-c, ce qui était la question d'origine). Ainsi , --appendsignifie « faire comme --inplace, mais ne pas la somme de contrôle ce qui est déjà dans la destination Il est une différence importante Si vous ne vous inquiétez pas à ce sujet, utilisez...
spuk
1
alors quel est l'intérêt de --partial SANS --inplace
Evan Carroll