« LINUX:RSYNC-Rassemblement sur une autre machine » : différence entre les versions

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 34 : Ligne 34 :
* le nom de l'interface réseau de la machine émettrice
* le nom de l'interface réseau de la machine émettrice
* le répertoire contenant les scripts
* le répertoire contenant les scripts


= Attendre que la machine distante soit active=
= Attendre que la machine distante soit active=
Ligne 99 : Ligne 100 :




=Traitement global=
En final, il faut concevoir un script chainant les différents scripts présentés ci-dessus.
Nous avons nommé ce fichier "'''traitement.bat'''".
----
#!/bin/bash
# Chaine de traitement à distance
############################################################
# variables à adapter
#
# nom du répertoire où se retrouvent les scripts
MANAGER=/manager/sauvegarde
# nom de la machine distante ou son adresse IP
MACHINE=serverbackup
# adresse MAC de la machine distante
MAC=00:1c:c0:af:f1:33
# nom de l'interface réseau local
INTERFACE=enp0s25
############################################################
cd $MANAGER
date
# allumer la machine distante
${MANAGER}/allumer.bat ${MAC} ${INTERFACE} ${MANAGER}
# attendre que la machine distante soit active
${MANAGER}/ping.bat ${MACHINE} ${MANAGER}
# abandonner si la machine distante ne peut s'allumer
RETOUR=$?
#echo $RETOUR
if [ $RETOUR = '1' ]
then
# sauvegarder
  ${MANAGER}/action.bat ${MACHINE} ${MANAGER}
  echo "Action effectuée"
else
  echo "Action non affectuée"
fi
sleep 10
# éteindre la machine distante
${MANAGER}/eteindre.bat ${MACHINE} ${MANAGER}
date
----
Pour fonctionner, on doit définir les quatre variables dont on a besoin:
* le répertoire contenant les scripts
* le nom de la machine distante ou son adresse IP
** l'adresse MAC de la carte réseau de la machine distante
* le nom de l'interface réseau de la machine émettrice
=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/traitement.bat  >  /manager/sauvegarde/traitement.log
----
Dans ce exemple, il s'exécute tous les jours à 23h10 sous une cession de l'utilisateur "root".





Version du 4 février 2022 à 17:40

But

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

Dans notre approche, nous utilisons une machine distante se trouvant sur le même réseau.

Nous désirons laisser active cette machine distante que durant la sauvegarde. Ces scriptes s'articulent en quatre phases actionnées à partie de la machine dont on veut sauver les fichiers:

  • Allumer la machine distante
  • Attendre que la machine distance soit active
  • Effectuer la sauvegarde vers la machine distante
  • Eteindre la machine distante

Mais la seconde partie peut être individualisée afin d'effectuer une sauvegarde sur une machine se trouvant sur un tout autre site à travers Internet. Il faut dans ce cas adapter les firewalls se trouvant sur le chemin (PAT). Sur la machine distante, on peut limiter l'accès à l'adresse IP de l'émetteur si cette adresse est fixe soit limiter l'accès au pays qui l'héberge.


Allumer la machine distante

Ce script s'articule sur l'envoi d'un "MAGIC PACKET" comme expliqué dans cet article: "Allumage à distance". Le nom de l'interface réseau est facultatif si vous n'en avez qu'un; il faut dans ce cas adapter le script. On exécute deux fois cet envoi par sécurité. Nous avons nommé ce fichier "allumer.bat".


#!/bin/bash
# Allumage à distance d'une machine du même LAN
MAC=$1
INTERFACE=$2
MANAGER=$3
cd $MANAGER
echo "Allumer"
/usr/sbin/ether-wake -i $INTERFACE $MAC
/usr/bin/sleep 60
/usr/sbin/ether-wake -i $INTERFACE $MAC

Il attend trois paramètres:

  • l'adresse MAC de la carte réseau de la machine distante
  • le nom de l'interface réseau de la machine émettrice
  • le répertoire contenant les scripts


