Je suis un peu familier avec la façon d'utiliser tar
l' --listed-incremental
indicateur 's pour effectuer des sauvegardes incrémentielles. Le résultat final est un backup-0
fichier contenant la première sauvegarde complète backup-1
, puis backup-2
,, ..., backup-x
avec les modifications dans l'ordre des sauvegardes.
Dans le passé, j’utilisais rsync
des liens physiques pour effectuer des sauvegardes à backup-0
l’état actuel et chaque backup-x
dossier contient les fichiers spécifiques à cette sauvegarde. Fondamentalement, ce qui est décrit http://www.mikerubel.org/computers/rsync_snapshots/ et http://www.admin-magazine.com/Articles/Using-rsync-for-Backups/(offset) .
Je veux imiter cette fonctionnalité avec le goudron. Je ne peux pas utiliser de liens physiques, car les fichiers tar seront finalement téléchargés vers un fournisseur de cloud qui ne gère pas / ne comprend pas les liens et ce qui ne l’est pas. Je souhaite également tarer les sauvegardes, car je peux également les chiffrer avant leur téléchargement dans le nuage.
L’idée est donc d’avoir une liste croissante de fichiers comme celle-ci:
backup-0.tar.bz2
- ceci est la sauvegarde actuelle et sera la plus grande parce que c'est une sauvegarde complètebackup-1.tar.bz2
- Ceci est la sauvegarde d'hier, mais il ne contiendra que les fichiers différents de ce qui se trouve dans current (backup-0.tar.bz2
)backup-2.tar.bz2
- Ceci est la sauvegarde d'il y a deux jours mais il ne contiendra que les fichiers différents d'hier (backup-1.tar.bz2
)backup-3.tar.bz2
- ...backup-4.tar.bz2
- ...backup-5.tar.bz2
- ...
Si cela n'a pas de sens, espérons-le.
Première fois:
$ touch /tmp/file1
$ touch /tmp/file2
- faire
backup-0.tar.bz2
À ce stade backup-0.tar.bz2
a /tmp/file1
et /tmp/file2
.
Deuxième fois:
$ touch /tmp/file3
$ rm /tmp/file2
- ..do la magie
À ce point:
backup-0.tar.bz2
a/tmp/file1
et/tmp/file3
backup-1.tar.bz2
a/tmp/file2
; il n'a pasfile1
parce qu'il n'a pas changé il est donc enbackup-0.tar.bz2
Troisième fois:
$ touch /tmp/file1
$ touch /tmp/file4
- ..do la magie
À ce point:
backup-0.tar.bz2
a/tmp/file1
,/tmp/file3
et/tmp/file4
backup-1.tar.bz2
a/tmp/file1
parce qu'il a été changébackup-2.tar.bz2
a/tmp/file2
Ainsi:
| | first time | second time | third time |
|-------|------------|-------------|-------------------------|
| file1 | backup-0 | backup-0 | backup-0 and backup-1 |
| file2 | backup-0 | backup-1 | backup-2 |
| file3 | | backup-0 | backup-0 |
| file4 | | | backup-0 |
Je pensais que c'était une façon de l'aborder, mais cela me semblait horriblement inefficace. Peut-être que je pourrais utiliser des fonctionnalités / drapeaux qui rendraient cela plus efficace.
- première fois = prendre
backup-0
- deuxième fois
- renommer
backup-0
enbackup-1
- prendre
backup-0
- enlever tout ce
backup-1
qui correspondbackup-0
- renommer
- troisième fois
- renommer
backup-1
enbackup-2
- renommer
backup-0
enbackup-1
- prendre
backup-0
- enlever tout ce
backup-1
qui correspondbackup-0
- renommer
- quatrième fois
- renommer
backup-2
enbackup-3
- renommer
backup-1
enbackup-2
- renommer
backup-0
enbackup-1
- prendre
backup-0
- enlever tout ce
backup-1
qui correspondbackup-0
- renommer
Je pense que c'est la dernière étape (supprimer tout ce backup-1
qui correspond backup-0
) qui est inefficace.
Ma question est, comment puis-je faire cela? Si je l'utilise tar
, --listed-incremental
ce sera l'inverse de ce que j'essaie.
tar
,--listed-incremental
ce sera l'inverse de ce que j'essaie.Réponses:
C'est bien que vous réalisiez cela. Je peux voir les avantages et les inconvénients des deux directions (je n'en parlerai pas ici). Techniquement, il est possible d'inverser le processus:
backup-N
enbackup-(N+1)
boucle de N max à 0.backup-1
) dans un répertoire temporaire.backup-0
partir des données actuelles avec un nouveau fichier d'instantané.backup-1
(sauvegarde complète précédente).backup-1
tant que sauvegarde incrémentielle, en fournissant le fichier de capture instantanée de l'étape précédente. (Notez que vous devez changer votre répertoire de travail de celui qui contient les données actuelles au nom temporaire, afin que les chemins relatifs restent les mêmes).Vous pouvez vous demander si cela gardera les anciens
backup-N
fichiers (conservés) en cohérence avec les nouveaux. Un doute raisonnable, puisque le manuel dit:Il suggère donc que le fichier de capture instantanée soit mis à jour à partir de la sauvegarde complète, comme si vous deviez reconstruire les
backup-N
fichiers chaque fois que vous effectuiez une sauvegarde complète. Mais alors:Cela signifie que si vous extrayez des
backup-N
fichiers en ordre croissant pour obtenir un état depuis un certain temps, toutbackup-M
fichier (M> 0) ne s'attend à ce qu'unM-1
état valide existe. Peu importe si cet état est obtenu à partir d'une sauvegarde complète ou incrémentielle, le fait est que ces états doivent être identiques. Ainsi, peu importe si vous avez créé lebackup-M
fichier sur la base d'une sauvegarde complète (comme vous le ferez, chaque sauvegardebackup-M
commencera commebackup-1
s'il s'agissait d'backup-0
une sauvegarde complète) ou d'une chaîne de sauvegardes incrémentielles (comme le suggère le manuel).Je comprends votre point est de garder
backup-0
comme une sauvegarde complète mise à jour et être en mesure de « remonter le temps » avecbackup-0
,backup-1
,backup-2
... Si vous voulez garder ces fichiers dans un service cloud « muet », vous besoin de les renommer avec soin en suivant la procédure, de les remplacerbackup-1
et d’en télécharger une nouvelle àbackup-0
chaque fois. Si vos données sont volumineuses, charger une sauvegarde complète à chaque fois sera une tâche ardue.Pour cette raison, il est conseillé de disposer d'un serveur "intelligent" capable de créer la sauvegarde complète actuelle chaque fois que vous téléchargez une sauvegarde incrémentielle "passé à présent". J'ai utilisé
rdiff-backup
plusieurs fois:Veuillez noter que le logiciel n'a pas été mis à jour depuis 2009. Je ne sais pas si c'est une bonne recommandation de nos jours.
la source