playground:playground

Rotation des sauvegarde

L’une des problématiques de l’archivage des sauvegardes est la question de la rotation, ou dit autrement la sélection des sauvegardes à conserver sur le court, moyen et long terme. Une sauvegarde datant de la semaine dernière, voire du mois dernier, devient de moins en moins pertinente : le nombre de sauvegarde archivé doit donc être réduit au cours du temps.

L’enjeu est de mettre en place un ou plusieurs scripts, répondant à certains critères :

  • Pertinence des sauvegardes choisies
    • le nombre de sauvegarde doit réduire au cours du temps selon une logique.
  • Adaptabilité du programme
    • Les scripts sont aisément modifiables pour faire de la gestion de sauvegarde sur d’autres échelles de temps
    • Les scripts disposent de paramètres (nombres de sauvegardes, emplacement)
    • Le format attendu des date de sauvegarde est modifiable
  • Simplicité de fonctionnement

Le premier objectif de conception a été de trouver une manière simple de sélectionner des sauvegardes pertinentes.

Suite au constat que les sauvegardes étaient produites de manière régulière, l’hypothèse d’équidistance a été considérée. De ce fait, le calcul des dates pertinentes se réduit à un calcul d’indices de tableau avec un pas constant (Nombre de sauvegarde total/Nombre de sauvegarde à conserver) :

 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|X |  |  |  |  |  |X |  |  |  |  |  |X |  |  |  |  |  |X |  |  |  |  |  |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
 ^                 ^                 ^                 ^
 |                 |                 |                 |
 +-----------------+-----------------+-----------------+

			Exemple : 4 sauvegardes sur 24 / jour

La second objectif a été la définition des différents scripts :

  • Un premier script réduit le nombre de sauvegarde par jour sur les 6 jours précédents.
    • Aucune sauvegarde sur les dernières 24h ne sera supprimée par ce script.
    • Il est exécuté tout les jours.
  • Un second script réduit le nombre de sauvegarde de la semaine précédente.
    • Aucune sauvegarde sur les 7 derniers jours ne sera supprimée par ce script.
    • Il est exécuté toutes les semaines.
  • Enfin, un dernier script est exécuté toutes les 4 semaines pour réduire le nombre de sauvegardes sur 48 semaines.

Il est à remarquer qu’il est théoriquement suffisant pour chaque script de ne traiter que la période de temps la plus proche (jour, semaine, …), c’est à dire la veille pour le script s’exécutant chaque jour, et la dernière semaine pour celui s’exécutant chaque mois.

Cependant, dans le cas ou un script ne peut être exécuté pour une raison quelconque (panne, machine éteinte) à l’heure prévue, le traitement se fera à la prochaine exécution puisque chaque script traite plusieurs périodes de temps (6 derniers jours, 3 dernières semaines).

Le choix du langage Bash a été décidé pour l’écriture des scripts. Leur fonctionnement est similaire, et se découpe en 3 étapes :

  1. Recensement des dates utiles, la date de départ étant la plus récente.
    • weekrotator.sh : 6 tableaux représentant les 6 derniers jours * monthrotator.sh : 3 tableaux représentant les 3 dernières semaines
    • year_rotator.sh : TODO
  2. Sélection des sauvegardes à conserver dans chaque tableau (par calcul des indices)
  3. Suppression des sauvegardes non conservées.

Les fonctions communes aux différents scripts sont issues de différents fichiers dans le dossier lib :

  • date : Traitement des dates
    • Conversion de date entre :
      • le format de sauvegarde choisi,
      • le format Unix (utilisable avec le programme binaire date)
      • le format Timestamp (utile pour le calcul d’intervalle de date)
    • Calcul de la différence entre deux dates dans n’importe lequel des formats
    • Ajout de quantité de temps (seconde, minute, heure, semaine) à une date
  • array : Manipulation simplifiée de tableaux en Bash (insertion, suppression, lecture, écriture)
  • functions : Fonctions spécifiquement utiles aux scripts (calcul d’index, suppression des sauvegardes)

Par ailleurs, les scripts sont lancés automatiquement grâce à des tâches cron.

Les scripts mis en place au sein de l’infrastructure de Picasoft fonctionnent avec les paramètres suivants :

  • weekrotator.sh <dossier des sauvegardes> 2 : 2 sauvegardes par jour de la semaine * monthrotator.sh <dossier des sauvegardes> 7 : 7 sauvegardes par semaine (1 par jour de la semaine)

Étant donné que les scripts sont exécutés à la fin de la journée prévue, les résultats suivants sont attendus.

Pour weekrotator.sh : <file> 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 +–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+ |X | | | | | | | | | | | |X | | | | | | | | | | | | +–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+–+ ^ ^ | | +———————————–+ Légende : 2 sauvegardes sur 24 par jour de la semaine courante </file> Pour monthrotator.sh :

+------------+------------+------------+------------+------------+------------+------------+
|  23    11  |  23    11  |  23    11  |  23    11  |  23    11  |  23    11  |  23    11  |
| +--+  +--+ | +--+  +--+ | +--+  +--+ | +--+  +--+ | +--+  +--+ | +--+  +--+ | +--+  +--+ |
| |X |  |  | | |X |  |  | | |X |  |  | | |X |  |  | | |X |  |  | | |X |  |  | | |X |  |  | |
| +--+  +--+ | +--+  +--+ | +--+  +--+ | +--+  +--+ | +--+  +--+ | +--+  +--+ | +--+  +--+ |
|            |            |            |            |            |            |            |
+------------+------------+------------+------------+------------+------------+------------+
  ^             ^            ^            ^            ^            ^            ^
  |             |            |            |            |            |            |
  +-------------+------------+------------+------------+------------+------------+

		Légende : 7 sauvegardes sur 14 / semaine sur les 3 dernières semaines

TODO

  • playground/playground.1511549158.txt.gz
  • (modification externe)