Synchroniser des fichiers entre un Linux Server et un NAS Synology avec rsync

19 Juin 2015 à 00:00 Système d'exploitation

Je ne publierai plus rien sur ce blog. Un nouveau blog existe maintenant. Il se nomme Hardly Smart.

Vous pourrez y retrouver des astuces plus larges sur l'informatique ainsi que mes anciens billets de blog.

Je vous souhaite une bonne lecture sur Hardly Smart.


La sauvegarde de fichier avant un crash est toujours crucial et souvent assez compliqué à mettre en place quand on ne s'y connait pas beaucoup en ligne de commandes.

J'ai justement été confronté à ce problème, je devais sauvegarder mes différents fichiers entre 2 entités : mon serveur Linux (où sont stockés mes fichiers de travail) et mon NAS Synology où je souhaite placer ma sauvegarde.

Je me suis penché sur BTsync, comme je l'expliquais dans mon précédent billet, mais je me suis aperçu qu'il consomme beaucoup de ressources et qu'en plus il a du mal à tout copier quand on commence à avoir beaucoup de fichiers. Pour vous donner une idée, j'ai plus de 750Go de fichiers et plus de 900 000 fichiers. Ce qui peut paraître beaucoup mais sur 10 ans de travail ce n'est pas énorme.

Bref, me voilà en quête d'un autre outil pour sauvegarder. J'ai regardé Cloud Station de Synology, mais l'outil n'est pas dispo pour les serveurs, uniquement pour les versions desktop.

J'ai testé Owncloud, mais le système n'est pas comme je le souhaiterai car je souhaite à tout prix que si je supprime un fichier de mon Linux, il reste présent sur mon NAS. Et oui, une fausse manipulation est si vite arrivée, et je ne souhaite pas tout perdre.

J'ai donc regardé comment fonctionnait ces systèmes. Ils fonctionnent tous les deux avec le système de Linux rsync (remote synchronization) qui permet une sauvegarde incrémentielle à distance par SSH. Le fonctionnement est plutôt simple :

rsync source/ login@serveur:/destination/

Ceci est bien beau mais je ne souhaite pas le lancer à la main à chaque fois pour faire la synchro. Car en plus à chaque fois je suis obligé de rentrer mon mot de passe à la main pour que la sauvegarde se lance.

Du coup, pour éviter ceci, je vous conseille d'utiliser sshpass qui permet de passer votre mot de passe SSH directement en ligne de commande :

sudo apt-get update
sudo apt-get install sshpass

sshpass -p "votre_password" rsync source/ login@serveur:/destination/

Alors oui pour le moment je suis encore obligé de le rentrer à la main, mais patience ...

Afin de ne pas le lancer en ligne de commande à chaque fois, on va créer un fichier que l'on va appeler backup.sh et que l'on placera dans notre dossier /home/ qui nous permettra de le lancer plus tard via une tâche CRON.

#!/bin/bash

## Permet de formater le texte afficher pour qu'il soit en UTF-8
export LANG="fr_FR.UTF-8"

sshpass -p "votre_password" rsync source/ login@serveur:/destination/

Maintenant que nous avons notre fichier, passons en root pour l'ajouter aux tâches CRON de root pour être sûr d'avoir tous les droits.

sudo su

## Permet de voir le contenu du crontab de root
crontab -l

## Permet de modifier les taches CRON de root
crontab -e

## Je souhaite que mon cron se lance tous les matins à 7h30 en même temps que je me lève
## Pour vous aider, faites un tour sur ce site : http://www.openjs.com/scripts/jslibrary/demos/crontab.php

## Copiez ce code tout en bas du fichier
30     7       *       *       *       sh /home/babeuloula/backup.sh

## Faites CTRL + O pour écrire le fichier, puis CTRL + X pour quitter

Et voilà, maintenant votre sauvegarde se lancera automatiquement tous les jours à 7h30 et copiera vos fichiers sur votre NAS.

Si jamais vous avez des soucis lorsque vous essayez d'utiliser rsync avec votre NAS, regardez sur votre NAS dans :
Sauvegarde et réplication => Services de sauvegarde => Cochez Activer le service de sauvegarde réseau

Je vous mets dans l'onglet source, un petit fichier *.sh un peu plus évolué qui vous permettra d'avoir un système de log des actions et aussi avec quelques paramètres pour optimiser la sauvegarde

Bonne sauvegarde à tous !

Source

rsync_backup.sh

#!/bin/bash

export LANG="fr_FR.UTF-8"

## On fait une synchro incrémentable, il ne supprime aucun fichiers, même s'ils ne sont plus présent sur le RAID
    ## -v : mode verbose, affiche ce qu'il fait
    ## -r : permet de la recursivité des dossiers
    ## -u : saute les fichiers plus récents chez le destinataire
    
## tee : permet de lire ce qui est écrit et l'enregistre dans un fichier
    ## -a : permet d'écrire dans une nouvelle ligne

echo "-----------------------------------"|tee -a /home/babeuloula/rsync_backup.log
echo "Lancement de la scynchro le $(date)"|tee -a /home/babeuloula/rsync_backup.log
echo " "|tee -a /home/babeuloula/rsync_backup.log
sshpass -p "password" rsync -v -r -u --exclude-from=/home/babeuloula/rsync_exclude_files.txt source/ login@:/destination/|tee -a /home/babeuloula/rsync_backup.log
echo "-----------------------------------"|tee -a /home/babeuloula/rsync_backup.log
echo " "|tee -a /home/babeuloula/rsync_backup.log

rsync_exclude_files.txt (liste de fichiers à ignorer lors de la copie)

.DS_Store
.Spotlight-V100
.Trashes
~*
.~lock.*
*~
ehthumbs.db
desktop.ini
Thumbs.db
*.part
*.crdownload
._*

 

Articles liés

Les commentaires ont été désactivés.

3 commentaires

Philippe 17 Octobre 2016 à 12:34

Super le tuto ! c'est exactement ce que je cherche pour mon utilisation, sauf que je le voudrais de l'autre sens; exporter des depuis mon NAs synology vers un serveur linux chez un hébergeur.
C'est possible ca aussi ?

Merci

BaBeuloula 17 Octobre 2016 à 12:45

Salut,

Bien sûr, il suffit de stocker ton fichier *.sh sur ton NAS Synology et d'utiliser les tâches planifier dans les paramètres du DSM pour l’exécuter. Le principe du script reste le même.

Si tu veux te connecter en SSH sur ton NAS, tu dois le faire en te connectant en root avec le même mot de passe que l'utilisateur admin.

Boufon 17 Août 2018 à 13:02

le tuto est très clair mais dans mon cas le serveur linux dont je veux sauvegarder le contenu est chez OVH et le NAS chez moi et je ne veux pas ouvrir de port dans ma box. Mon idée est de placer le script sur le NAS et que ce soit le script du NAS qui lance le rsync afin que les donnée se sauvegarde du serveur linux vers le NAS
Est-ce possible ?