Sauvegarde de serveurs GNU/Linux

Navigation

Sauvegarde
présentation
Backup local
Backup distant
Automatisation
Vérification
Restauration
Les scripts bash

Accueil

Scripts du système de sauvegarde

Remarques :

Le périphérique bande magnétique est représenté par le pseudo-fichier /dev/nst0. Le lien symbolique /dev/tape à été configuré pour pointer vers ce dernier. Ceci permet de jouer la commande "mt" sans avoir à préciser chaque fois le paramètre "-f /dev/tape" ou "-f /dev/nst0". Pour éviter le mauvaises manipulations à distance, le clapet de la bande magnétique est maintenu fermé grâce à la commande : mt lock. Pour retirer la bande magnétique il faut jouer la commande mt unlock.


Scripts de backup : présentation

Les scripts de backup sont disponibles ici


backup.sh            script principal du système de backup. Présent sur la
                     machine à sauvegarder.

backup_tape.sh       script de test *** DEPRECATED ***

backup_rsync.sh      script à jouer sur l'hôte chargé d'exécuter la sauvegarde
                     distante.

backup_routines.sh   ensemble des routines utilitaires utilisées par les
                     différents scripts de backup sur la machine à sauvegarder
                     (backup.sh et backup_tape.sh).
        

Backup local (backup.sh)

Effectué par les scripts backup.sh et backup_routines.sh sur la machine à sauvegarder (dans /root).

Utilisation: ./backup.sh -h || ./backup.sh --help (utilisateur root)
# This script implements incremental backups using afio on tapes.

# USAGE:      backup.sh level
#     level = 0      :  fullbackup
#     level = 1      :  incremental backup
#
#
# EXAMPLE:    backup.sh 0
        

Variables de configuration:

  • EMAILTO : adresse email à qui envoyer le résumé d'exécution

  • BACKUP_DIR, SYSTEM_FILES, DATABASE_FILE : répertoires/fichiers de stockage des données sur le disque dur

  • TAPE_DEV : pseudo-fichier pilotant la bande magnétique

  • DATA_TO_BACKUP : répertoires de la machine, à sauvegarder

Principes de fonctionnement:

  • Le paramètre 0 ou 1 du script backup.sh permet de fixer le niveau de sauvegarde. Une sauvegarde de niveau 0 est une sauvegarde totale des données. Une sauvegarde de niveau 1 est une sauvegarde différentielle des données relative à la dernière sauvegarde de niveau 0. Nous n'avons pas choisi d'implémenter une sauvegarde de niveau supérieur car elle aurait représenté un plus grand risque de perte de données. Nous effectuons une sauvegarde de niveau 0 (le dimanche) et six sauvegarde de niveau 1 (différentielles par rapport au dimanche précédant).

  • La sauvegarde est effectuée tout d'abord sur disque dans le répertoire BACKUP_DIR pour permettre les deux types d'accès aux données à sauvegarder: local et distant.

  • Après quelques vérifications, le script lance la construction du répertoire de sauvegarde dans BACKUP_DIR. Il lance les commande permettant d'effectuer le dump de la base de données, la sauvegarde des informations systèmes et la copie des fichiers. C'est cette copie qui est soumise à l'influence du critère du niveau de sauvegarde (0 ou 1).

  • Si il y a une bande magnétique dans le lecteur et que tous le outils nécessaires pour écrire sur la bande sont disponibles, l'écriture sur le périphérique est lancée. Le format de l'archive est afio. Ce format apporte une plus grande fiabilité dans la production de sauvegardes. Le format afio est compatible avec cpio. Le système de fichiers de contrôle à été utiliser pour recenser les sauvegardes présentes sur la bande magnétique. Le format de fichier de contrôle choisit est décrit ultérieurement dans la section "Vérification du contenu de la bande magnétique". Il est possible d'utiliser la compression au niveau du périphérique et au niveau de la création de l'archive afio. Ces mécanismes de compression n'ont pas été mis en oeuvre pour l'instant. La bande magnétique est rembobinée un dimanche sur deux. On a ainsi de bonnes chances d'avoir près d'une semaine d'historique sur la bande ; à condition que le recouvrement ne soit pas trop important... Par exemple : le dimanche où se produit le rembobinage de la bande magnétique, l'enregistrement recouvre une partie de l'avant dernière semaine (semaine 0). Il suffit d'avancer jusqu'au second dimanche présent sur la bande (semaine 1) pour avoir un historique d'une semaine (commande ls_tape.sh puis mt fsf).

  • Le résultat de l'opération est rapporté dans les journaux systèmes suivant le service "user" et le niveau "info". On retrouve donc le rapport dans /var/log/user.log.

  • Le résultat de l'opération est ensuite rapporté par mail à l'adresse EMAILTO (attention à la configuration du serveur de mail).


