Trucs et astuces rsync préférés

57

Plus j'utilise, rsyncplus je réalise que c'est un couteau suisse de transfert de fichier. Il y a tellement d'options. J'ai récemment découvert que vous pouvez y aller --remove-source-fileset que cela supprimera un fichier de la source quand il aura été copié, ce qui en fait un peu plus un coup, plutôt qu'un programme de copie. :)

Quels sont vos trucs et astuces préférés de rsync?

Rory
la source

Réponses:

19

Essayez d’utiliser rsync version 3 si vous devez synchroniser de nombreux fichiers! La V3 construit sa liste de fichiers de manière incrémentielle, est beaucoup plus rapide et utilise moins de mémoire que la version 2.

Selon votre plate-forme, cela peut faire toute une différence. Sous OSX, la version 2.6.3 prenait plus d'une heure ou un plantage essayait de créer un index de 5 millions de fichiers, tandis que la version 3.0.2 que j'ai compilée a été copiée immédiatement.

robcast
la source
Il convient de noter que si vous utilisez certaines options (comme --delete-beforepar exemple), l'ancien comportement de "liste de construction en premier" est utilisé, car il est nécessaire pour que ces options fonctionnent correctement. Par conséquent, si vous ne voyez pas ce comportement, vérifiez si la les autres options que vous utilisez sont connues pour empêcher que cela soit possible. Cela peut être utile si vous utilisez rsync de manière interactive sur une grande arborescence et souhaitez forcer l'analyse initiale afin que la sortie --progresssoit précise (le nombre d'objets à comparer ne va jamais augmenter, aucun nouvel objet ne sera trouvé après l'analyse initiale. ).
David Spillett
18

Utilisation --link-destpour créer des sauvegardes basées sur des instantanés peu encombrantes, dans lesquelles vous semblez avoir plusieurs copies complètes des données sauvegardées (une pour chaque exécution de sauvegarde), mais les fichiers qui ne changent pas entre les exécutions sont liés par un lien physique au lieu de créer de nouvelles copies pour économiser de l’espace.

(en fait, j'utilise toujours la méthode rysnc-followed-by-par-cp -al qui permet d'atteindre le même objectif, voir http://www.mikerubel.org/computers/rsync_snapshots/ pour une description ancienne, mais néanmoins très bonne, des deux techniques et questions connexes)

Le seul inconvénient majeur de cette technique est que si un fichier est corrompu en raison d’une erreur de disque, il est tout aussi corrompu dans tous les instantanés liés à ce fichier, mais j’ai aussi des sauvegardes hors connexion qui permettraient de s’en protéger convenablement. L'autre chose à surveiller est que votre système de fichiers a suffisamment d'inodes ou vous en manquerez avant que vous ne manquiez réellement d'espace disque (bien que je n'ai jamais eu de problème avec les valeurs par défaut ext2 / 3).

Aussi, ne jamais oublier le très très utile --dry-runpour un peu de paranoïa en bonne santé, surtout lorsque vous utilisez les --delete*options.

David Spillett
la source
6
+1 pour --dry-run
David Z
1
Notez que -n est le raccourci pour --dry-run
ctennis
3
Je préfère m'en tenir aux noms longs, en particulier dans les scripts que d'autres pourraient éventuellement conserver. Cela clarifie ce qui est prévu sans référence aux documents.
David Spillett
+1 J'ai mis en œuvre une solution de sauvegarde de plusieurs To sur plusieurs machines avec la méthode --link-dest pour les instantanés à liaison fixe, comme décrit ci-dessus - elle fonctionnait parfaitement.
Matja
Si vous aimez les sauvegardes --link-dest, jetez un œil à Dirvish qui utilise rsync sous le capot
hfs
14

Si vous devez mettre à jour un site Web avec des fichiers volumineux via un lien lent, vous pouvez transférer les petits fichiers de la manière suivante:

rsync -a --max-size = 100K / var / www / il: / var / www /

alors faites ceci pour les gros fichiers:

rsync -a --min-size = 100K --bwlimit = 100 / var / www / il: / var / www /

rsync propose de nombreuses options utiles pour les sites Web. Malheureusement, il ne dispose pas d'un moyen intégré de détection des mises à jour simultanées. Vous devez donc ajouter une logique aux scripts cron pour éviter le chevauchement des écritures de fichiers volumineux.

Bob
la source
10

J'utilise l'option --existing lorsque j'essaie de garder un petit sous-ensemble de fichiers d'un répertoire synchronisé vers un autre emplacement.

TCampbell
la source
Merci! Cela m'a sauvé de l'écriture de règles de filtrage désagréables.
benzado
8

--rsh est à moi.

Je l'ai utilisé pour changer le chiffre sur ssh en quelque chose de plus rapide ( --rsh="ssh -c arcfour") et pour configurer une chaîne de sshs (il est recommandé de l'utiliser avec ssh-agent) pour synchroniser des fichiers entre hôtes ne pouvant pas parler directement. ( rsync -av --rsh="ssh -TA [email protected] ssh -TA -l userB" /tmp/foobar/ hostB:/tmp/foobar/)

