Informations :
Dates
- Publish : : Thursday 17 november 2005
- Modification : Tuesday 26 june 2012
- 2064 views
Share :
Introduction
Essentielles, mais laborieuses, les sauvegardes sont souvent remises à plus tard, par manque de temps ou de motivation. Par ailleurs, quand elles sont faites, la longueur de l'acte en découragera plus d'un. C'est surtout l'une des plus importantes. C'est le dernier rempart de défense contre les pannes matérielles, des brèches de sécurité et le danger ultime : les utilisateurs. Bien sûr il existe de nombreux systèmes de backup coûtant plusieurs milliers d'euros qui archivent les données sur de coûteux lecteurs de bande et utilisent du logiciel propriétaire cher et farci de bugs; mais on peut faire mieux, en utilisant rsync et une pile de disques durs bon marché.
Le problème
Je peux vous énumérer longuement les raisons pour lesquelles la sauvegarde est le cauchemar des administrateurs-système. Si vous êtes vous-même administrateur, c'est probablement inutile. Voici quelques-une de ces raisons : le matériel, cher, qui est plus souvent en panne qu'opérationnel, les logiciels coûteux dont la gestion tourne au cauchemar, les longues heures passées à restaurer de multiples versions de fichiers. Pour rendre les choses encore plus difficile, les sauvegardes ont rarement une haute priorité en entreprise - jusqu'au jour où, inévitablement, on en a vraiment besoin. Si vous avez déjà eu à faire des sauvegardes/restaurations, il y a des chances que vous ayez eu une conversation de ce genre :
- Utilisateur : "J'ai perdu un fichier. J'ai besoin de le récupérer. C'est urgent."
- SysAdmin : "D'accord. Quel nom, le fichier ?"
- Utilisateur : "Je ne sais pas, je pense qu'il y a un 'e' dans le nom."
- SysAdmin : "Bon. Dans quel répertoire était-il ?"
- Utilisateur : "Je ne sais pas, peut-être dans l'un de ces trois-là..."
- SysAdmin : "*Soupir* Quelle date, la dernière utilisation ?"
- Utilisateur : "Et bien.... Je crois que c'était un mardi ; en février ... ou en avril. Mais c'est quoi, le problème ? Je pensais que quelqu'un comme vous avait mis en place un *système pour faire face à ce genre de choses."
L'alternative rsync :
Rsync est un utilitaire Open Source qui permet un transfert rapide de fichiers incrémental.
Rsync est une puissante implémentation d'un beau petit algorithme. Cette puissance vient d'abord de sa capacité à faire un "miroir" efficace d'un système de fichiers. En utilisant rsync
, il est facile de paramétrer un système qui conservera une copie à jour d'un système de fichiers en utilisant un ensemble souple de protocoles réseau comme nfs, smb ou ssh. La seconde fonctionnalité de rsync exploitée par ce système de sauvegarde est sa capacité à archiver d'anciennes copies de fichiers modifiés ou effacés. Il existe bien trop de fonctions pour que cet article sur rsync soit exhaustif, je vous conseille donc de poursuivre votre lecture sur http://rsync.samba.org
Avantages : Récupération en cas de crash et restauration de fichiers deviennent faciles
Revenons à notre conversation imaginaire de tout à l'heure. Maintenant, au lieu d'un encombrant système à base de bandes, imaginez six mois de sauvegardes incrémentales qui vous attendent tranquillement sur votre machine Linux. En utilisant la combinaison favorite locate/find/grep
, il est possible de trouver toutes les occurences des fichiers de notre utilisateur imaginaire contenant un 'e' et dont la date correspond à un mardi en février ou avril, puis de les copier dans son répertoire personnel. Quant au problème de retrouver la bonne version, c'est devenu le genre de problème que je préfère : celui de quelqu'un d'autre que moi.
Ensuite, imaginons notre scénario favori - la panne complète. Supposons qu'un gros serveur nfs/samba vous lâche. Et bien, si vous avez sauvegardé vos configs samba ou surtout vos données personnennes, vous pouvez remonter votre serveur de sauvegarde en lecture seule en quelques minutes seulement. Essayez toujours avec des bandes.
élaborer le script :
La base de ce script vient du site Web de Rsync . Il n'y a en réalité qu'une seule commande:
Script avec 1 ligne
001rsync --force --ignore-errors --delete --delete-excluded --exclude-from=exclude_file --backup --backup-dir=`date +%Y-%m-%d` -av source destination
Les options clés sont:
-
--backup
: crée des sauvegardes des fichiers avant de les écraser en les écrivant sur eux-mêmes -
--backup-dir=`date +%Y-%m-%d`
: crée un répertoire de backup pour les sauvegardes, qui ressemble à ça pour la sauvegarde du 15 aût 2003 :2003-08-15
-
-av
: mode archive et mode verbeux.
Exemple de commande :
Ici nous voulons sauvegarder le dossier et ses sous dossiers de /etc
sur la machine "ip_server" dans le dossier /home/backup/gate/actuel/etc/
.
- 1. La première fois que vous executez cette commande tout le dossier
/etc/
sera copié dans le dossierip_server:/home/backup/gate/actuel/etc/
- 2. Les autres fois juste les fichiers modifiés seront ajoutés ou supprimés ou modifiés dans le dossier de sauveagarde
ip_server:/home/backup/gate/actuel/etc/
et seulement les sauvegardes (au cas où) des fichiers supprimés ou modifiés (les anciens) seront stokés dansip_server:/home/backup/gate/2003-08-15/etc/
Script avec 1 ligne
001rsync --force --ignore-errors --delete --delete-excluded --backup --backup-dir=/home/backup/gate/`date +%Y_%m_%d`/etc/ -av -e "ssh" /etc/ save@ip_server:/home/backup/gate/actuel/etc/
Le script avec connection SSH sur le poste de backup :
Ce script récupére les répertoires /etc
et /var/www
sur la machine locale et les envoie sur la machine distante backup.serveur.com
dans le répertoire /home/backup/ma_machine
.
Script avec 86 lignes
001#!/bin/sh
002# CREER PAR O.Romain Jaillet-ramey - POUR TOUT RENSEIGNEMENT : ORJ AT LAB3W DOT FR
003 004# Date Actuelle
005DATE=`date +%Y%m%d`
006 007# Repertoires a sauvegarder
008SOURCES="/etc /var/www"
009 010# Machine distante
011RMACHINE=backup.serveur.com
012 013# User de la machine distante
014RUSER=distant_user
015 016# Clé privé passphrase de la machine backup.serveur.com stokée sur la machine locale
017RKEY=/home/mon/user/local/.ssh/id_dsa
018 019# Repertoire de la machine distante où lon souhaite faire le backup
020RTARGET="/home/backup/ma_machine"
021 022# Dossier au sera stoké le mirroir
023DEFAULT="actuel"
024 025# Options
026OPTIONS="--force --ignore-errors --delete --delete-excluded --backup"
027 028########################
029# SCRIPT
030###
031 032if [ ! -f $RKEY ]; then
033echo "N'a pas pu trouver le fichier de la clé privé ssh !"
034echo "Exit !"
035exit 2
036fi
037 038if ! ssh -i $RKEY $RUSER@$RMACHINE "test pwd"; then
039echo "L'authentification à échouée !"
040echo "Exit !"
041exit 2
042fi
043 044if ! ssh -i $RKEY $RUSER@$RMACHINE "test -x $RTARGET"; then
045echo "Le répertoire $RTARGET sur la machine distante n'existe pas."
046echo "On essaie de le créer...."
047ssh -i $RKEY $RUSER@$RMACHINE "mkdir -p $RTARGET"
048049
if ! ssh -i $RKEY $RUSER@$RMACHINE "test -x $RTARGET"; then
050echo "Le répertoire $RTARGET n'a pas pû être créer ou à de mauvaises permissions."
051echo "Exit !"
052exit 2
053fi
054echo "Répertoire $RTARGET créé !"
055echo ""
056fi
057 058echo "Verification des Sources..."
059for source in $SOURCES; do
060echo "Analyse $source..."
061if [ ! -x $source ]; then
062echo "Erreur avec $source!"
063echo "Le répertoire n'existe pas ou vous n'avez pas des droits appropriés."
064exit 2
065fi
066done
067 068echo ""
069echo "Les sources sont vérifiées. Lancement de rsync..."
070echo ""
071for source in $SOURCES; do
072 073# Créer des répertoire selon le nombre de source
074if ! ssh -i $RKEY $RUSER@$RMACHINE "test -d $RTARGET/$source-$DEFAULT"; then
075ssh -i $RKEY $RUSER@$RMACHINE "mkdir -p $RTARGET/$source-$DEFAULT"
076fi
077078
rsync $OPTIONS --backup-dir=$RTARGET/$source-$DATE -av -e "ssh -i $RKEY" $source/ $RUSER@$RMACHINE:$RTARGET/$source-$DEFAULT
079done
080 081echo ""
082echo "Sauvegarde Journalière effectuée avec succés !!!"
083 084###
085# SCRIPT
086########################
PS : Nous avons utilisé une authentification par clés privé/publique pour que la connexion à l'hôte distant soit autonome. Le script qui suit peut être lancé chaque nuit en utilisant le système cron intégré à Linux. Pour lancer le script à 23 h chaque soir, utilisez la commande crontab -e
, puis tapez ce qui suit:
Script avec 1 ligne
0010 23 * * * /chemin/de/votre/script | mail -s "[BACKUP] Ma becane" mon_mail@domaine.com
Un autre script de backup sur la même machine
Script avec 110 lignes
001#!/bin/sh
002# CREER PAR O.Romain Jaillet-ramey - POUR TOUT RENSEIGNEMENT : ORJ AT LAB3W DOT FR
003#
004# BACKUP LOCAL : MYSQL - SMB - WEB - FTP
005#
006#########################################################################################
007 008# titre du backup
009TRAIT="###################################################################"
010CHROOT="CHROOT_LAB3W"
011TYPE="MYSQL - SMB - WEB - FTP"
012TITRE="LOCAL : $CHROOT - BACKUP : $TYPE"
013 014# Date Actuelle
015DATE=`date +%Y%m%d`
016 017# Repertoires a sauvegarder
018SOURCES="/var/lib/mysql
019/etc/samba
020/etc/apache
021/etc/servers
022/etc/backup
023/etc/pure-ftpd
024/etc/jabber
025/var/lib/jabber
026/etc/hosts
027/etc/hosts.allow
028/etc/hosts.deny
029/etc/passwd
030/etc/group
031/etc/shadow
032"
033#/etc/init.d/team-speak
034#/etc/init.d/serveur-cs
035#"
036 037# Repertoire de la machine où lon souhaite faire le backup
038RTARGET="/home/backup/chroot_lab3w"
039 040# Options
041OPTIONS="--force --ignore-errors --delete --delete-excluded --backup"
042 043########################
044# SCRIPT
045###
046 047echo ""
048echo $TRAIT
049echo "# $TITRE"
050echo $TRAIT
051echo ""
052 053if ! test -x $RTARGET; then
054echo "Le répertoire $RTARGET sur la machine locale n'existe pas."
055echo "On essaie de le créer...."
056mkdir -p {$RTARGET}
057058
if ! test -x $RTARGET; then
059echo "Le répertoire $RTARGET n'a pas pû être créer ou à de mauvaises permissions."
060echo "Exit !"
061exit 2
062fi
063echo "Répertoire $RTARGET créé !"
064echo ""
065fi
066 067echo "Verification des Sources..."
068for source in $SOURCES; do
069echo "Analyse $source ..."
070if [ ! -e $source ]; then
071echo "Erreur avec $source !"
072echo "Le fichier ou répertoire n'existe pas ou vous n'avez pas des droits appropriés."
073exit 2
074fi
075done
076 077echo ""
078echo "Les sources sont vérifiées. Lancement de rsync..."
079echo ""
080 081for source in $SOURCES; do
082083
# Vérifie si la source est bien un dossier
084if test -d $source; then
085# Créer des répertoire selon le nombre de source
086if ! test -d $RTARGET/$source; then
087mkdir -p $RTARGET/$source
088fi
089fi
090091
# Cest un repertoire
092if test -d $source; then
093rsync $OPTIONS --backup-dir=$RTARGET/$source-$DATE -av $source/ $RTARGET/$source
094fi
095096
# Cest un fichier
097if test -f $source; then
098rsync $OPTIONS --suffix=.$DATE -av $source $RTARGET/$source
099fi
100done
101 102echo ""
103echo "# $TITRE effectué avec succés !!!"
104echo $TRAIT
105echo ""
106 107###
108# SCRIPT
109########################
110
Bien sûr toujours une crontab pour executer le script à l'heure que l'on veut ;)
Liens :