Sauvergarder son serveur

Dès qu’on exploite un serveur, la question des sauvegardes se pose.
Cette question n’est pas nouvelle, c’est pourquoi il existe divers utilitaires (dont rsync et rsnapshot) qui font très bien le travail.
Il suffit juste savoir s’en servir.

Edit : revu au 4 août 2009

L’objectif

Le but est de pouvoir sauvegarder un serveur :

  • en intégralité,
  • périodiquement,
  • sans pour autant exploser son espace de stockage
  • et avec une historique de sauvegarde quotidienne et hebdomadaire.

Pré requis

Cet article prendra comme base de départ, la présence de 2 serveurs à base *nix (dans notre cas ce sera debian etch et lenny).

Les outils utilisés seront :

Pour installer ces outil sur un serveur debian, apt est votre ami :
apt-get install rsnapshot rsync

Configurer rsnapshot

Toute la configuration se fait dans le fichier /etc/rsnapshot.conf

Définir le répertoire de backup

Par défaut, rsnapshot prévoit de copier dans une repertoire du home, pour ma part je preéres utiliser le repertoire /var/ donc dans /var/snapshots/

# All snapshots will be stored under this root directory.
#
snapshot_root   /var/snapshots/

Définir les commandes bash

Rsnapshot est prévu pour fonctionner sur un ensemble de plateformes plus ou moins différentes. Nous personnalisons certaines commandes pour exploiter au mieux notre base *nix.

cmd_cp          /bin/cp


Rsnapshot posséde en interne un clone imparfait de cp. Utiliser cp offre en plus entre autre la gestion des liens système tel que FIFO, sockets, les périphériques, ...

cmd_du          /usr/bin/du


En fonction des systèmes du n’est pas codé de la même façon, c’est pourquoi nous devons spécifier nous même le chemin de cet utilitaire. Si nous avons un vieux système nous pouvons profiter de du_args pour ajouter les bon paramétres à cette commande.

cmd_rsnapshot_diff      /usr/bin/rsnapshot-diff


rsnapshot-diff est un utiltaire propre à rsnapshot pour comparer 2 sauvegardes entre elles.

Prévoir des copies distante

Pour sauvegarder des données entre 2 serveurs distants, nous devons activer certaines options spécifiques.

cmd_ssh      /usr/bin/ssh
link_dest       1

La première option permet d’utiliser ssh pour rapatrier des données sur un serveur distant. La seconde permet d’exploiter au mieux les outils de copie entre rsync et cp (principalement pour réaliser des liens durs récursifs et gérer les fichiers spéciaux)

Filtrer les fichiers

Si on défini une sauvegarde compléte du systéme, il faut penser à ignorer :

  • le repertoire de sauvegarde
  • les repertoires systémes (ceux qui pointent sur le matériel)
  • les fichiers et repertoires temporaires

Pour ceci il faut utiliser le paramétre exclude_file

exclude_file    /var/cache/rsnapshot/exclude_file.txt

Dans l’exemple précédent, on indique que le fichier /var/snapshots/exclude_file.txt contient la liste des fichiers à ignorer.

