Plus j'utilise rsync
plus je me rends compte que c'est un couteau suisse de transfert de fichiers. Il y a tellement d'options. J'ai récemment découvert que vous pouvez aller --remove-source-files
et il supprimera un fichier de la source quand il aura été copié, ce qui en fera un peu plus un mouvement, plutôt qu'un programme de copie. :)
Quels sont vos petits trucs et astuces rsync préférés?
Essayez d'utiliser rsync version 3 si vous devez synchroniser de nombreux fichiers! V3 construit sa liste de fichiers de manière incrémentielle et est beaucoup plus rapide et utilise moins de mémoire que la version 2.
Selon votre plateforme, cela peut faire toute la différence. Sur OSX, la version 2.6.3 prendrait plus d'une heure ou planterait en essayant de construire un index de 5 millions de fichiers tandis que la version 3.0.2 que j'ai compilée commençait à copier immédiatement.
Utilisation de --link-dest
pour créer des sauvegardes basées sur des instantanés économes en espace, où 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 difficiles -lié au lieu de créer de nouvelles copies en économisant de l'espace.
(en fait, j'utilise toujours le rysnc
- suivi de -cp -al
méthode qui accomplit la même chose, voir http://www.mikerubel.org/computers/rsync_snapshots/ pour une version ancienne mais toujours très bonne de techniques et problèmes 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 qui lient à ce fichier, mais j'ai également des sauvegardes hors ligne qui protègeraient contre cela dans une mesure décente. L'autre chose à surveiller est que votre système de fichiers a suffisamment d'inodes ou vous en manquerez avant de manquer d'espace disque (même si je n'ai jamais eu de problème avec les valeurs par défaut ext2/3).
Aussi, n'oubliez jamais le très très utile --dry-run
pour un peu de paranoïa saine, surtout lorsque vous utilisez le --delete*
options.
Si vous devez mettre à jour un site Web avec des fichiers volumineux sur un lien lent, vous pouvez transférer les petits fichiers de cette façon:
rsync -a --max-size = 100K/var/www/là:/var/www /
puis faites cela pour les gros fichiers:
rsync -a --min-size = 100K --bwlimit = 100/var/www/there:/var/www /
rsync propose de nombreuses options pratiques pour les sites Web. Malheureusement, il n'a pas de méthode intégrée pour détecter les mises à jour simultanées, vous devez donc ajouter de la logique aux scripts cron pour éviter le chevauchement des écritures de fichiers volumineux.
J'utilise l'option --existing lorsque j'essaie de conserver un petit sous-ensemble de fichiers d'un répertoire synchronisé vers un autre emplacement.
--rsh
est à moi.
Je l'ai utilisé pour changer le chiffrement sur ssh en quelque chose de plus rapide (--rsh="ssh -c arcfour"
) également pour configurer une chaîne de ssh
s (recommande de l'utiliser avec ssh-agent
) pour synchroniser des fichiers entre des hôtes qui ne peuvent pas parler directement. (rsync -av --rsh="ssh -TA userA@hostA ssh -TA -l userB" /tmp/foobar/ hostB:/tmp/foobar/
).
--time-limit
Lorsque cette option est utilisée, rsync s'arrêtera après T minutes et quittera. Je pense que cette option est utile lors de la synchronisation d'une grande quantité de données pendant la nuit (heures non occupées), puis lors de l'arrêt lorsqu'il est temps pour les gens de commencer à utiliser le réseau, pendant la journée (heures chargées).
--stop-at=y-m-dTh:m
Cette option vous permet de spécifier à quelle heure arrêter rsync.
Batch Mode
Le mode batch peut être utilisé pour appliquer le même ensemble de mises à jour à de nombreux systèmes identiques.
Si vous vous demandez jusqu'où est arrivé un rsync lent et que vous n'avez pas utilisé -v pour répertorier les fichiers lors 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 si le système distant semblait avoir un tas d'espace libre. Cette astuce m'a aidé à trouver le fichier inattendu énorme dont je ne me souvenais pas, qui ne cadrait pas à l'autre bout.
Cela m'a également donné des informations un peu plus intéressantes - l'autre extrémité a apparemment abandonné, car il y avait également un lien de socket cassé:
/proc/22954/fd/4: broken symbolic link to `socket:[2387837]'
--archive
est un choix standard (mais pas par défaut) pour les travaux de type sauvegarde, ce qui garantit 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 souhaiterez souvent inclure --times
, qui copiera les heures de modification des fichiers. Cela rend le prochain rsync qui s'exécute (en supposant que vous le faites à plusieurs reprises) beaucoup plus rapide, car rsync compare les temps de modification et ignore le fichier s'il est inchangé. Étonnamment (pour moi au moins), cette option n'est pas la valeur par défaut.
Le mien est --inplace
. Fonctionne à merveille lorsque le serveur de sauvegarde exécute ZFS ou btrfs et que vous effectuez des instantanés natifs.
Celui que j'utilise le plus est certainement --exclude-from
qui vous permet de spécifier un fichier contenant des éléments à exclure.
Je trouve aussi --chmod
très utile car il vous permet de vous assurer que les autorisations se retrouvent dans un état souhaitable même si votre source est gâchée.
--backup-dir = date +%Y.%m.%d
--delete Nous supprimons mais faisons une copie ... juste au cas où
Bien sûr, il y a aussi --delete
qui supprime de la cible des éléments introuvables dans la source.
cwrsync - Rsync pour Windows http://www.itefix.no/i2/node/1065
Cette version inclut OpenSSH afin que vous puissiez transférer des fichiers sur un canal sécurisé.
--partial
En cas d'interruptions
--bwlimit=100
Pour limiter la bande passante - idéal pour copier des fichiers volumineux, des répertoires
Si rsync est configuré en tant que démon sur le serveur, vous pouvez simplement parcourir les modules partagés comme n'importe quelle autre liste de répertoires. Ensuite, vous pouvez voir quels chemins sont disponibles et quels autres.
lorsque j'utilise GlusterFs, nous avons un goulot d'étranglement avec des fichiers T de taille nulle, pour la synchronisation entre la brique accidentée ou la réplique, nous devons utiliser --min-size=1
pour ne pas synchroniser le fichier vide du serveur en panne