[Tuto] Rsync

Ce tutoriel va vous montrez comment programmer des taches de sauvegardes chiffrés de votre serveur vers un serveur de sauvegarde.
Il est très important de sauvegarder son serveur, pour pouvoir revenir dans une configuration anterieur en cas de plantage ou autre defaillance.
Je vais vous proposez un exemple un outils très puissant RSYNC et un exemple de script avec une politique de sauvegarde.

Installer RSYNC

# aptitude install rsync

Nous allons tout de suite créer une paire de clés SSH sur le serveur local et le serveur distant qui va permet d’authentifié les serveurs sans utiliser de mot de passe.
Vous vous doutez que l’on ne va pas entrer le mot de passe à chaque sauvegarde :).

Les commandes suivantes sont à réaliser sur le serveur de sauvegarde :

$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/loan/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/loan/.ssh/id_rsa.
Your public key has been saved in /home/loan/.ssh/id_rsa.pub.
The key fingerprint is:
44:f8:69:4b:ad:9f:bd:42:dd:3d:17:04:0d:f0:b9:81 loan@serveurlocal
The key's randomart image is:
+--[ RSA 4096]----+

$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

Vous pouvez maintenant vous connectez en ssh sur le serveur à sauvegarder sans mot de passe, je rappel que l’authentification se fait par clé public SSH.
Vous pouvez tester :

loan@MonServer $ ssh user@server
user@server $
user@server $ exit

Maintenant, nous allons créer un script basique.. mais qui fait son job..
A vous de l’adaptez selon vos besoins 🙂

$ vim backup.sh

#!/bin/bash
#########################################
#       SAUVEGARDE DE SERVEUR LINUX
#       Auteur  : Loan Naze                     
#       Version : 1.0  
#########################################

### Description du script ###
# Ce script va réaliser des sauvegardes de répertoire/fichier
# se trouvant sur des serveurs distant. La copie se fait avec
# RSYNC + SSH pour assurer un échange chiffré.
# L'authentification se fait par empreinte SSH pour plus de sécurité.
# Les sauvegardes se trouve dans /mnt/disk/backup (un disque dur secondaire)

# Variable qui va récupérer la date sous forme JJ/MM/AA
date=$(date +%d-%m-%y)

# Répertoire ou serons sauvegardés les backups
cible="/mnt/disk/backup"

# Variables contenant l'IP des serveurs à sauvegarder
web="user@192.2.0.1"
mysql="user@192.2.0.2"

# Répertoire distant à sauvegarder
web_var_www="/var/www"
mysql_var_lib_mysql="/var/lib/mysql"

# Création des répertoires cible
mkdir -p $cible/$date/web
mkdir -p $cible/$date/mysql

# Options rsync
rsync_opt="-arv --delete -e ssh"

# Sauvegarde du serveur web
rsync $rsync_opt $web:$web_var_www $cible/$date/web

# Sauvegarde du serveur mysql
rsync $rsync_opt $mysql:$mysql_var_lib_mysql $cible/$date/mysql

### Guide d'utilisation rsync : ###

# rsync : appelle le programme rsync
# -r : parcours le dossier indiqué et tous ses sous-dossiers
# -l : copie les liens symboliques comme liens symboliques
# -t : préserve les dates
# -g : préserve le groupe
# -o : mettre le propriétaire du fichier de destination identique à celui du fichier source
# -D : préserve les périphériques
# -v : plus loquace
# --del : permet de supprimer les fichiers de destination qui n'existent plus sur la source
# --ignore-errors : efface même s'il y a eu des erreurs E/S
# --force : force la suppression de répertoires même non-vides
# -a : équivalent à -rlptgoD. C'est un moyen rapide de dire que vous voulez la récursion et de préserver pratiquement tout
# -p : provoque la mise à jour des permissions sur la destination pour qu'elles soient identiques aux permissions sur la source.
# --stats : affiche quelques statistiques de transfert de fichiers, ce qui permet de vérifier l'efficacité de la sauvegarde.
# --progress : montre l'avancement pendant le transfert.
# --delete : efface avant le transfert les fichiers qui n'existent pas sur la source.
# --del : efface au cours du transfert (pas avant) les fichiers qui n'existent pas sur la source.

Il faut rendre notre script executable, et autoriser que l’utilisateur.

$ chmod +x backup.sh
$ chmod 700 backup.sh

Notre script est prêt, il faut maintenant l’automatiser.
Dans notre exemple, nous allons faire en sorte que ce script soit exécuté toutes les jours à 23h59.

Pour celà, rajouter cette ligne dans crontab :

$ crontab -e

59 23 * * * /root/script/backup.sh >/root/script/backup-`date +"\%d-\%m-\%y"`.log 2>&1

Enjoy 🙂

2 thoughts on “[Tuto] Rsync

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *