SweetBox à plusieurs rôles :


Le dernier (à l’heure actuelle) rôle de sweetBoxest un rôle de serveur de sauvegarde.


Cet article est le premier d’une série destinée à décrire les configurations mises en œuvre pour remplir ce rôle.

On s’attachera ici à décrire ce que l’on entend par sauvegarde, présenter quelques logiciels de sauvegarde disponibles sous Linux et présenter celui choisi.



La sauvegarde consiste à dupliquer (au moins) des données que l’on estime importante (par exemple ses photos numériques)

J’ai indiqué au moins suite au mot dupliquer puisque généralement on réalise n copies que l’on fait tourner sur un certain nombre de jour, semaine, mois au année



Le logiciel de sauvegarde sous linux sont nombreux, du plus rustique comme un script maison à base de rsync, au plus évolué comme backupPC.

cf. http://doc.ubuntu-fr.org/sauvegarde


Après étude certain d’entre eux, mon choix s’est port sur rSnapshot pour les raisons suivantes :

  • ligne de commande donc plannifiable aisément en tache Cron
  • gère les diverses copie via des hardlink (espace disque gagné)
  • pas surdimensionné comme BackupPC qui se destine à des infra-structure plus conséquentes
  • utilise rsync qui ne synchronise que les différences
  • fichiers sauvegardés directement accessibles dans une arborescence





Installation


Elle se fait simplement, rsnapshot étant dans les dépots Ubuntu

sudo aptitude install rsnapshot


Ce package à une dépendance vers le méta-package SSH.



Paramétrage de base


Tout le paramétrage de rsnapshot se fait dans un fichier unique, un exemple de fichier est fournis dans /etc/rsnapshot.conf mais je préfère en créer un nouveau dans le home de mon utilisateur lançant les sauvegarde et de le spécifier à rsnpashot à l’exécution avec le paramètre -c.


Un caractéristique très importante de ce fichier de configuration la séparation entre la clé et la valeur doit absolument être une tabulation (à ce propos il existe une astuce VIM permettant de visualiser les caractères spéciaux dont les tabulations, ce sera l’objet d’un prochain post) 



Ci dessous mon fichier de configuration :


config_version 1.2
snapshot_root /data/sauvegardes/
#no_create_root 1
cmd_cp /bin/cp
cmd_rm /bin/rm
cmd_rsync /usr/bin/rsync
cmd_ssh /usr/bin/ssh
cmd_logger /usr/bin/logger
cmd_du /usr/bin/du
cmd_rsnapshot_diff /usr/bin/rsnapshot-diff
#cmd_preexec    /path/to/preexec/script
#cmd_postexec    /path/to/postexec/script
exclude .gvfs
interval daily 7
interval weekly 4
interval monthly 2
verbose 2
loglevel 3
logfile /var/log/svc/rsnapshot.log
lockfile /var/lock/rsnapshot.pid
rsync_long_args --delete --numeric-ids --delete-excluded
ssh_args -o BatchMode=yes
backup mon_user@sweethome:/home 


Je ne décrirais pas ici les spécificités de ce dernier (exlude) mais uniquement les généralités.


snapshot_root :

Chemin où seront stockés les sauvegardes


no_create_root :

indique qu’il ne faut pas créer le chemin indiqué ci-dessus si il n’existe pas


cmd_xxx :

indique les chemin des différents outils standards utilisés par rSnapshot. Ces chemin pouvant varier d’une distribution à une autre il est conseillé de tous les vérifier.

Concernant les 2 derniers (cmd_pre/postexec)cela permet d’éxécuter un script spécifique avant et/ou après la sauvegarde


interval :

Source de confusion chez de nombreuses personnes, on défini ici un groupe de sauvegarde, la synthaxe est la suivante :

interval      nom_groupe       nombre_de_sauvegarde_de_ce_groupe_a_garder


Les groupes définis par défaut par rSnapshot sont ceux indiqués dans mon fichier.

On a défini 3 groupes : daily pour lequel on garde 7 jeux de sauvegarde (comme les 7 jours d’une semaine), weekly avec 4 jeux (4 semaines dans un mois) et monthly avec 2 jeux de sauvegarde.


La confusion vient du fait que les groupes portent des noms d’interval de temps faisant que nombre de personnes pensent que rSnapshot réalisera lui-même la plannification des sauvegardes.

Mais non, il vous  faut plannifer vos sauvegarde, l’éxécution de rSnapshot à interval régulier via Cron par exemple.


Pour pousser la demonstration on peut même envisager de plannifier rSnapshot toutes les heures avec le groupe daily (ce qui est absurde).



Concernant le nombre de jeu de sauvegarde gardé par groupe, prenons un exemple :

interval      toto      3


Le premier lancement de rsnapshot créera un répertoire toto.0 dans snapshot_root puis réalisera la sauvegarde dans ce répertoire.

rsync --> toto.0


Lorsque l’on lancera une deuxième fois rSnapshot avec le groupe toto, le répertoire toto.0 sera renomé en toto.1.

Un copie de toto.1 en toto.0 sera réalisée en faisant des hardlinks (cp -al) ainsi seuls les fichiers différents (aucun a ce moment du process de sauvegarde)  seront stockés en 2 endroits du disque.

Ensuite rsync sera appellé pour sauvegarder les différences dans toto.0.

rsync --> toto.0 --> toto.1


Au 3ème appel de rSnapshot avec le groupe toto, on aura le même process :

rsync --> toto.0 --> toto.1 --> toto.2


Enfin dernier cas lors du 4 ème appel, vue que l’on a configuré le groupe toto pour ne garder que 3 jeux de sauvegarde on aura :

rsync --> toto.0 --> toto.1 --> toto.2 --> poubelle


Et ainsi de suite…


 logfile et lockfile :

Pas grand-chose à dire si ce n’est que l’utilisateur lançant rSnapshot doit avoir le droit décrire dans les fichiers / répertoires.


backup :

Ces ici que l’on configure ce que l’on doit sauvegarder, la synthaxe sera différente selon la source de la sauvegarde, mais dans le cas le plus simple on aura :

backup     source    destination


La source pourra être une source locale (/etc, /home, etc), distante montée localement (via samba ou NFS) ou distante via SSH (fera l’objet d’un post).

La destination est optionnelle, si on l’omet les fichier et sous répertoire seront copié directement dans le répertoire nom_du_groupe.0/1/2/x, sinon un sous-répertoire sera créé.


Exécution

L’exécution de rSnapshot se fait avec un simple :

rsnapshot -v -c fichier.conf nom_groupe_executer


Il ne reste plus qu’ensuite à plannifier en tache cron les différents groupes définis dans le fichier de configuration, ce qui mon exemple pourrait donner :  

0 1    * * *           root    rsnapshot -v -c fichier.conf daily
0 1    * * 1           root    rsnapshot -v -c fichier.conf weekly
0 1    1 * *           root    rsnapshot -v -c fichier.conf monthly



Edit :

Suppression de l’argument rsync-path (plus nécessaires), correction de la ligne de commande pour exécuter rSnapshot (-cv ne fonctionne pas)


Sources :

http://www.rsnapshot.org/

http://geekfault.org/2009/05/16/rsnapshot/

http://softsolder.wordpress.com/2009/04/25/backup-with-rsnapshot/

http://www.tomsquest.com/blog/humeur-fcron-et-rsnapshot-la-doc-et-les-exemples/

http://km.azerttyu.net/Sauvergarder-son-serveur.html




Les commentaires sont fermés.