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ésentationLes scripts de backup sont disponibles ici
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).
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 automatiqueLe 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:
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'archiveSe 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
|