web-dev-qa-db-fra.com

Comment RSYNC fait-il des sauvegardes incrémentielles

Comment rsync sait quels fichiers sont modifiés et qui ne sont pas? Est-ce que cela enregistre ses données n'importe où dans le fichier?

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

Donc, ma principale question est la suivante: si je télécharge les fichiers initiaux via FTP mais non par rsync. Will rsync saute toujours ces fichiers existants ou tout téléchargera tout sur la première exécution.

14
John

RSYNC a un certain nombre de drapeaux qui contrôlent ce qu'il va regarder et ce qu'il va copier sur 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-la faire une première exécution contre les données que vous souhaitez sauvegarder. La prochaine fois qu'il exécute, cela fera une somme de contrôle du fichier et ne copiez que sur les pièces modifiées sur les fichiers existants, copier de nouveaux fichiers sur et supprimer des fichiers qui ne sont plus là. Vérifiez la section "-A" Options sur:

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

La première exécution sera intensifie de la bande passante, les points suivants seront probablement intensifs de processeur mais utiliseront peu de bande passante par rapport à la course initiale. Sauf si vous avez beaucoup de baratche sur votre jeu de données.

RSYNC ne foque pas comment vous avez obtenu les fichiers dans la source ou les répertoires de destination, il suffira de copier les modifications entre les deux, à moins que vous ajoutez des indicateurs à faire quelque chose de différent.

Si vous souhaitez enregistrer ce qui a été changé, 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
12
Ali Chehab

rsync ne fait pas "incrémental", c'est plus comme "différentiel". Il ne transfère pas changements (qui assument une certaine connaissance d'une exécution préalable), il transfère différences (en comparant la source avec les fichiers cible)

une simplification du processus:

  • first vérifie la taille du fichier, la création/modification dates, les drapeaux ... Si tout est identique, ignorez le fichier.
  • s'il n'y a pas de fichier avec ce nom sur la cible, copie simplement l'ensemble du fichier.
  • s'il y a un fichier sur la cible, il calcule les checksums pour chaque 2 Ko du fichier et des transferts sur l'expéditeur.
  • l'expéditeur compare le contenu du fichier d'origine et se compare à la cible et transfère toutes les données qui ne sont pas déjà là, ainsi que des références à toutes les données appariées. Avec cela, la cible peut reconstruire le fichier entier en utilisant des morceaux de l'ancienne cible et de nouveaux blocs.
9
Javier

rSYNC ne consomme pas de données, il vérifie les horodatages de modification de fichier, puis le contenu. Si vous téléchargez d'abord par FTP, cela ira bien - RSYNC ne transmettra pas toutes les données, mais passera probablement à tout le contenu et réparera les horodatages. Mais il n'y aura plus de transfert énorme.

5
pQd

Si la vraie question est "Je veux faire des sauvegardes incrémentielles sur RSYNC", quelques options sont disponibles. J'utilise dirvish:

http://www.dirvish.org/

La restauration est facile car il vous donne des instantanés: il utilise des lignes hardlinks pour vous donner des instantanés complets tout en enregistrant de l'espace où un fichier est identique. En interne, il utilise l'option RSYNC'S --Link-Dest:

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

Comme il utilise RSYNC, il enregistre également la bande passante réseau (et donc durée) où les changements sont très petits. Cela fonctionne également si vous goudron et Sneakernet a créé une image dirvish créée localement, si vous avez beaucoup de fichiers et un lien lent.

0
Alphax