Autoblog de Mitsukarenai

Ce site n'est pas le site officiel de Mitsukarenai
C'est un blog automatisé qui réplique les articles de suumitsu.eu

Sauvegardes incrémentielles avec Attic Deduplicating Archiver

Sun, 09 Aug 2015 23:05:06 +0000 - (source)

Attic est un programme Python développé par Jonas Borgström. Il permet de réaliser des sauvegardes incrémentielles, compressées, chiffrées et morcelées. Concrètement ça se passe ainsi:

  1. une première sauvegarde complète
  2. la seconde sauvegarde ne contient que les fichiers changés depuis la sauvegarde complète
  3. la troisième sauvegarde ne contient que les fichiers changés depuis la seconde
  4. la sauvegarde N ne contient que les fichiers changés depuis la sauvegarde N-1

Lors du processus de restauration, on peut choisir quelle sauvegarde restaurer. Un fichier a été effacé par erreur jeudi, la sauvegarde a lieu tous les vendredis, et on est samedi ? Pas de souci: on peut récupérer le fichier depuis la sauvegarde du vendredi de la semaine précédente.

Une sauvegarde, on en a quasiment jamais besoin. Mais c’est quand on en a besoin qu’on enrage de ne pas avoir fait de sauvegarde. Heureusement pour moi j’utilise différentes méthodes de sauvegarde afin de me donner une redondance double, je n’ai eu à faire appel à Attic qu’une seule fois, précisément pour une question de fichier effacé 3 semaines avant (sachant que mes sauvegardes locales sont des anti-hardware-crash hebdomadaires).

Mon cas

Dans ma stratégie actuelle, Attic a le rôle suivant:

/home → Attic → disque dur secondaire → Attic → DD sauvegarde 1 → DD sauvegarde 2
···································  → hubiC
···································· → Mega

Les dossiers utilisateur me sont en effet absolument précieux, il me les faut donc décompressés sur mes 2 disques durs externes de sauvegarde locale et chiffrés sur le DD secondaire et 2 services de stockage en cloud différents (pour pallier au risque d’arrêt du cloud).

Le détail sur les sauvegardes

Attic traite les données et les stocke dans un dépôt (repository). Ça peut être un dossier local, ou distant (avec sshfs, ou de Attic à Attic via ssh). Attic y stocke 3 fichiers importants:

X étant un chiffre que je devine être le nombre de morceaux traités. hints et index sont des blobs binaires sans doute chiffrés. Il s’agit ici des fichiers d’indexation des sauvegardes, Attic les inclut dans le dépôt ce qui est un bon procédé (contrairement à Duplicity qui les stockait dans .cache, ce qui provoque beaucoup de drames car sans ces index les sauvegardes sont difficilement exploitables)

Et puis il y a un dossier data, un/des sous-dossiers, et là dedans les morceaux des sauvegardes, avec comme nom des chiffres. Blobs binaires, de 5 Mo par défaut.

Usage de base

La documentation de Attic est très complète, sauf que.. en anglais seulement. Concrètement les commandes:

Quelques recommandations et incidents

Si vous envoyez vos sauvegardes sur un/des services externes, il est indispensable de les chiffrer. Pensez-y avant car cela est défini à l’étape d’initialisation du dépôt. Attic chiffre en AES-256 donc si vous avez une phrase de passe solide (20 caractères ou plus) ou un fichier-clé qui ne risque pas la corruption, vous êtes tranquille.

Les noms des points de sauvegarde: je vous recommande fortement d’indiquer la date.

Le dossier « data » et son contenu ne doivent pas être modifiés par d’autres programmes que Attic. Exemple: j’ai mentionné précédemment que j’utilise Mega, via le logiciel MegaSync (qui fait une synchro à double sens). Et bien puisque Attic prune (supprime) les points de sauvegarde anciens alors que MegaSync n’est pas lancé, ce dernier va au lancement suivant retélécharger les fichiers des points de sauvegardes supprimés ! Attic vous signalera une corruption du dépôt. Heureusement c’est facilement corrigé avec check –repair, Attic supprime les fichiers en trop et nettoie. Par rapport à ça, j’ai inclus dans mon script de sauvegarde un contrôle bloquant: tant que MegaSync n’est pas lancé et prêt à synchroniser les modifications qui seront apportées par Attic, Attic n’est pas exécuté.

Le chiffrement: l’utilisation d’un fichier-clé peut être dangereuse, car ce fichier doit impérativement ne jamais être altéré du moindre bit.. et si ce fichier est nommé « chiffrement-attic » ou autre truc explicite, n’importe qui ayant accès au PC devinera à quoi il sert et pourra accéder aux sauvegardes. C’est pourquoi je préfère les phrases de passe. Cependant j’automatise cela au sein du script avec la commande export ATTIC_PASSPHRASE, donc le script lui-même devient le point faible.

Mon exemple de script de sauvegarde

Il est exécuté par un script-maitre appelé par crontab, et procède tous les 6 jours.

#!/bin/bash
# restore: attic extract $REPOSITORY::(date)
# list: attic list $REPOSITORY(::date)
locker='~/Bureau/attic_cron.lock'
locker1='~/Bureau/please_start_megasync.lock'
locker2='~/Bureau/attic_working.lock'
timermaxage="518400"
sourcefolder='~/'
ATTIC_PASSPHRASE="Entrer ici une phrase de passe solide"
export ATTIC_PASSPHRASE
REPOSITORY='/tmp/home.attic'
timer="$REPOSITORY/timer"
curdate=$(date +%s)
if [ -f $timer ]; then
lastexec=$(stat -c %Y $timer)
echo "timer trouvé, lastexec: $lastexec"
else
lastexec="0"
echo "timer non trouvé"
fi
calcdiff=$(($curdate-$lastexec))
if [ -f $locker ]
then exit
else
touch "$locker"
if [ $calcdiff -gt $timermaxage ]; then
touch "$locker1"
ps ax | grep -v grep | grep megasync > /dev/null
while [ $? != 0 ]; do
sleep 1
ps ax | grep -v grep | grep megasync > /dev/null
done
rm "$locker1"
sleep 13 # on laisse un peu de temps pour connexion MegaSync
touch "$locker2"
attic create --stats $REPOSITORY::`date +%Y%m%d` $sourcefolder
attic prune -v $REPOSITORY --keep-daily=4
rm "$locker2"
touch "$timer"
fi
rm "$locker"
fi

Si vous n’utilisez pas MegaSync, vous pouvez zapper tout ce qui le concerne. Le timer et les verrous (locks) aussi si vous exécutez le script manuellement. Le timer de 518400 secondes ça correspond à 6 jours (le délai entre 2 points de sauvegarde).

Pour ce qui est d’Attic, il crée des points de sauvegarde nommés par exemple « 20150809 ». Avec la commande « attic list » il affiche pour chaque point de sauvegarde la date et l’heure précise, mais bon. Si les noms sont cohérents et prévisibles, faire des trucs comme l’extraction automatisée ça devient plus facile (ce qui se passe chez moi, la sauvegarde la plus récente (attic list $REPOSITORY | tail -n1 | head -c8) étant extraite vers mes disques durs externes  -au passage ça teste donc l’intégrité de la sauvegarde)

« attic prune » avec comme paramètre –keep-daily=4. J’ai besoin d’expliquer ? Cette commande supprime tous les points de sauvegarde précédents SAUF les 4 plus récents. Ce qui dans mon cas me donne une marge jusqu’à 4*6 = 24 jours d’historique, ça me convient.

Adaptez à votre sauce !


Powered by VroumVroumBlog 0.1.32 - RSS Feed
Download config articles