LINUX:RSYNC-Rassemblement localement

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche

retour à RSYNC


But

Dans ce script, nous rassemblons en un seul endroit localement ce que nous voulons sauvegarder. Cet ensemble constitue le premier niveau de sauvegarde, le plus actuel de la sauvegarde.


Script

Ce script est basé sur le logiciel "rsync". "rsync" permet de synchroniser une source avec sa cible; il ne copie que ce qui a été modifié (répertoires, fichiers, privilèges, dates,...).

Voici le contenu du script que nous avons baptisé "rsync.courant.bat":


#!/bin/csh
############################################################
# variables à adapter
#
# répertoire du programme
set MANAGER=/manager/sauvegarde
# répertoire de la base des sauvegardes
set BASE=/disk2/sauvegarde
# répertoire des journaux
set DIRLOG=/disk2/sauvegarde/log
############################################################
cd $MANAGER
# rsync => option -n pour être en étape de test
# TEST: si la sauvegarde incrémentielle est en cours, attendre 10 secondes
set TEST2=`/usr/bin/cat ${DIRLOG}/rsync.jsm.lock`
if ( "$TEST2" != "fin" ) then
 /usr/bin/sleep 10s
endif
# TEST: si un autre processus rsync est encore en cours, ne pas démarrer celui-ci
set TEST1=`ps ax | grep "rsync --server" | grep -v grep`
if ( "$TEST1" == "" ) then
 echo debut > ${DIRLOG}/rsync.courant.lock
 date +%Y/%m/%d\ %H:%M:00 >> ${DIRLOG}/log.courant.lis
 set TEST2=1
 if ( "$TEST2" == "1" ) then
  if ( "$TEST2" == "1" ) then
   # boucler sur les différents répertoires à sauver, listés dans le fichier repertoire.txt
   # format: 2 zones séparées par ":" (un couple par ligne)
   #         1. répertoire source à partir de la racine (exemple: /disk1/manager)
   #         2. répertoire cible sous le répertoire de sauvegarde (exemple;: manager)
   set LISTEREPERTOIRE=`/usr/bin/cat ${MANAGER}/repertoire.txt`
   set i
   foreach i ($LISTEREPERTOIRE)
    set SOURCE=`echo $i | /usr/bin/awk -F ":" '{printf("%s",$1)}' `
    set REPERTOIRECIBLE=`echo $i | /usr/bin/awk -F ":" '{printf("%s",$2)}' `
    echo Source: $SOURCE
    echo Cible: /$REPERTOIRECIBLE
    if ( ! -d ${BASE}/courant/${REPERTOIRECIBLE} ) then
     mkdir ${BASE}/courant/${REPERTOIRECIBLE}/
    endif
    /usr/bin/rsync -a --delete --stats --log-file=${DIRLOG}/log.courant.log --exclude=".recycle" ${SOURCE}/ ${BASE}/courant/${REPERTOIRECIBLE}/
   end
   /usr/bin/date > ${BASE}/courant/date.log
  endif
 echo fin > ${DIRLOG}/rsync.courant.lock
else
 echo "Occupé"
endif

En entête, trois variables sont à adapter selon vos besoins. Ces répertoires doivent exister ainsi que le répertoire "courant" se trouvant sous le répertoire repris à la variable "BASE".

Ensuite il teste le contenu d'un fichier et des processus afin de détecter si une autre tâche de synchronisation n'est pas encore en cours.

Le script boucle sur le fichier "repertoire.txt" se trouvant dans le répertoire désigné dans la variable "MANAGER". Il traite successivement chaque ligne. Chaque ligne comprend deux zones séparées par le sigle ":".

  • La première zone correspond au contenu du répertoire à sauver. (exemple: "/disk1/utilisateur")
  • La seconde zone correspond au nom du sous-répertoire, sous le répertoire repris dans la variable "BASE" suivie de "/courant", dans lequel le contenu à sauver sera copié. (exemple: "/disk2/sauvegarde/courant/utilisateur")

/disk1/utilisateur:utilisateur
/disk1/mysql.dump:mysql.dump
/manager:manager

"rsync" utilise quelques options:

  • -a : mode archive reprenant de nombreux autres paramètres (voir la documentation)
  • --delete : Si un fichier ou répertoire n'existe plus au niveau de l'arborescence source, il est détruit dans la sauvegarde
  • --stats : Il fournit des statistiques du traitement
  • --log-file=${DIRLOG}/log.courant.log : Le journal est sauvé dans ce fichier
  • --exclude=".recycle" : Si le répertoire ".recycle" est présent, il ne sera pas sauvé. Ce répertoire se retrouve dans les partages du service SMB "Samba".

On remarque que dans l'exemple, les sauvegardes se font sous le répertoire "/disk2", différent des endroits à sauver. Nous avons voulu par cette notation, insister qu'il s'agissait d'un second disque. Il est fortement recommandé de mettre les sauvegardes sur un autre disque physique que ceux où se trouvent les données à sauver. Si un disque tombe en panne, les données se trouvant sur un autre disque ne sont pas perdues. On peut diminuer ce risque en utilisant une gestion de disques de type RAID (Raid1, Raid5,...).

N'oubliez pas de rendre exécutable ce script.

chmod 700 /manager/sauvegarde/rsync.courant.bat

Remarque: Le script est écrit en Cshell; cet interpréteur n'est pas installé d'office. On peut l'installer avec la commande suivante:

dnf install tcsh


CRON

L'exécution de ce script peut s'automatiser via le service "cron".

On peut ajouter une ligne dans le fichier "/etc/crontab":


10   23   *   *   *  root /manager/sauvegarde/rsync.courant.bat  >  /manager/sauvegarde/rsync.courant.log

Dans cet exemple, il s'exécute tous les jours à 23h10 sous une session de l'utilisateur "root".




retour à RSYNC