### transient directories - contents 
### tmp ### 
+ tmp/ 
- **/tmp/** 
+ /tmpfs/ 
- /tmpfs/** 
### transient ### 
+ /proc/ 
- /proc/** 
+ /mnt/ 
- /mnt/** 
+ /cdrom/ 
- /cdrom/** 
+ /sys/
- /sys/**
### cache ### 
# mozilla 
+ Cache/ 
- **/Cache/** 
# ccache.samba.org 
+ ccache/ 
- **/ccache/** 
+ .ccache/ 
- **/.ccache/** 
# others 
+ cache/ 
- **/cache/** 
+ xover-cache/ 
- **/xover-cache/** 
### obj ### 
# kernel build 
- usr/src/**.o 
# special library .o (may be RH specific?) 
+ usr/*/lib/**.o 
+ usr/lib/**.o 
# all others 
- *.o 
### backup ### 
- *~
+ /var/backups/
### rsnapshot ###
+ /var/snapshots/
- /var/snapshots/**

Definir les sauvegardes

Sauvegarde locale

On considére la présence d’un disque dur dédié aux sauvegardes. Celui est monté sur /var/snapshots/. Dans ce cas :

backup /          localhost/

On indique dans ce cas qu’on sauvegarde l’intégralité du serveur / dans le repertoire /var/snapshots/[rotation]/localhost. [rotation] correspond aux rotations des sauvegardes définies précédemment (hourly, dayly, ....)

Sauvegarde distante

Dans ce cas le serveur de sauvegarde se connecte via ssh sur le serveur maitre et effectue les copies demandées.

backup  user@serveur_distant:/var/ serveur_distant/

Il est important de noté que l’utilisateur user doit exister sur serveur_distant. Pour permettre l’automatisation du script, il faut generer une clef ssh dédiée et la sauvegarder convenablement sur les serveurs.

Cron et sauvegarde planifiée

Déclarer le nombre de copies

Le nombre de sauvegarde et leur rotation sont défini via le paramétre interval

Dans l’exemple, on indique qu’il y aura :

  • 6 sauvegardes nommées hourly,
  • 7 daily
  • et aucune weekly ou monthly du fait du #

Lorsque rsnapshot aura traité toute les sauvegardes et rotations, nous aurons 13 copies :

  • /var/snapshots/hourly.0/
  • ...
  • /var/snapshots/hourly.5/
  • /var/snapshots/daily.0/
  • ...
  • /var/snapshots/daily.6/

Il faut noter que l’ordre dans lequel est défini les interval est important car lors des rotations daily.0/ sera copié depuis hourly.5/ et hourly.0/ sera syncrhonisé depuis le système.

Activer les rotations (cron)

Une fois les rotations définies, il faut lancer rsnspashot selon ces intervalles. Par conséquent il faut éditer /etc/cron.d/rsnapshot, si on conserver les choix fait précédemment.

# This is a sample cron file for rsnapshot.
# The values used correspond to the examples in /etc/rsnapshot.conf.
# There you can also set the backup points and many other things.
#
# To activate this cron file you have to uncomment the lines below.
# Feel free to adapt it to your needs.

0 */4          * * *           root    /usr/bin/rsnapshot hourly
30 3    * * *           root    /usr/bin/rsnapshot daily
#0  3    * * 1           root    /usr/bin/rsnapshot weekly
#30 2   1 * *           root    /usr/bin/rsnapshot monthly

Selon cet exemple on réalise :

  • une copie hourly toute les 4h soit 6 par jours.
  • une copie quotidienne à 3h30

Messages

  • Salut,
    super tuto mais moi je début et j’ai installé un server ubuntu chez moi ou j’ai déjà mon site qui tourne et 2 3 petites choses.
    Quand je vois ça je me dis ok je vois ce qu’il veut dire mais la ligne est fausse :


    exclude_file /var/cache/rsnapshot/exclude_file.txt
    Dans l’exemple précédent, on indique que le fichier /var/snapshots/exclude_file.txt contient la liste des fichiers à ignorer


    Ton exclude file est à deux endroits ???
    Moi perso je l’ai mis dans mon home/backup
    Le truc qui me chipotte c’est que un fois le fichier de conf terminé faut il lancer la ligne de commande : backup user@ etc ...
    Car la moi il me dit que open-afs client est pas installé
    Merci d’avance
    Alain A

  • Rebonjour,
    Donc après avoir tout fait ( server distant via ssh )
    J’ai lancé un sudo rsnapshot configtest
    J’ai un Syntax ok
    C’est peu être con mais comment lancer de suite la sauvegarde pour tester.
    J’ai essayé de trouver un bash mais tout devient assez compliqué.
    Cdt,
    Alain A

    • Bonjour
      Content de voir ce tutoriel servir encore. Pour tester la configuration on a le choix entre :

      • attendre l’éxécution du cron
      • lancer rsnapshot -t hourly pour voir ce qui se passerait mais sans effectuer la sauvegarder
      • lancer rsnapshot hourly pour exécuter pour de vrai la sauvegarder horaire.
        À la place de hourly, on peut tout à fait utiliser daily ou une autre valeur de période selon sa configuration.
        Pour ceci je trouve la documentation officielle très complète

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.