Outils personnels

Rdiff-backup

De wikiGite

Révision datée du 12 novembre 2010 à 10:26 par Frank (discussion | contributions) (Echanger les clés DSA entre les serveurs)

Linux

Installation

Sur Debian 5 --> v1.2.5 (la différence de version mineure (.5 pour .8) ne provoque qu'un avertissement)

apt-get install rdiff-backup

Si on veut une version plus récente, il faut compiler :

apt-get install librsync-dev python-dev
wget http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-1.2.8.tar.gz
tar -xvzf rdiff-backup-1.2.8.tar.gz
cd rdiff-backup-1.2.8
python setup.py install

Sur CentOS, installation repos RPMForge (http://wiki.centos.org/AdditionalResources/Repositories/RPMForge).
CentOS4 :

wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el4.rf.i386.rpm

CentOS5 :

wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm

Puis

rpm -i rpmforge-release-0.5.1-1.el*.rf.i386.rpm
vi /etc/yum.repos.d/rpmforge.repo # --> mettre enabled à 0
yum --enablerepo=rpmforge install rdiff-backup

Echanger les clés DSA entre les serveurs

Afin que la connexion de Rdiff-backup via SSH ne demande pas de mot de passe, la clé ~/.ssh/id_dsa.pub de l'utilisateur qui se connecte à partir du "client" rdiff-backup doit être copiée "en une seule ligne" dans ~/.ssh/authorized_keys de l'utilisateur cible sur le serveur à sauvegarder. (se reporter à une procédure d'échange de clés pour SSH)


Test d'accès à un serveur

rdiff-backup --test-server root@192.168.1.21::/home

Sauvegardes

à partir d'un backup existant (cp ou rsync) : le répertoire destination existe mais n'est pas au format rdiff (manque les infos rdiff-data), il faut le forcer la première fois :

rdiff-backup --force -v5 root@192.168.1.2::/etc /backup/etc > rdiff_server1.log 2>&1

Ensuite on peut enlever le "--force".


Nettoyage

des incréments supérieurs à une fenêtre de rétention :

rdiff-backup -v5 --remove-older-than 4W /backup

Le "4W" signifie "4 weeks", soit 4 semaines à conserver. On peut donner un nombre de jours ("D") ou d'heures ("H"). Tous les incréments supérieurs à ce délai seront supprimés.


Liste des incréments :
Sur le serveur de sauvegarde :

rdiff-backup  -l /home/backup/server1/home/

A partir du serveur sauvegardé (remote-schema n'est utile que si le port ssh n'est pas standard) :

rdiff-backup -l --remote-schema='ssh -p 225 -C %s rdiff-backup --server' root@192.168.1.250::/home/backup

Restore - Exemples

# /etc/hosts d'il y a 1 heure (--force si le fichier existe et qu'il faut l'écraser)
rdiff-backup -v5 -r "1h" --force ./etc/hosts root@192.168.1.2::/etc/hosts
# /etc/ d'il y a 3 jours
rdiff-backup -v5 -r "3D" --force ./etc root@192.168.1.2::/etc

NOTE : le "-r" est obligatoire, on peut mettre "-r now" pour remonter la version la plus récente


DEPANNAGE
Si après un problème de sauvegarde (disque plein, coupure de session ssh, etc...), les backups suivants se terminent en erreur (erreurs checksum ou autres), il faut supprimer le répertoire rdiff-backup-data et relancer un backup avec --force pour repartir à zéro (on perd l'historique des incréments !).


Exemple de script rdbackup.sh

TODO : fusionner les scripts v2.1 et v2.2 avec un choix du sens de sauvegarde

rdbackup.sh v2.1 : Lancé du serveur de backup

#!/bin/bash
# Backup Script (RDIFF-BACKUP on SSH)
# FSo 06/2010
# V 2.1
# from sbackup.sh (RSYNC)
# Changelog :
# 2.1 - Added handle for a pre-backup script (if pre-backup script ended with error <> 0, main script stops)
# 2.0 - Moving variables in a .conf file
#   Variables :
#SERVERNAME=$1
#SERVERIP=$2
#SERVERPORT=$3
#SERVERUSR=$4
#RETENTION="--remove-older-than $5"
#LIST=$6
#EXCLUDE=$7
#PRESCRIPT=$8
#BCK_DEV=/home
#BCK_DIR=$BCK_DEV/backup/$SERVERNAME
#RDIFF_OPTS="-v5 --force"

# Fix variables
LOG_FILE=rdiff_ephoto.log
STAT_FILE=rdiff_ephoto.stats
PID_FILE=rdiff_ephoto.pid

if [ $# -gt 0 ]
then
# let use the given full path .conf file
   . $1
else
# default .conf file must be placed in the same directory than .sh
   . $(dirname $0)/rdbackup.conf
fi

while read line
do
   REMOTE_DIR="$REMOTE_DIR $line"
   shift
done < $LIST

if [ ! -e $BCK_DIR/$PID_FILE ]
then
 # Script pre-backup
   if [ -f $PRESCRIPT ]
   then
      $PRESCRIPT
      if [ $? -ne 0 ]
      then
         exit 1
      fi
   fi

   echo $$ > $BCK_DIR/$PID_FILE
   /usr/bin/logger "Sauvegarde rdiff $SERVERNAME"
   if [ -e  $BCK_DIR/$LOG_FILE ]
   then
        mv $BCK_DIR/$LOG_FILE $BCK_DIR/$LOG_FILE.0
   fi
   if [ -e  $BCK_DIR/$STAT_FILE ]
   then
        mv $BCK_DIR/$STAT_FILE $BCK_DIR/$STAT_FILE.0
   fi
   echo "Sauvegarde rdiff $SERVERNAME" > $BCK_DIR/$LOG_FILE
   #Boucle de backup
   ERROR_FLAG=0
   ERROR=0
   ERRORS="ERREURS: "
   for rdir in $(echo $REMOTE_DIR)
   do
      if [ ! -d ${BCK_DIR}${rdir} ]
      then
         mkdir -p ${BCK_DIR}${rdir}
      fi

      if [ ! "x$EXCLUDE" == "x" ]
      then
         EXCLUDE_OPT=""
         while read line
         do
            if  [[ $line =~ ^$rdir ]]
            then
               EXCLUDE_OPT="$EXCLUDE_OPT --exclude $line"
            fi
            shift
         done < $EXCLUDE
      fi
      # rdiff
      date >> $BCK_DIR/$LOG_FILE
      echo >> $BCK_DIR/$LOG_FILE
      echo RDIFF-BACKUP OF $rdir >> $BCK_DIR/$LOG_FILE
      echo rdiff-backup $RDIFF_OPTS --remote-schema "ssh -p $SERVERPORT %s rdiff-backup --server" $EXCLUDE_OPT $SERVERUSR@$SERVERIP::$rdir ${BCK_DIR}${rdir} >> $BCK_DIR/$LOG_FILE
      rdiff-backup $RDIFF_OPTS --remote-schema "ssh -p $SERVERPORT %s rdiff-backup --server" $EXCLUDE_OPT $SERVERUSR@$SERVERIP::$rdir ${BCK_DIR}${rdir} >> $BCK_DIR/$LOG_FILE 2>&1
      ERROR=$?
      if [ $ERROR -ne 0 ]
      then
         ERRORS="$ERRORS $BASE=$ERROR:"
         ERROR_FLAG=1
      else
         echo CLEANING BACKUPS OF $rdir >> $BCK_DIR/$LOG_FILE
         echo rdiff-backup $RDIFF_OPTS $RETENTION ${BCK_DIR}${rdir} >> $BCK_DIR/$LOG_FILE 2>&1
         rdiff-backup $RDIFF_OPTS $RETENTION ${BCK_DIR}${rdir} >> $BCK_DIR/$LOG_FILE 2>&1
         ERROR=$?
         if [ $ERROR -ne 0 ]
         then
            ERRORS="$ERRORS $BASE=$ERROR:"
            ERROR_FLAG=1
         fi
      fi
      echo Backup statistics of $rdir >> $BCK_DIR/$STAT_FILE
      cat ${BCK_DIR}${rdir}/rdiff-backup-data/session_statistics.$(date "+%Y-%m-%d")* >> $BCK_DIR/$STAT_FILE
      echo >> $BCK_DIR/$STAT_FILE
   done
   if [ $ERROR_FLAG -eq 1 ]
   then
      (echo $ERRORS
       date
       echo Voir $BCK_DIR/$LOG_FILE
       grep -i warning $BCK_DIR/$LOG_FILE
       grep -i error $BCK_DIR/$LOG_FILE
       cat $BCK_DIR/$STAT_FILE
      )| mail -s "ERREUR RDIFF SUR $SERVERNAME $(date +%d/%m)" $MAIL_ADMIN
   else
      (date
       ls -l $BCK_DIR/$LOG_FILE
       df -k $BCK_DIR
       cat $BCK_DIR/$STAT_FILE
      )| mail -s "Sauvegarde $SERVERNAME $(date +%d/%m) terminee" $MAIL_ADMIN
   fi
   date >> $BCK_DIR/$LOG_FILE
   /usr/bin/logger "FIN rdiff $SERVERNAME"
   rm -f $BCK_DIR/$PID_FILE
else
    (echo "$HOSTNAME:$BCK_DIR/$PID_FILE existe : abandon de $0") | mail -s "Erreur sur backup $SERVERNAME" $MAIL_ADMIN
fi

Fichier rdbackup.conf v2.1

# Configuration rdbackup
SERVERNAME=server.example.net
SERVERIP=192.168.1.10
SERVERPORT=22
SERVERUSR=root
MAIL_ADMIN=<Mail Admin>
RETENTION="--remove-older-than 1W"
LIST=/opt/systools/backup/server.list
EXCLUDE=/opt/systools/backup/server.excl
PRESCRIPT=
# ou : PRESCRIPT=./server_pre_backup.sh
BCK_DIR=/home/backup/$SERVERNAME
RDIFF_OPTS="-v5 --force"

rdbackup2.2.sh : lancé du serveur A SAUVEGARDER vers le serveur de backup

Comme on est sur le serveur de prod, le script inclut aussi un dump MySQL avant de lancer rdiff-backup
Le dump peut-être désactivé s'il n'est pas utile.

#!/bin/bash
# Backup Script (RDIFF-BACKUP over SSH and RSYNC)
# FSo 06/2010
# V 2.2
# from sbackup.sh (RSYNC)
# Changelog :
# 2.2 - Reverse backup from client to backup server
# 2.1 - Added handle for a pre-backup script (if pre-backup script ended with error <> 0, main script stops)
# 2.0 - Moving variables in a .conf file 

# Fix variables
EPHOTO_DIR=/home/.sites/28/site1
LOG_FILE=rdiff_ephoto.log
STAT_FILE=rdiff_ephoto.stats
PID_FILE=rdiff_ephoto.pid

if [ $# -gt 0 ]
then
# let use the given full path .conf file
   . $1
else
# ePhoto specific
   . $EPHOTO_DIR/rdbackup.conf
fi

while read line
do
   REMOTE_DIR="$REMOTE_DIR $line"
   shift
done < $LIST

if [ ! -e $EPHOTO_DIR/$PID_FILE ]
then
 # Script pre-backup
   if [ -f $PRESCRIPT ]
   then
      $PRESCRIPT
      if [ $? -ne 0 ]
      then
         exit 1
      fi
   fi
   if [ $MYSQLDUMP -eq 1 ]
   then
      mysqldump ephoto $MYSQLDUMP_OPTS --password=$MYSQL_PASSWORD > $EPHOTO_DIR/mysqldump.sql
   fi
   echo $$ > $EPHOTO_DIR/$PID_FILE
   /usr/bin/logger "Sauvegarde rdiff $SERVERNAME"
   if [ -e  $EPHOTO_DIR/$LOG_FILE ]
   then
        mv $EPHOTO_DIR/$LOG_FILE $EPHOTO_DIR/$LOG_FILE.0
   fi
   if [ -e  $EPHOTO_DIR/$STAT_FILE ]
   then
        mv $EPHOTO_DIR/$STAT_FILE $EPHOTO_DIR/$STAT_FILE.0
   fi
   echo "Sauvegarde rdiff $SERVERNAME" > $EPHOTO_DIR/$LOG_FILE
   #Boucle de backup
   ERROR_FLAG=0
   ERROR=0
   ERRORS="ERREURS: "
   for rdir in $(echo $REMOTE_DIR)
   do
      if [ ! "x$EXCLUDE" == "x" ]
      then
         EXCLUDE_OPT=""
         while read line
         do
            if  $line =~ ^$rdir 
            then
               EXCLUDE_OPT="$EXCLUDE_OPT --exclude $line"
            fi
            shift
         done < $EXCLUDE
      fi
      # rdiff
      date >> $EPHOTO_DIR/$LOG_FILE
      echo >> $EPHOTO_DIR/$LOG_FILE
      echo RDIFF-BACKUP OF $rdir >> $EPHOTO_DIR/$LOG_FILE
      echo rdiff-backup $RDIFF_OPTS --remote-schema "ssh -p $SERVERPORT %s rdiff-backup --server" $EXCLUDE_OPT ${rdir} $SERVERUSR@$SERVERIP::${BCK_DIR}$rdir >> $EPHOTO_DIR/$LOG_FILE
      rdiff-backup $RDIFF_OPTS --remote-schema "ssh -p $SERVERPORT %s rdiff-backup --server" $EXCLUDE_OPT ${rdir} $SERVERUSR@$SERVERIP::${BCK_DIR}$rdir >>  $EPHOTO_DIR/$LOG_FILE 2>&1
      ERROR=$?
      if [ $ERROR -ne 0 ]
      then
         ERRORS="$ERRORS $BASE=$ERROR:"
         ERROR_FLAG=1
      else
         echo CLEANING BACKUPS OF $rdir >> $EPHOTO_DIR/$LOG_FILE
         echo rdiff-backup $RDIFF_OPTS $SERVERUSR@$SERVERIP::$RETENTION ${BCK_DIR}${rdir} >> $EPHOTO_DIR/$LOG_FILE 2>&1
         rdiff-backup $RDIFF_OPTS $RETENTION $SERVERUSR@$SERVERIP::${BCK_DIR}${rdir} >> $EPHOTO_DIR/$LOG_FILE 2>&1
         ERROR=$?
         if [ $ERROR -ne 0 ]
         then
            ERRORS="$ERRORS $BASE=$ERROR:"
            ERROR_FLAG=1
         fi
      fi
   done
   if [ $ERROR_FLAG -eq 1 ]
   then
      (echo $ERRORS
       date
       echo Voir $EPHOTO_DIR/$LOG_FILE
       grep -i warning $EPHOTO_DIR/$LOG_FILE
       grep -i error $EPHOTO_DIR/$LOG_FILE
      )| mail -s "ERREUR RDIFF SUR $SERVERNAME $(date +%d/%m)" $MAIL_ADMIN
   else
      (date
       ls -l $EPHOTO_DIR/$LOG_FILE
       df -k $EPHOTO_DIR
      )| mail -s "Sauvegarde $SERVERNAME $(date +%d/%m) terminee" $MAIL_ADMIN
   fi
   date >> $EPHOTO_DIR/$LOG_FILE
   /usr/bin/logger "FIN rdiff $SERVERNAME"
   rm -f $EPHOTO_DIR/$PID_FILE
else
    (echo "$HOSTNAME:$EPHOTO_DIR/$PID_FILE existe : abandon de $0") | mail -s "Erreur sur backup $SERVERNAME" $MAIL_ADMIN
fi

Fichier rdbackup.conf v2.2

# Configuration rdbackup
SERVERNAME=$(hostname)
# IP DU SERVEUR DE SAUVEGARDE
SERVERIP=192.168.1.10
SERVERPORT=22
SERVERUSR=root
MAIL_ADMIN=<Mail de l'admin>
RETENTION="--remove-older-than 1W"
LIST=$EPHOTO_DIR/rdbackup.list
EXCLUDE=$EPHOTO_DIR/rdbackup.excl
PRESCRIPT=
# REPERTOIRE DE DESTINATION
BCK_DIR=/home/backup
RDIFF_OPTS="-v5 --force"
# Passer MYSQLDUMP à 0 pour désactiver le dump MySQL
MYSQLDUMP=1 
MYSQLDUMP_OPTS="--routines"
MYSQL_PASSWORD=<Mot de passe MySQL>



Pour mémoire, script v1 sans rdbackup.conf

#!/bin/bash
# Script de sauvegarde des serveurs (RDIFF sur SSH)
# FSo 06/2010
# v1.0 from sbackup.sh (RSYNC) v1.2
# Changelog :
#
# svg_server.sh <hostname> <ip> <port> <user valide pour ssh> <duree retention> <fichier liste backup> <fichier exclusions>
# exemple cron.d :
#00 02 * * *      root /backup/rdbackup.sh server.example.fr 123.123.12.123 22 root 1W /backup/server.list /backup/server.excl > /backup/log/svg_server.cron.err 2>&1
#
SERVERNAME=$1
SERVERIP=$2
SERVERPORT=$3
SERVERUSR=$4
RETENTION="--remove-older-than $5"
LIST=$6
EXCLUDE=$7
BCK_DEV=/home
BCK_DIR=$BCK_DEV/backup/$SERVERNAME
LOG_FILE=rdiff_$SERVERNAME.log
STAT_FILE=rdiff_$SERVERNAME.stats
PID_FILE=/var/run/rdiff_$SERVERNAME.pid
RDIFF_OPTS="-v5 --force"

if [ $# -lt 6 ]
then
   echo Usage : $0 serverFQDN serverIP serverSSHPORT SSHUSER RETENTION BACKUPLISTfile [EXCLUDEfile]
   exit 1
fi

shift; shift; shift
while read line
do
   REMOTE_DIR="$REMOTE_DIR $line"
   shift
done < $LIST

if [ ! -e $PID_FILE ]
then
   echo $$ > $PID_FILE
   /usr/bin/logger "Sauvegarde rdiff $SERVERNAME"
   if [ -e  $BCK_DIR/$LOG_FILE ]
   then
        mv $BCK_DIR/$LOG_FILE $BCK_DIR/$LOG_FILE.0
   fi
   if [ -e  $BCK_DIR/$STAT_FILE ]
   then
        mv $BCK_DIR/$STAT_FILE $BCK_DIR/$STAT_FILE.0
   fi
   echo "Sauvegarde rdiff $SERVERNAME" > $BCK_DIR/$LOG_FILE 
   #Boucle de backup
   ERROR_FLAG=0
   ERROR=0
   ERRORS="ERREURS: "
   for rdir in $(echo $REMOTE_DIR)
   do
      if [ ! -d ${BCK_DIR}${rdir} ]
      then
         mkdir -p ${BCK_DIR}${rdir}
      fi 

      if [ ! "x$EXCLUDE" == "x" ]
      then
         EXCLUDE_OPT=""
         while read line
         do
            if [[ $line =~ ^$rdir ]]
            then
               EXCLUDE_OPT="$EXCLUDE_OPT --exclude $line"
            fi
            shift
            done < $EXCLUDE
      fi
      # rdiff
      date >> $BCK_DIR/$LOG_FILE
      echo >> $BCK_DIR/$LOG_FILE
      echo RDIFF-BACKUP OF $rdir >> $BCK_DIR/$LOG_FILE
      echo rdiff-backup $RDIFF_OPTS --remote-schema "ssh -p $SERVERPORT %s rdiff-backup --server" $EXCLUDE_OPT $SERVERUSR@$SERVERIP::$rdir ${BCK_DIR}${rdir} >> $BCK_DIR/$LOG_FILE
      rdiff-backup $RDIFF_OPTS --remote-schema "ssh -p $SERVERPORT %s rdiff-backup --server" $EXCLUDE_OPT $SERVERUSR@$SERVERIP::$rdir ${BCK_DIR}${rdir} >> $BCK_DIR/$LOG_FILE 2>&1
      ERROR=$?
      if [ $ERROR -ne 0 ]
      then 
         ERRORS="$ERRORS $BASE=$ERROR:"
         ERROR_FLAG=1
      fi
      echo CLEANING BACKUPS OF $rdir >> $BCK_DIR/$LOG_FILE
      echo rdiff-backup $RDIFF_OPTS $RETENTION ${BCK_DIR}${rdir} >> $BCK_DIR/$LOG_FILE 2>&1
      rdiff-backup $RDIFF_OPTS $RETENTION ${BCK_DIR}${rdir} >> $BCK_DIR/$LOG_FILE 2>&1
      ERROR=$?
      if [ $ERROR -ne 0 ]
      then 
         ERRORS="$ERRORS $BASE=$ERROR:"
         ERROR_FLAG=1
      fi
      echo Backup statistics of $rdir >> $BCK_DIR/$STAT_FILE
      cat ${BCK_DIR}${rdir}/rdiff-backup-data/session_statistics.$(date "+%Y-%m-%d")* >> $BCK_DIR/$STAT_FILE 
      echo >> $BCK_DIR/$STAT_FILE
   done
   if [ $ERROR_FLAG -eq 1 ]
   then
      (echo $ERRORS
       date
       echo Voir $BCK_DIR/$LOG_FILE
       grep -i warning $BCK_DIR/$LOG_FILE
       grep -i error $BCK_DIR/$LOG_FILE
       cat $BCK_DIR/$STAT_FILE
      )| mail -s "ERREUR RDIFF SUR $SERVERNAME $(date +%d/%m)" mail_admin@example.net
   else
      (date
       ls -l $BCK_DIR/$LOG_FILE
       df -k $BCK_DIR
       cat $BCK_DIR/$STAT_FILE
      )| mail -s "Sauvegarde $SERVERNAME $(date +%d/%m) terminee" mail_admin@example.net
   fi
   date >> $BCK_DIR/$LOG_FILE
   /usr/bin/logger "FIN rdiff $SERVERNAME"
   rm -f $PID_FILE
else
    (echo "$SERVERNAME:$PID_FILE existe : abandon de $0") | mail -s "Erreur sur backup $SERVERNAME" mail_admin@example.net
fi

Windows

Installation

Télécharger :

  • Rdiff (rdiff-backup-1.2.8-win32.zip)
http://www.nongnu.org/rdiff-backup/
  • putty, plink et puttygen
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
  • Blat (blat262.full.sip)
http://sourceforge.net/projects/blat/files/

Préparation de la connexion SSH

Note : on considère ici que la sauvegarde est lancée d'un poste Windows vers un serveur linux

Lancer puttygen. Sélectionner "SSH-2 DSA" en bas, cliquer sur "Generate" et bouger la souris dans l'espace blanc au milieu de la fenêtre.

Copier la clé DSA qui s'affiche en haut de la fenêtre (sans oublier aucun caractère !), la passer telle, en une seule ligne, quelle vers le serveur linux (via un fichier par scp/ftp, ou mail, ou copier/coller dans une console putty) dans le fichier ~/.ssh/authorized_keys du serveur.

Sauvegarder les clés dans le répertoire Documents and Setting (Win XP/2003) ou Users (Win 7/2008) de l'utilisateur qui lancera rdiff-backup.

  • Clé publique :
en cliquant sur "save public key"
nommer le fichier privatekey.pub
  • Clé privée :
en cliquant sur "save private key"
nommer le fichier privatekey.ppk

Tests de connexion

Tester la connexion avec plink (ce qui permet d'enregistrer localement la clé du serveur à la première connexion) :

c:\backup\plink.exe -i C:\Users\<utilisateur windows>\privatekey.ppk utilisateur_cible@server.systea.net

la connexion doit se faire sans demande de mot de passe.

Tester rdiff-backup :

c:\backup\rdiff-backup -v5 --test-server --remote-schema "c:\backup\plink.exe -P 22 -i C:\Users\<utilisateur windows>\privatekey.ppk %s rdiff-backup --server" utilisateur_cible@server.systea.net::/tmp

Test de Blat

Tester un envoi (le nom de fichier qui constituera le corps du mail est obligatoire, sinon blat reste "en attente" et ne rend jamais la main).

blat c:\backup\fichier.txt -to destinataire@server.systea.net -server smtp.orange.fr -f expediteur@serveur.com -s "SUJET DU MAIL"

Script de sauvegarde

NOTE : le "%s" doit être transformé en "%%s" pour être reconnu par l'interpréteur DOS.

rem @echo off
set ERROR=0
set MAILOPTS=-server smtp.orange.fr -f expediteur@serveur.com

copy c:\backup\backup.log c:\backup\backup.log.0

c:\backup\rdiff-backup\rdiff-backup.exe -v5 --remote-schema "c:\backup\plink -P 22 -i c:\Users\<Utilisateur Windows>\privatekey.ppk %%s rdiff-backup --server" "c:/partage/" USER@SERVER.systea.net::/home/backup/partage > c:\backup\backup.log 2>&1
IF NOT "%ERRORLEVEL%"=="0" (
   set ERROR=1)
REM le LOG n'est pas relaché tout de suite, on doit simuler une pause de 5 secondes...
ping -n 5 127.0.0.1
c:\backup\rdiff-backup\rdiff-backup.exe -v5 --remote-schema "c:\backup\plink -P 22 -i c:\Users\<Utilisateur Windows>\privatekey.ppk %%s rdiff-backup --server" --remove-older-than 4W USER@SERVER.systea.net::/home/backup/partage >> c:\backup\backup.log 2>&1
IF NOT "%ERRORLEVEL%"=="0" (
   set ERROR=1)
ping -n 5 127.0.0.1

IF "%ERROR%"=="0" (
   c:\backup\blat\full\blat c:\backup\backup.log -to destinataire@systea.net %MAILOPTS% -s "Sauvegarde terminee" > c:\backup\blat.log 2>&1 )
IF NOT "%ERROR%"=="0" (
   c:\backup\blat\full\blat c:\backup\backup.log -to destinataire@systea.net %MAILOPTS% -s "Probleme sauvegarde" > c:\backup\blat.log 2>&1 )