Synchroniser des fichiers entre un Linux Server et un NAS Synology avec rsync
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 ._*