« LINUX:RSYNC-jour/semaine/mois » : différence entre les versions

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche
(Page créée avec « __FORCETOC__ =But= Maintenant que tous les fichiers les plus récents sont rassemblés, il faut pouvoir remonter dans le temps car il est courant qu'on se rende compte un… »)
 
Aucun résumé des modifications
Ligne 3 : Ligne 3 :
Maintenant que tous les fichiers les plus récents sont rassemblés, il faut pouvoir remonter dans le temps car il est courant qu'on se rende compte un peu tard que l'on a modifié ou détruit un fichier important.
Maintenant que tous les fichiers les plus récents sont rassemblés, il faut pouvoir remonter dans le temps car il est courant qu'on se rende compte un peu tard que l'on a modifié ou détruit un fichier important.


Il y a quelques années, on effectuait les sauvegardes sur bandes magnétiques. On réservait quatre bandes pour chaque jours de la semaine ouvrable et 4 bandes pour les différentes pour les différents vendredis du mois. On les utilisait en tournante. Par sécurité, ces bandes était soit remportées chez une personne de confiance soit mises dans un coffre à la banque.


Avec le temps, la masse de données à sauver devenant importante et de même le temps de sauvegarde, on se tourne vers des sauvegardes sur disques.
=Script=
Ce script a pour objectif de faire le même genre de travail.
fichier "'''rsync.jsm.bat'''"
----
#!/bin/csh
#####################################################
# variables à adapter
#
# répertoire de la base des sauvegardes
set BASE=/produc/backup
# répertoire des journaux
set DIRLOG=/produc/backup/log
#####################################################
# TEST: si la sauvegarde de centralisation est en cours, attendre 10 secondes
set TEST2=`/bin/cat ${DIRLOG}/rsync.courant.lock`
if ( "$TEST2" != "fin" ) then
  /bin/sleep 10s
endif
cd $BASE
# création des variables temporelles
# date format
#  %d jour du mois (2 digits)
#  %u jour de la semaine (1 à 7)
#  %w jour de la semaine (0 à 6) (0=dimanche)
#  %e jour du mois (espace en début à la place du 0)
#  %m mois (2 digits)
#  %y annee (2 digits)
#  %Y annee (4 digits)
date
set NOW=`date +%u`
set REPERTOIREJ=j$NOW
set NOM=`date +%m`
#set REPERTOIREM=m${NOM}
set NOJ=`date +%d`
# calcul du n° de semaine dans le mois (0 à 4)
# attention: la 5ème semaine (4) de fin de mois est courte (29 à 31)
set NOS=`expr ${NOJ} / 7`
set REPERTOIRES=s${NOS}
set NOA=`date +%y`
#set REPERTOIREA=a${NOA}
echo Jour de la semaine: $NOW
echo Jour du mois: $NOJ
echo Semaine du mois: $NOS
echo Mois: $NOM
echo Année: $NOA
# création des répertoires de sauvegarde si inexistants
if ( ! -d ${BASE}/${REPERTOIRES} ) then
  mkdir ${BASE}/${REPERTOIRES}
endif
if ( ! -d ${BASE}/${REPERTOIREJ} ) then
  if ( $NOW != 7 ) then
  mkdir ${BASE}/${REPERTOIREJ}
  endif
endif
#if ( ! -d ${BASE}/${REPERTOIREM} ) then
# mkdir ${BASE}/${REPERTOIREM}
#endif
#if ( ! -d ${BASE}/${REPERTOIREA} ) then
# mkdir ${BASE}/${REPERTOIREA}
#endif
# TEST: si un autre processus rsync est encore en cours, ne pas démarrer celui-ci
set TEST1=`ps ax | grep "rsync -a --delete --stats " | grep -v grep`
set TEST2=`ps ax | grep "rsync --server " | grep -v grep`
set TEST3=`ps ax | grep "rsync " | grep -v grep`
if ( "$TEST3" == "" ) then
  if ( "$TEST1" == "" && "$TEST2" == "" ) then
  echo debut > ${DIRLOG}/rsync.jsm.lock
  date +%Y/%m/%d\ %H:%M:00 >> ${DIRLOG}/log.jsm.lis
# sauvegarde annuelle (actif les 4 premiers jours de janvier)
#  if ( $NOM == "01" && $NOJ < "05") then
#  /usr/bin/rsync -a --delete --stats --log-file=${DIRLOG}/log.annee.log ${BASE}/courant/ ${BASE}/${REPERTOIREA}
#  /usr/bin/date > ${BASE}/${REPERTOIREA}/date.log
#  endif
# sauvegarde mensuelle (actif les 4 premiers jours du mois)
#  if ( $NOJ < "05") then
#  /usr/bin/rsync -a --delete --stats --log-file=${DIRLOG}/log.mois.log ${BASE}/courant/ ${BASE}/${REPERTOIREM}
#  /usr/bin/date > ${BASE}/${REPERTOIREM}/date.log
#  endif
# sauvegarde hebdomadaire, le dimanche, dernier jour de la semaine
  if ( $NOW == 7 ) then
    /usr/bin/rsync -a --delete --stats --log-file=${DIRLOG}/log.semaine.log ${BASE}/courant/ ${BASE}/${REPERTOIRES}
    /usr/bin/date > ${BASE}/${REPERTOIRES}/date.log
# sauvegarde journalière sauf le dimanche qui est le jour de la sauvegarde hebdomadaire
  else
    /usr/bin/rsync -a --delete --stats --log-file=${DIRLOG}/log.jour.log ${BASE}/courant/ ${BASE}/${REPERTOIREJ}
    /usr/bin/date > ${BASE}/${REPERTOIREJ}/date.log
  endif
  echo fin > ${DIRLOG}/rsync.jsm.lock
  else
  echo "Occupé: sauvegarde encore en cours"
  endif
else
  echo "Occupé: autre process rsync en cours"
endif
date
----





Version du 2 février 2022 à 17:52

But

Maintenant que tous les fichiers les plus récents sont rassemblés, il faut pouvoir remonter dans le temps car il est courant qu'on se rende compte un peu tard que l'on a modifié ou détruit un fichier important.

Il y a quelques années, on effectuait les sauvegardes sur bandes magnétiques. On réservait quatre bandes pour chaque jours de la semaine ouvrable et 4 bandes pour les différentes pour les différents vendredis du mois. On les utilisait en tournante. Par sécurité, ces bandes était soit remportées chez une personne de confiance soit mises dans un coffre à la banque.

Avec le temps, la masse de données à sauver devenant importante et de même le temps de sauvegarde, on se tourne vers des sauvegardes sur disques.


Script

Ce script a pour objectif de faire le même genre de travail.

fichier "rsync.jsm.bat"


#!/bin/csh
#####################################################
# variables à adapter
#
# répertoire de la base des sauvegardes
set BASE=/produc/backup
# répertoire des journaux
set DIRLOG=/produc/backup/log
#####################################################
# TEST: si la sauvegarde de centralisation est en cours, attendre 10 secondes
set TEST2=`/bin/cat ${DIRLOG}/rsync.courant.lock`
if ( "$TEST2" != "fin" ) then
 /bin/sleep 10s
endif
cd $BASE
# création des variables temporelles
# date format
#  %d jour du mois (2 digits)
#  %u jour de la semaine (1 à 7)
#  %w jour de la semaine (0 à 6) (0=dimanche)
#  %e jour du mois (espace en début à la place du 0)
#  %m mois (2 digits)
#  %y annee (2 digits)
#  %Y annee (4 digits)
date
set NOW=`date +%u`
set REPERTOIREJ=j$NOW
set NOM=`date +%m`
#set REPERTOIREM=m${NOM}
set NOJ=`date +%d`
# calcul du n° de semaine dans le mois (0 à 4)
# attention: la 5ème semaine (4) de fin de mois est courte (29 à 31)
set NOS=`expr ${NOJ} / 7`
set REPERTOIRES=s${NOS}
set NOA=`date +%y`
#set REPERTOIREA=a${NOA}
echo Jour de la semaine: $NOW
echo Jour du mois: $NOJ
echo Semaine du mois: $NOS
echo Mois: $NOM
echo Année: $NOA
# création des répertoires de sauvegarde si inexistants
if ( ! -d ${BASE}/${REPERTOIRES} ) then
 mkdir ${BASE}/${REPERTOIRES}
endif
if ( ! -d ${BASE}/${REPERTOIREJ} ) then
 if ( $NOW != 7 ) then
  mkdir ${BASE}/${REPERTOIREJ}
 endif
endif
#if ( ! -d ${BASE}/${REPERTOIREM} ) then
# mkdir ${BASE}/${REPERTOIREM}
#endif
#if ( ! -d ${BASE}/${REPERTOIREA} ) then
# mkdir ${BASE}/${REPERTOIREA}
#endif
# TEST: si un autre processus rsync est encore en cours, ne pas démarrer celui-ci
set TEST1=`ps ax | grep "rsync -a --delete --stats " | grep -v grep`
set TEST2=`ps ax | grep "rsync --server " | grep -v grep`
set TEST3=`ps ax | grep "rsync " | grep -v grep`
if ( "$TEST3" == "" ) then
 if ( "$TEST1" == "" && "$TEST2" == "" ) then
  echo debut > ${DIRLOG}/rsync.jsm.lock
  date +%Y/%m/%d\ %H:%M:00 >> ${DIRLOG}/log.jsm.lis
# sauvegarde annuelle (actif les 4 premiers jours de janvier)
#  if ( $NOM == "01" && $NOJ < "05") then
#   /usr/bin/rsync -a --delete --stats --log-file=${DIRLOG}/log.annee.log ${BASE}/courant/ ${BASE}/${REPERTOIREA}
#   /usr/bin/date > ${BASE}/${REPERTOIREA}/date.log
#  endif
# sauvegarde mensuelle (actif les 4 premiers jours du mois)
#  if ( $NOJ < "05") then
#   /usr/bin/rsync -a --delete --stats --log-file=${DIRLOG}/log.mois.log ${BASE}/courant/ ${BASE}/${REPERTOIREM}
#   /usr/bin/date > ${BASE}/${REPERTOIREM}/date.log
#  endif
# sauvegarde hebdomadaire, le dimanche, dernier jour de la semaine
  if ( $NOW == 7 ) then
   /usr/bin/rsync -a --delete --stats --log-file=${DIRLOG}/log.semaine.log ${BASE}/courant/ ${BASE}/${REPERTOIRES}
   /usr/bin/date > ${BASE}/${REPERTOIRES}/date.log
# sauvegarde journalière sauf le dimanche qui est le jour de la sauvegarde hebdomadaire
  else
   /usr/bin/rsync -a --delete --stats --log-file=${DIRLOG}/log.jour.log ${BASE}/courant/ ${BASE}/${REPERTOIREJ}
   /usr/bin/date > ${BASE}/${REPERTOIREJ}/date.log
  endif
  echo fin > ${DIRLOG}/rsync.jsm.lock
 else
  echo "Occupé: sauvegarde encore en cours"
 endif
else
 echo "Occupé: autre process rsync en cours"
endif
date






->retour à RSYNC