Backup distant (backup_rsync.sh)

Effectué par le script backup_rsync.sh sur la machine distante hôte de la sauvegarde (dans un répertoire accueillant la sauvegarde).

Utilisation: ./backup_rsync.sh

Variables de configuration:

  • TOPDIR : répertoire dans lequel les sauvegardes sont stockées.

  • REMOTE_BACKUP_DIR : répertoire de stockage des données sur le disque dur de la machine à sauvegarder, distante. Correspond à la variable BACKUP_DIR du script backup.sh.

  • LOCAL_BACKUP_DIR : répertoire de stockage des données sur le disque dur de la machine hôte qui stocke la sauvegarde, locale.

  • SSH_USER : utilisateur du système distant par lequel on peut accéder aux données sur la machine distante.

  • HOSTNAME : nom accessible de la machine distante.

Principes de fonctionnement:

  • L'objet de ce script est de maintenir un répertoire local, miroir du répertoire de sauvegarde de la machine distante, tel que construit par le script backup.sh évoqué plus haut. Ce répertoire local à jour, le script lance la création d'une archive pour garder l'historique de cette mise à jour.

  • La mise à jour du miroir local est effectuée par rsync. Ceci permet de limiter l'utilisation de bande passante entre les machines à sauvegarder et hôte de la sauvegarde distante.

  • La création de l'archive est ensuite effectuée à partir du répertoire miroir mis à jour. Le nom du fichier d'archive est en fait un timestamp du type `date +%Y%m%d-%H%M` (soit année, mois, jour, heure, minute). Le format d'archive dépend du système de compression présent sur la machine hôte. Les systèmes sont choisis dans cet ordre : bz2, gz, non compressé.


Déclenchement automatique

Le script backup.sh fait l'objet d'une entrée dans la crontab de la machine à sauvegarder. Nous avons choisi de faire une sauvegarde complète (niveau 0) le dimanche et différentielle les autres jours de la semaine. Voici le fichier présent dans cron.d:
####################################################
# Backups

# Backups are made at 5am, sunday is full backup day
0  5  * * 0     root    cd /root && ./backup.sh 0
0  5  * * 1-6   root    cd /root && ./backup.sh 1
####################################################
        

Le script backup_rsync.sh doit être déclenché lorsque le répertoire à mirrorer est à jour sur la machine à sauvegarder. Les machines seront synchronisées et la machine hôte déclenchera le backup distant quelques temps après déclenchement de backup.sh sur la machine à sauvegarder.

Le script backup_rsync.sh utilisant ssh pour se connecter à la machine à sauvegarder, il est indispensable de prévoir un échange de clés entre les deux machine. En effet, une demande de mot de passe interactive ne doit pas bloquer le déroulement du script. A cet effet la clé host publique du serveur est dans machine_stockage:/etc/ssh/ssh_known_hosts2, et la clé publique DSA de root@machine_stockage est dans le admin@serveur:.ssh/authorized_keys.


Vérification du contenu de la bande magnétique (ls_tape.sh)

Elle est possible grâce au script ls_tape.sh et à l'utilisation du système des fichiers de contrôle afio.

Utilisation: ./ls_tape.sh (utilisateur root)
# This script Lists all backups written on the tape.
# it uses the afio control files.

# USAGE:      ls_tape.sh [-h|--help]
#     ls_tape.sh -h     :  prints this message
        

Variables de configuration:

  • TAPE_DEV : pseudo-fichier pilotant la bande magnétique

