Comment faire : SSH, OpenSSL, Iptables, RSYNC, RAID, VPN...
 Charge moyenne sur 1mn : 0.52 Charge moyenne sur 5mn : 0.72 Charge moyenne sur 15mn : 0.72




Rsync : le meilleur des systèmes de sauvegarde

  • Rsync : le meilleur des systèmes de sauvegarde
Sauvegarde automatisé rapide et fiable. En utilisant rsync, il est facile de paramétrer un système qui conservera une copie à jour d'un système de fichiers.

Informations

Dates
  • Publication : Jeudi 17 novembre 2005
  • Modification : Mardi 26 juin 2012

Partager

Traduire la page

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, 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:

001 rsync --force --ignore-errors --delete --delete-excluded --exclude-from=exclude_file --backup --backup-dir=`date +%Y-%m-%d` -av

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 ces 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 /etc sur la machine serv dans le dossier /home/backup/gate/.

  • 1. La première fois que vous executez cette commande tout le dossier /etc/ sera copié dans le dossier serv:/home/backup/gate/actuel/etc/
  • 2. Les autres fois juste les fichiers modifiés seront ajouté/supprimé/modifié du dossier serv:/home/backup/gate/actuel/etc/ et seulement les sauvegardes des fichiers supprimés/modifiés seront stokés dans serv:/home/backup/gate/date_du_jour/etc/
001 rsync --force --ignore-errors --delete --delete-excluded --backup --backup-dir=/home/backup/gate/`date +%Y_%m_%d`/etc/ -av /etc/ save@serv:/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.

001 #!/bin/sh
002 # CREER PAR O.Romain Jaillet-ramey - POUR TOUT RENSEIGNEMENT : ORJ AT LAB3W DOT FR
003 
004 # Date Actuelle
005 DATE=`date +%Y%m%d`
006 
007 # Repertoires a sauvegarder
008 SOURCES="/etc /var/www"
009 
010 # Machine distante
011 RMACHINE=backup.serveur.com
012 
013 # User de la machine distante
014 RUSER=distant_user
015 
016 # Clé privé passphrase de la machine backup.serveur.com stokée sur la machine locale
017 RKEY=/home/mon/user/local/.ssh/id_dsa
018 
019 # Repertoire de la machine distante où lon souhaite faire le backup
020 RTARGET="/home/backup/ma_machine"
021 
022 # Dossier au sera stoké le mirroir
023 DEFAULT="actuel"
024 
025 # Options
026 OPTIONS="--force --ignore-errors --delete --delete-excluded --backup"
027 
028 ########################
029 # SCRIPT
030 ###
031 
032 if [ ! -f $RKEY ]; then
033     echo "N'a pas pu trouver le fichier de la clé privé ssh !"
034     echo "Exit !"
035     exit 2
036 fi
037 
038 if ! ssh -i $RKEY $RUSER@$RMACHINE "test pwd"; then
039     echo "L'authentification à échouée !"
040     echo "Exit !"
041     exit 2
042 fi
043 
044 if ! 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 ""
056 fi
057 
058 echo "Verification des Sources..."
059 for 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
066 done
067 
068 echo ""
069 echo "Les sources sont vérifiées. Lancement de rsync..."
070 echo ""
071 for 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
079 done
080 
081 echo ""
082 echo "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:

001 0 23 * * * /chemin/de/votre/script  | mail -s "[BACKUP] Ma becane" mon_mail@domaine.com

Un autre script de backup sur la même machine

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
009 TRAIT="###################################################################"
010 CHROOT="CHROOT_LAB3W"
011 TYPE="MYSQL - SMB - WEB - FTP"
012 TITRE="LOCAL : $CHROOT - BACKUP : $TYPE"
013 
014 # Date Actuelle
015 DATE=`date +%Y%m%d`
016 
017 # Repertoires a sauvegarder
018 SOURCES="/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
038 RTARGET="/home/backup/chroot_lab3w"
039 
040 # Options
041 OPTIONS="--force --ignore-errors --delete --delete-excluded --backup"
042 
043 ########################
044 # SCRIPT
045 ###
046 
047 echo ""
048 echo $TRAIT
049 echo "# $TITRE"
050 echo $TRAIT
051 echo ""
052 
053 if ! 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 ""
065 fi
066 
067 echo "Verification des Sources..."
068 for 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
075 done
076 
077 echo ""
078 echo "Les sources sont vérifiées. Lancement de rsync..."
079 echo ""
080 
081 for 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
100 done
101 
102 echo ""
103 echo "# $TITRE effectué avec succés !!!"
104 echo $TRAIT
105 echo ""
106 
107 ###
108 # SCRIPT
109 ########################
110 

Bien sûr toujours une crontab pour executer le script à l'heure que l'on veut ;)


Liens :


LAB3W.ORJ Alias de O.Romain JAILLET-RAMEY (NOTIF LVL 7 - 43 ans) LAB3W.ORJ
CONTACT
- Web - STEAM - Monster - LinkedIn - Viadeo - DailyMotion - FACEBOOK - GOOGLE+ - Twitter
DROITS SITES : ZW3B.Admin
INSCRIPTION : Le samedi 06 janvier 1 (2001/01/06 15:31)
CONNEXION : il y a un peu plus de 2 jours (2019/12/04 16:46)
DERNIERE VISITE : il y a un peu plus de 2 jours (2019/12/04 16:46)

les réactions des ZW3B.Nautes (0 note)

Ajouter un commentaire

Avatar par default
Pseudo :
Email :
 
Ajouter la chaine de caractères (le code) ci-dessous dans le champ du dessous.
Captcha
Code :





Valid XHTML 1.0 Strict CSS Valide !

ipv6 ready