Comment sauvegarder un gros fichier avec de petites modifications?

9

Si un ensemble de fichiers (plusieurs Go de gros chacun) et chacun change légèrement chaque jour (à des endroits aléatoires, pas seulement des informations ajoutées à la fin), comment peut-il être copié efficacement? Je veux dire, dans le sens où seules les parties modifiées sont mises à jour, et non les fichiers entiers. Cela signifierait la différence entre copier des Kb ici et là ou des GB.

Quora Feans
la source
Diff binaire? Je pense que c'est une chose mais je ne pense pas que ce diffsera le cas
chat
@cat: diffpeut être en mesure de signaler les différences, mais ici, le problème consiste à copier les petites différences.
Quora Feans le
Eh bien, je pensais juste copier les différences - rsyncc'est mieux
chat

Réponses:

25

Le programme rsync fait exactement cela. Depuis la page de manuel:

Il est célèbre pour son algorithme de transfert delta, qui réduit la quantité de données envoyées sur le réseau en n'envoyant que les différences entre les fichiers source et les fichiers existants dans la destination. Rsync est largement utilisé pour les sauvegardes et la mise en miroir et comme commande de copie améliorée pour un usage quotidien.

hlovdal
la source
En fait, rsync est en cours d'exécution lors de l'écriture de cette réponse, sauvegardant tout sur cette machine sur mon serveur de fichiers (avec zfs).
hlovdal
À des fins de sauvegarde, je voudrais recommander rdiff-backup ( nongnu.org/rdiff-backup ). Je l'utilise pour sauvegarder quatre machines différentes, depuis plusieurs années maintenant, avec de bons résultats.
Thomas Padron-McCarthy
Wikipedia a une bonne explication sur la façon de rsynccomparer les morceaux de fichiers en utilisant des sommes de contrôle glissantes.
Adam Katz
J'ai essayé rsync pour "revenir" à une ancienne image de disque dur de machine virtuelle où seuls quelques fichiers à l'intérieur ont été modifiés, malheureusement rsync semble copier à nouveau le fichier entier (en prenant ~ 3 minutes d'écriture ~ 300 Mo / s)? rsync -av --progress --partial --inplace arch-test1.qcow2.bak arch-test1.qcow2
feedc0de
8

Vous voulez probablement un programme de sauvegarde de déduplication moderne. Découvrez BorgBackup .

Cela fera plusieurs sauvegardes de chaque version de votre gros fichier, mais partagera le contenu commun entre les différentes versions, donc l'espace total utilisé pour une version donnée de votre gros fichier ne sera que légèrement supérieur à l'espace disque total pour un seul version, en supposant que les différentes versions ne diffèrent que légèrement.

Faheem Mitha
la source
5

Si vous êtes limité en IO de quelque façon que ce soit, utilisez un système de fichiers tel que BTRFS ou ZFS qui prend directement en charge les sauvegardes incrémentielles sans avoir à trouver les différences dans les fichiers, telles que ce qu'il rsyncfaut faire.

L'utilisation rsyncva être lente et très gourmande en E / S.

Parce que si n'importe quelle application qui écrit des modifications dans les fichiers est en quelque sorte limitée en termes d'E / S, l'utilisation rsyncva prendre des cycles d'E / S importants de l'application, c'est la raison même pour laquelle les fichiers existent. Et si votre processus ou système de sauvegarde est limité en E / S, cela rsyncva supprimer les cycles d'E / S de votre bande passante de sauvegarde disponible.

Juste Google "rsync est lent". Par exemple: rsync est très lent (facteur 8 à 10) par rapport à cp lors de la copie de fichiers du partage nfs vers le répertoire local

Andrew Henle
la source
Cela a l'avantage supplémentaire de conserver toutes les métadonnées sans avoir à les vérifier et en sachant toujours que votre copie de sauvegarde est aussi bonne que la copie d'origine. rsync est très bien pour une utilisation générale, mais si vous avez un système de fichiers moderne, il serait stupide d'ignorer ses avantages.
user121391