Principes de fonctionnement:

  • Au moment de la création de l'archive sur bande (par le script backup.sh) un fichier de contrôle est inséré. Il précise des informations caractérisant le sauvegarde. Voici son format :
    # afio archive header
    TIMESTAMP: Wed Mar 20 18:49:31 CET 2002
    LEVEL: 0 
    WEEK: 0
    	  
    On y voit donc inscrit la date de backup, le niveau de backup et la semaine de présence sur la bande magnétique (0 ou 1 pour une configuration à 2 semaines sur la bande). Ce fichier de contrôle est identifié à l'aide du tag "backup_sh.headertext".

    Un script fournit à afio permet d'exécuter une action sur ce fichier de contrôle lors de restauration de la sauvegarde ou de sa consultation. Le script actuel effectue simple un affichage de ces données (un "cat" du fichier de contrôle). Ce script de contrôle est lui même "embarqué" dans le script ls_tape.sh sous le nom "PARSING_SCRIPT".

  • Le script ls_tape.sh vérifie donc plusieurs choses dont la présence de la bande dans le lecteur.

  • Il doit ensuite compter le nombre de fichiers accessibles depuis le début de la bande magnétique. Cette méthode est indispensable car nous avons affaire à un support à accès séquentiel (et non aléatoire comme un disque dur par exemple).

  • Ce nombre de fichiers connu, le script parcours une nouvelle fois la bande magnétique pour afficher les informations des fichiers de contrôle sur STDERR.

  • Le script ls_tape.sh laisse la bande magnétique à l'endroit où se termine les données pour permettre au prochain enregistrement de ne pas effacer des données précieuses (mt eod inutile).

  • Résultat de la commande :
    # ./ls_tape.sh
    -- Listing archives written on the tape (may take some time)...
    # afio archive header
    TIMESTAMP: Wed Mar 20 18:49:31 CET 2002
    LEVEL: 0
    WEEK: 0
    # afio archive header
    TIMESTAMP: Thu Mar 21 05:00:01 CET 2002
    LEVEL: 1
    WEEK: 0
    # afio archive header
    TIMESTAMP: Fri Mar 22 05:00:01 CET 2002
    LEVEL: 1
    WEEK: 0
    # afio archive header
    TIMESTAMP: Sat Mar 23 05:00:01 CET 2002
    LEVEL: 1
    WEEK: 0
    # afio archive header
    TIMESTAMP: Sun Mar 24 05:00:01 CET 2002
    LEVEL: 0
    WEEK: 1
    # afio archive header
    TIMESTAMP: Mon Mar 25 05:00:01 CET 2002
    LEVEL: 1
    WEEK: 1
    # afio archive header
    TIMESTAMP: Tue Mar 26 05:00:01 CET 2002
    LEVEL: 1
    WEEK: 1
    # afio archive header
    TIMESTAMP: Wed Mar 27 05:00:01 CET 2002
    LEVEL: 1
    WEEK: 1
    # afio archive header
    TIMESTAMP: Thu Mar 28 05:00:01 CET 2002
    LEVEL: 1
    WEEK: 1
    # afio archive header
    TIMESTAMP: Fri Mar 29 05:00:01 CET 2002
    LEVEL: 1
    WEEK: 1
    -- Listing completed.
              


HOWTO restauration

Préalable : Le système ne faisant pas un backup intégral du système, il est nécessaire de disposer d'un système Debian minimal pour entamer la restauration. Le programme afio est nécessaire à cette restauration.


Restauration du contenu de l'archive

Se fait grâce à la commande "afio -i", une fois le bon fichier d'archive est identifié grâce à "ls_tape.sh". Les commande "mt" permettent de "caler" la bande magnétique à la position adéquate. Les restauration des paramètres systèmes de /etc se font par copie. La restauration de la base de donnée se fait grâce au dump restitué.


Restauration des paquets Debian

# dpkg --set-selections < backup/system/backup.pkg.lst
# apt-get update 
# apt-get dist-upgrade 
        

Scripts bash de sauvegarde

Document sous licence FDL

Nicolas Ferre 2002-05-24