Attendre que la machine distante soit active

Ce script a pour but de laisser la machine distante s'active mais on attend qu'un certain temps à adapter si nécessaire. Nous avons nommé ce fichier "ping.bat".


#!/bin/bash
# Tester via PING qu'une machine distante est allumée; on ne boucle que 100 fois
MACHINE=$1
MANAGER=$2
cd $MANAGER
echo "Test PING"
/usr/bin/echo "100% packet loss" > ${MANAGER}/ping1.log
NBS=0
ACTIVE=-1
while [ $NBS -lt '100' ]
do
 /usr/bin/ping -c 2 ${MACHINE} >& ${MANAGER}/ping1.log
 /usr/bin/grep "100% packet loss" ${MANAGER}/ping1.log >  ${MANAGER}/ping2.log
 /usr/bin/grep "unknown host"     ${MANAGER}/ping1.log >> ${MANAGER}/ping2.log
 /usr/bin/grep "inconnu"          ${MANAGER}/ping1.log >> ${MANAGER}/ping2.log
 if [ -s ${MANAGER}/ping2.log ]
 then
  let NBS++
  echo $NBS
 else
  NBS=1000
  ACTIVE=1
 fi
done
/usr/bin/sleep 10
/usr/bin/rm -f ${MANAGER}/ping1.log
/usr/bin/rm -f ${MANAGER}/ping2.log
if [ $ACTIVE = '1' ]
then
 /usr/bin/echo "Machine active: " ${MACHINE}
 exit 1
else
 /usr/bin/echo "Machine inactive: " ${MACHINE}
 exit -1
fi

Il attend deux paramètres:

  • le nom de la machine distante ou son adresse IP
  • le répertoire contenant les scripts



Eteindre la machine distante

Ce script a pour but d'éteindre la machine distante. Nous avons nommé ce fichier "eteindre.bat".


#!/bin/bash
# Eteindre à distance une machine
MACHINE=$1
manager=$2
cd $MANAGER
echo "Eteindre"
/usr/bin/ssh -p 6333 -i ${MANAGER}/key/serveur-distant-rsync-key sauvegarde@${MACHINE} "sudo shutdown -h now"

Il attend deux paramètres:

  • le nom de la machine distante ou son adresse IP
  • le répertoire contenant les scripts


Traitement global

En final, il faut concevoir un script chainant les différents scripts présentés ci-dessus. Nous avons nommé ce fichier "traitement.bat".


#!/bin/bash
# Chaine de traitement à distance
############################################################
# variables à adapter
#
# nom du répertoire où se retrouvent les scripts
MANAGER=/manager/sauvegarde
# nom de la machine distante ou son adresse IP
MACHINE=serverbackup
# adresse MAC de la machine distante
MAC=00:1c:c0:af:f1:33
# nom de l'interface réseau local
INTERFACE=enp0s25
############################################################
cd $MANAGER
date
# allumer la machine distante
${MANAGER}/allumer.bat ${MAC} ${INTERFACE} ${MANAGER}
# attendre que la machine distante soit active
${MANAGER}/ping.bat ${MACHINE} ${MANAGER}
# abandonner si la machine distante ne peut s'allumer 
RETOUR=$?
#echo $RETOUR
if [ $RETOUR = '1' ]
then
# sauvegarder
 ${MANAGER}/action.bat ${MACHINE} ${MANAGER}
 echo "Action effectuée"
else
 echo "Action non affectuée"
fi
sleep 10
# éteindre la machine distante
${MANAGER}/eteindre.bat ${MACHINE} ${MANAGER}
date

Pour fonctionner, on doit définir les quatre variables dont on a besoin:

  • le répertoire contenant les scripts
  • le nom de la machine distante ou son adresse IP
    • l'adresse MAC de la carte réseau de la machine distante
  • le nom de l'interface réseau de la machine émettrice



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/traitement.bat  >  /manager/sauvegarde/traitement.log

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




->retour à RSYNC