Sauvegardes incrémentielles avec tar où le fichier actuel contient les versions les plus récentes et les fichiers précédents.

1

Je suis un peu familier avec la façon d'utiliser tarl' --listed-incrementalindicateur 's pour effectuer des sauvegardes incrémentielles. Le résultat final est un backup-0fichier contenant la première sauvegarde complète backup-1, puis backup-2,, ..., backup-xavec les modifications dans l'ordre des sauvegardes.

Dans le passé, j’utilisais rsyncdes liens physiques pour effectuer des sauvegardes à backup-0l’état actuel et chaque backup-xdossier 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ète
  • backup-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:

  1. $ touch /tmp/file1
  2. $ touch /tmp/file2
  3. faire backup-0.tar.bz2

À ce stade backup-0.tar.bz2a /tmp/file1et /tmp/file2.

Deuxième fois:

  1. $ touch /tmp/file3
  2. $ rm /tmp/file2
  3. ..do la magie

À ce point:

  • backup-0.tar.bz2a /tmp/file1et/tmp/file3
  • backup-1.tar.bz2a /tmp/file2; il n'a pas file1parce qu'il n'a pas changé il est donc enbackup-0.tar.bz2

Troisième fois:

  1. $ touch /tmp/file1
  2. $ touch /tmp/file4
  3. ..do la magie

À ce point:

  • backup-0.tar.bz2a /tmp/file1, /tmp/file3et/tmp/file4
  • backup-1.tar.bz2a /tmp/file1parce 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.

  1. première fois = prendre backup-0
  2. deuxième fois
    1. renommer backup-0enbackup-1
    2. prendre backup-0
    3. enlever tout ce backup-1qui correspondbackup-0
  3. troisième fois
    1. renommer backup-1enbackup-2
    2. renommer backup-0enbackup-1
    3. prendre backup-0
    4. enlever tout ce backup-1qui correspondbackup-0
  4. quatrième fois
    1. renommer backup-2enbackup-3
    2. renommer backup-1enbackup-2
    3. renommer backup-0enbackup-1
    4. prendre backup-0
    5. enlever tout ce backup-1qui correspondbackup-0

Je pense que c'est la dernière étape (supprimer tout ce backup-1qui correspond backup-0) qui est inefficace.

Ma question est, comment puis-je faire cela? Si je l'utilise tar, --listed-incrementalce sera l'inverse de ce que j'essaie.

IMTheNachoMan
la source
Comment faire ça Si je l'utilise tar, --listed-incrementalce sera l'inverse de ce que j'essaie.
IMTheNachoMan

Réponses:

0

Si je l'utilise tar, --listed-incrementalce sera l'inverse de ce que j'essaie.

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:

  1. Renommez backup-Nen backup-(N+1)boucle de N max à 0.
  2. Restaurez la sauvegarde complète (maintenant backup-1) dans un répertoire temporaire.
  3. Créez à backup-0partir des données actuelles avec un nouveau fichier d'instantané.
  4. Supprimer backup-1(sauvegarde complète précédente).
  5. Traitez le répertoire temporaire comme une "nouvelle" version. Créer en backup-1tant 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-Nfichiers (conservés) en cohérence avec les nouveaux. Un doute raisonnable, puisque le manuel dit:

-g, --listed-incremental=FILE
Gérez les nouvelles sauvegardes incrémentielles au format GNU. FILEest le nom d'un fichier de capture instantanée dans lequel sont tarstockées des informations supplémentaires permettant de déterminer les fichiers modifiés depuis le dernier vidage incrémentiel et, par conséquent, de le récupérer à nouveau. S'il FILEn'existe pas lors de la création d'une archive, celle-ci sera créée et tous les fichiers seront ajoutés à l'archive résultante (le 0vidage de niveau ). Pour créer des archives incrémentielles de niveau non nul N, créez une copie du fichier de capture instantanée créé pendant le niveau N-1et utilisez-la comme FILE.

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-Nfichiers chaque fois que vous effectuiez une sauvegarde complète. Mais alors:

Lors de l'énumération ou de l'extraction, le contenu réel de FILEn'est pas inspecté, il est nécessaire uniquement en raison d'exigences syntaxiques. C'est donc une pratique courante d'utiliser /dev/nullà sa place.

Cela signifie que si vous extrayez des backup-Nfichiers en ordre croissant pour obtenir un état depuis un certain temps, tout backup-Mfichier (M> 0) ne s'attend à ce qu'un M-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éé le backup-Mfichier sur la base d'une sauvegarde complète (comme vous le ferez, chaque sauvegarde backup-Mcommencera comme backup-1s'il s'agissait d' backup-0une 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-0comme une sauvegarde complète mise à jour et être en mesure de « remonter le temps » avec backup-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 remplacer backup-1et d’en télécharger une nouvelle à backup-0chaque 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-backupplusieurs fois:

rdiff-backupsauvegarde un répertoire sur un autre, éventuellement sur un réseau. Le répertoire cible constitue une copie du répertoire source, mais des différences inverses supplémentaires sont stockées dans un sous-répertoire spécial de ce répertoire cible, de sorte que vous pouvez toujours récupérer les fichiers perdus il y a quelque temps. L'idée est de combiner les meilleures fonctionnalités d'un miroir et d'une sauvegarde incrémentielle. rdiff-backuppréserve également les sous-répertoires, les liens physiques, les fichiers de développement, les autorisations, la propriété des uid / gid, les temps de modification, les attributs étendus, les acls et les fourches de ressources. Aussi, rdiff-backuppeut fonctionner de manière efficace en bande passante sur un tuyau, comme rsync.

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.

Kamil Maciorowski
la source
Merci. Cela pourrait fonctionner, mais il faudrait beaucoup d’espace pour extraire l’extrait complet dans le répertoire temporaire. J'ai une idée de faire ce que je veux et je travaille sur un script. 1) dump l'inventaire des fichiers à sauvegarder, y compris la durée du mod et la taille 2) les fichiers d'archive, y compris les fichiers d'inventaire, puis plus tard 1) extraire le fichier d'inventaire de l'archive 2) prendre un nouveau fichier d'inventaire 3) comparer deux fichiers 4) extraire des fichiers différents archiver.
IMTheNachoMan