ZW3B :-: API Client * Contents * Docs by LAB3W.ORJ

Translate this page

Name : BETA-TESTERS

Project name : ZW3B-API-BETA-TESTERS

Authorized. - 200 - Client API Name and Origin Wildcard OK

¿Comment? 'Ou' ¿Que faire?, OS GNU/Linux, Sécurité, 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.

Author : O.Romain.Jaillet-ramey

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 :

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
Retirer les numéros de lignes

Les options clés sont:

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/.

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/
Retirer les numéros de lignes

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########################
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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


Liens :