Stephen Paul Lesniewski
la source
7
--time-limit

Lorsque cette option est utilisée, rsync s’arrête après T minutes et quitte. Je pense que cette option est utile lorsque vous synchronisez une grande quantité de données pendant la nuit (heures non pleines), puis que vous vous arrêtez quand il est temps que les gens commencent à utiliser le réseau, pendant la journée (heures pleines).

--stop-at=y-m-dTh:m

Cette option vous permet de spécifier à quel moment arrêter rsync.

Batch Mode

Le mode batch peut être utilisé pour appliquer le même ensemble de mises à jour à plusieurs systèmes identiques.

Jftuga
la source
Utile! J'avais utilisé la commande "at" avant de tuer le processus
Lionel
Patchs sources: rsync.samba.org/ftp/rsync/rsync-patches-3.1.0.tar.gz ; Win32 binaire avec le correctif inclus: itefix.no/i2/cwrsync
jftuga
2
Malheureusement, ces options ne sont pas disponibles dans rsync distribué avec les distributions Redhat / Centos ou Ubuntu.
IanB
@ Lionel: Comment utilisez-vous atpour tuer le processus?
IMTheNachoMan
6

Si vous vous demandez où en est un rsync lent et que vous n'avez pas utilisé -v pour répertorier les fichiers au fur et à mesure de leur transfert, vous pouvez savoir quels fichiers il a ouverts:

 ls -l /proc/$(pidof rsync)/fd/*

sur un système qui a / proc

Par exemple, rsync a été suspendu pour moi tout à l'heure, même s'il semblait qu'il restait beaucoup d'espace sur le système distant. Cette astuce m'a aidé à trouver le fichier d'une taille inattendue dont je ne me souvenais pas, qui ne tiendrait pas à l'autre bout.

Cela m'a également révélé des informations un peu plus intéressantes - l'autre extrémité a apparemment abandonné, car il y avait aussi un lien de socket cassé:

/proc/22954/fd/4: broken symbolic link to `socket:[2387837]'
nealmcb
la source
5

--archive est un choix standard (mais pas celui par défaut) pour les travaux de type sauvegarde, ce qui permet de s'assurer que la plupart des métadonnées des fichiers source (autorisations, propriété, etc.) sont copiées.

Cependant, si vous ne souhaitez pas l'utiliser, vous devrez souvent inclure --times, ce qui copiera les heures de modification des fichiers. Cela rend la prochaine rsync qui fonctionne ( en supposant que vous le faites à plusieurs reprises) beaucoup plus vite, comme rsync compare les temps de modification et saute le fichier si elle est inchangée. Étonnamment (du moins pour moi), cette option n'est pas la valeur par défaut.

Andrew Ferrier
la source
4

Celui que j’utilise le plus est bien --exclude-fromce qui vous permet de spécifier un fichier contenant des éléments à exclure.

Je trouve également --chmodtrès utile, car cela vous permet de vous assurer que les autorisations se retrouvent dans un état souhaitable, même si votre source est gâchée.

innaM
la source
4

--backup-dir = date +%Y.%m.%d--delete Nous supprimons mais faisons une copie ... juste au cas où


la source
4

Le mien est --inplace. Fonctionne à merveille lorsque le serveur de sauvegarde exécute ZFS ou btrfs et que vous effectuez des instantanés natifs.

Hubert Kario
la source
3

Bien sûr, il y a aussi le fait de --deletesupprimer des éléments de la cible qui ne peuvent pas être trouvés dans le source.

innaM
la source
2

cwrsync - Rsync pour Windows http://www.itefix.no/i2/node/10650

Cette version inclut OpenSSH afin que vous puissiez transférer des fichiers sur un canal sécurisé.

Jftuga
la source
J'utilise cwrsync, et c'est génial. Je suis tellement heureux que quelqu'un ait apporté cette impressionnante capacité à Windows.
Andrew Ensley
2
--partial 

En cas d'interruptions

--bwlimit=100

Limiter la bande passante - idéal pour copier des fichiers volumineux, des répertoires

rebelbass
la source
Quelle est l'unité de bwlimit? bits par seconde, octets par seconde?
Timo Kähkönen
@Timo, bwlimit est en Ko / seconde.
Andrew Ferrier
1

Si vous avez configuré rsync en tant que démon sur le serveur, vous pouvez simplement parcourir les modules partagés comme toute autre liste de répertoires. Ensuite, vous pouvez voir quels chemins sont disponibles et ce qui ne l’est pas.

sybreon
la source
1

lorsque j'utilise GlusterFs, nous avons un goulot d'étranglement avec des fichiers T de taille nulle. Pour la synchronisation entre briques écrasées ou répliques, nous devons utiliser --min-size=1pour ne pas synchroniser les fichiers vides du serveur écrasé.

vahid chakoshy
la source