Comment RSYNC effectue-t-il des sauvegardes incrémentielles

14

Comment rsyncsait quels fichiers sont modifiés et lesquels ne le sont pas? Consigne-t-il ses données n'importe où dans le fichier?

Parce que je veux faire des sauvegardes incrémentielles, mais d'abord il transférera tous les fichiers.

Donc ma question principale est: si je télécharge les fichiers initiaux via FTP mais pas par rsync. Sautera rsynctoujours ces fichiers existants ou il téléchargera tout lors de la première exécution.

umläute
la source

Réponses:

12

Rsync a un certain nombre d'indicateurs qui contrôlent ce qu'il va regarder et ce qu'il va copier vers la destination. Le plus souvent, le drapeau "-a" est utilisé, qui est le drapeau "Archive", c'est probablement ce que vous voulez. exécutez rsync avec les drapeaux "-av" et faites-le exécuter une première fois contre les données que vous souhaitez sauvegarder. La prochaine fois qu'il s'exécutera, il fera une somme de contrôle de bloc du fichier et ne copiera que les parties qui ont été modifiées sur les fichiers existants, copiera les nouveaux fichiers et supprimera les fichiers qui ne sont plus là. Vérifiez la section des options "-a" sur:

http://linux.die.net/man/1/rsync

La première exécution sera intensive en largeur de bande, les exécutions suivantes seront très probablement consommatrices de processeur mais utilisent peu de bande passante par rapport à l'exécution initiale. Sauf si vous avez beaucoup de désabonnement sur votre ensemble de données.

Rsync ne se soucie pas de savoir comment vous avez obtenu les fichiers dans les répertoires source ou de destination, il ne fera que copier les modifications entre les deux, sauf si vous ajoutez des indicateurs pour faire quelque chose de différent.

Si vous souhaitez enregistrer ce qui a été modifié, vous pouvez utiliser l'option "--log-file". Dans l'ensemble, quelque chose comme ça ressemble à ce que vous voulez:

rsync -av --log-file=/var/log/rsync.log -e "ssh -l backup-user" backup-user@source-machine::module /nas01/backups
Ali Chehab
la source
9

rsync ne fait pas 'incrémental', c'est plutôt 'différentiel'. il ne transfère pas les modifications (qui supposent une certaine connaissance d'une exécution antérieure), il transfère les différences (en comparant la source avec les fichiers cibles)

une simplification du processus:

  • vérifie d'abord la taille du fichier, les dates de création / modification, les drapeaux ... si tout est identique, sautez le fichier.
  • s'il n'y a pas de fichier portant ce nom sur la cible, il suffit de copier tout le fichier.
  • s'il y a un fichier sur la cible, il calcule les sommes de contrôle pour chaque 2 Ko du fichier et les transfère à l'expéditeur.
  • l'expéditeur compare le contenu du fichier d'origine et le compare à la cible, et transfère toutes les données qui ne s'y trouvent pas déjà, ainsi que les références à toutes les données correspondantes. avec cela, la cible peut reconstruire le fichier entier en utilisant des morceaux de l'ancienne cible et de nouveaux blocs.
Javier
la source
5

rsync n'enregistre aucune donnée, il vérifie les horodatages de modification des fichiers et ensuite le contenu. si vous téléchargez d'abord par ftp ce sera bien - rsync ne retransmettra pas toutes les données mais passera probablement par tout le contenu et fixera les horodatages. mais il n'y aura plus de transfert énorme.

pQd
la source
5

Peut-être que je suis pédant, mais les sauvegardes incrémentielles signifient que vous avez d'abord une sauvegarde complète. Ensuite, vous avez la sauvegarde des fichiers modifiés depuis cette sauvegarde. Ensuite, vous avez une autre sauvegarde des sauvegardes modifiées depuis la précédente, etc. Vous avez donc besoin de la sauvegarde complète et de toutes les sauvegardes incrémentielles depuis celle-ci.

Ainsi, le simple fait d'utiliser le mode archive n'est pas une sauvegarde incrémentielle . Je pense que la différence est importante car cela signifie que vous ne pouvez pas remonter dans le temps pour obtenir des fichiers avant qu'ils ne changent .

Si vous souhaitez effectuer une véritable sauvegarde incrémentielle, vous utilisez des options telles que --backup-dir. Il y a un exemple ici .

Kyle Brandt
la source
1
+1 pour la distinction entre les sauvegardes incrémentielles et la mise en miroir (ce que fait rsync par défaut).
sleske
Ah oui! La mise en miroir était le mot que je saisissais, bon appel :-)
Kyle Brandt
0

Si la vraie question est "Je veux faire des sauvegardes incrémentielles via rsync", il y a quelques options disponibles. J'utilise Dirvish:

http://www.dirvish.org/

La restauration est facile car elle vous donne des instantanés: elle utilise des liens physiques pour vous donner des instantanés complets tout en économisant de l'espace où un fichier est identique. En interne, il utilise l'option --link-dest de rsync:

--link-dest=DIR         hardlink to files in DIR when unchanged

Puisqu'il utilise rsync, il économise également la bande passante du réseau (et donc le temps) où les changements sont très faibles. Cela fonctionne également si vous tar et sneakernet une image dirvish créée localement d'abord, si vous avez beaucoup de fichiers et un lien lent.

Alphax
la source