Informations :
Dates
- Publish : : Thursday 17 november 2005
- Modification : Tuesday 26 june 2012
- 2238 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/sh002# CREER PAR O.Romain Jaillet-ramey - POUR TOUT RENSEIGNEMENT : ORJ AT LAB3W DOT FR003 004# Date Actuelle005DATE=`date +%Y%m%d`006 007# Repertoires a sauvegarder008SOURCES="/etc /var/www"009 010# Machine distante011RMACHINE=backup.serveur.com012 013# User de la machine distante014RUSER=distant_user015 016# Clé privé passphrase de la machine backup.serveur.com stokée sur la machine locale017RKEY=/home/mon/user/local/.ssh/id_dsa018 019# Repertoire de la machine distante où lon souhaite faire le backup020RTARGET="/home/backup/ma_machine"021 022# Dossier au sera stoké le mirroir023DEFAULT="actuel"024 025# Options026OPTIONS="--force --ignore-errors --delete --delete-excluded --backup"027 028########################029# SCRIPT030###031 032if [ ! -f $RKEY ]; then033echo "N'a pas pu trouver le fichier de la clé privé ssh !"034echo "Exit !"035exit 2036fi037 038if ! ssh -i $RKEY $RUSER@$RMACHINE "test pwd"; then039echo "L'authentification à échouée !"040echo "Exit !"041exit 2042fi043 044if ! ssh -i $RKEY $RUSER@$RMACHINE "test -x $RTARGET"; then045echo "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"048049if ! ssh -i $RKEY $RUSER@$RMACHINE "test -x $RTARGET"; then050echo "Le répertoire $RTARGET n'a pas pû être créer ou à de mauvaises permissions."051echo "Exit !"052exit 2053fi054echo "Répertoire $RTARGET créé !"055echo ""056fi057 058echo "Verification des Sources..."059for source in $SOURCES; do060echo "Analyse $source..."061if [ ! -x $source ]; then062echo "Erreur avec $source!"063echo "Le répertoire n'existe pas ou vous n'avez pas des droits appropriés."064exit 2065fi066done067 068echo ""069echo "Les sources sont vérifiées. Lancement de rsync..."070echo ""071for source in $SOURCES; do072 073# Créer des répertoire selon le nombre de source074if ! ssh -i $RKEY $RUSER@$RMACHINE "test -d $RTARGET/$source-$DEFAULT"; then075ssh -i $RKEY $RUSER@$RMACHINE "mkdir -p $RTARGET/$source-$DEFAULT"076fi077078rsync $OPTIONS --backup-dir=$RTARGET/$source-$DATE -av -e "ssh -i $RKEY" $source/ $RUSER@$RMACHINE:$RTARGET/$source-$DEFAULT079done080 081echo ""082echo "Sauvegarde Journalière effectuée avec succés !!!"083 084###085# SCRIPT086########################
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/sh002# CREER PAR O.Romain Jaillet-ramey - POUR TOUT RENSEIGNEMENT : ORJ AT LAB3W DOT FR003#004# BACKUP LOCAL : MYSQL - SMB - WEB - FTP005#006#########################################################################################007 008# titre du backup009TRAIT="###################################################################"010CHROOT="CHROOT_LAB3W"011TYPE="MYSQL - SMB - WEB - FTP"012TITRE="LOCAL : $CHROOT - BACKUP : $TYPE"013 014# Date Actuelle015DATE=`date +%Y%m%d`016 017# Repertoires a sauvegarder018SOURCES="/var/lib/mysql019/etc/samba020/etc/apache021/etc/servers022/etc/backup023/etc/pure-ftpd024/etc/jabber025/var/lib/jabber026/etc/hosts027/etc/hosts.allow028/etc/hosts.deny029/etc/passwd030/etc/group031/etc/shadow032"033#/etc/init.d/team-speak034#/etc/init.d/serveur-cs035#"036 037# Repertoire de la machine où lon souhaite faire le backup038RTARGET="/home/backup/chroot_lab3w"039 040# Options041OPTIONS="--force --ignore-errors --delete --delete-excluded --backup"042 043########################044# SCRIPT045###046 047echo ""048echo $TRAIT049echo "# $TITRE"050echo $TRAIT051echo ""052 053if ! test -x $RTARGET; then054echo "Le répertoire $RTARGET sur la machine locale n'existe pas."055echo "On essaie de le créer...."056mkdir -p {$RTARGET}057058if ! test -x $RTARGET; then059echo "Le répertoire $RTARGET n'a pas pû être créer ou à de mauvaises permissions."060echo "Exit !"061exit 2062fi063echo "Répertoire $RTARGET créé !"064echo ""065fi066 067echo "Verification des Sources..."068for source in $SOURCES; do069echo "Analyse $source ..."070if [ ! -e $source ]; then071echo "Erreur avec $source !"072echo "Le fichier ou répertoire n'existe pas ou vous n'avez pas des droits appropriés."073exit 2074fi075done076 077echo ""078echo "Les sources sont vérifiées. Lancement de rsync..."079echo ""080 081for source in $SOURCES; do082083# Vérifie si la source est bien un dossier084if test -d $source; then085# Créer des répertoire selon le nombre de source086if ! test -d $RTARGET/$source; then087mkdir -p $RTARGET/$source088fi089fi090091# Cest un repertoire092if test -d $source; then093rsync $OPTIONS --backup-dir=$RTARGET/$source-$DATE -av $source/ $RTARGET/$source094fi095096# Cest un fichier097if test -f $source; then098rsync $OPTIONS --suffix=.$DATE -av $source $RTARGET/$source099fi100done101 102echo ""103echo "# $TITRE effectué avec succés !!!"104echo $TRAIT105echo ""106 107###108# SCRIPT109########################110
Bien sûr toujours une crontab pour executer le script à l'heure que l'on veut ;)
Liens :



