Informations :
Dates
- Publish : : Thursday 17 november 2005
- Modification : Tuesday 26 june 2012
- 1862 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 html 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 html
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 html. 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 033 echo "N'a pas pu trouver le fichier de la clé privé ssh !" 034 echo "Exit !" 035 exit 2 036fi 037 038if ! ssh -i $RKEY $RUSER@$RMACHINE "test pwd"; then 039 echo "L'authentification à échouée !" 040 echo "Exit !" 041 exit 2 042fi 043 044if ! ssh -i $RKEY $RUSER@$RMACHINE "test -x $RTARGET"; then 045 echo "Le répertoire $RTARGET sur la machine distante n'existe pas." 046 echo "On essaie de le créer...." 047 ssh -i $RKEY $RUSER@$RMACHINE "mkdir -p $RTARGET" 048 049 if ! ssh -i $RKEY $RUSER@$RMACHINE "test -x $RTARGET"; then 050 echo "Le répertoire $RTARGET n'a pas pû être créer ou à de mauvaises permissions." 051 echo "Exit !" 052 exit 2 053 fi 054 echo "Répertoire $RTARGET créé !" 055 echo "" 056fi 057 058echo "Verification des Sources..." 059for source in $SOURCES; do 060 echo "Analyse $source..." 061 if [ ! -x $source ]; then 062 echo "Erreur avec $source!" 063 echo "Le répertoire n'existe pas ou vous n'avez pas des droits appropriés." 064 exit 2 065 fi 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 074 if ! ssh -i $RKEY $RUSER@$RMACHINE "test -d $RTARGET/$source-$DEFAULT"; then 075 ssh -i $RKEY $RUSER@$RMACHINE "mkdir -p $RTARGET/$source-$DEFAULT" 076 fi 077 078 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 html 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 054 echo "Le répertoire $RTARGET sur la machine locale n'existe pas." 055 echo "On essaie de le créer...." 056 mkdir -p {$RTARGET} 057 058 if ! test -x $RTARGET; then 059 echo "Le répertoire $RTARGET n'a pas pû être créer ou à de mauvaises permissions." 060 echo "Exit !" 061 exit 2 062 fi 063 echo "Répertoire $RTARGET créé !" 064 echo "" 065fi 066 067echo "Verification des Sources..." 068for source in $SOURCES; do 069 echo "Analyse $source ..." 070 if [ ! -e $source ]; then 071 echo "Erreur avec $source !" 072 echo "Le fichier ou répertoire n'existe pas ou vous n'avez pas des droits appropriés." 073 exit 2 074 fi 075done 076 077echo "" 078echo "Les sources sont vérifiées. Lancement de rsync..." 079echo "" 080 081for source in $SOURCES; do 082 083 # Vérifie si la source est bien un dossier 084 if test -d $source; then 085 # Créer des répertoire selon le nombre de source 086 if ! test -d $RTARGET/$source; then 087 mkdir -p $RTARGET/$source 088 fi 089 fi 090 091 # Cest un repertoire 092 if test -d $source; then 093 rsync $OPTIONS --backup-dir=$RTARGET/$source-$DATE -av $source/ $RTARGET/$source 094 fi 095 096 # Cest un fichier 097 if test -f $source; then 098 rsync $OPTIONS --suffix=.$DATE -av $source $RTARGET/$source 099 fi 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 :
- Rsync - Samba.org html
- TuxNix : Wiki - RSYNC html