Méthode simple pour sauvegarder des répertoires du synology vers un raspberry pi

Pour simplifier la procédure nous allons créer un partage nfs et un script pour automatiser la sauvegarde.

Ma config:

Un DS716+ Synology – Un Raspberry Pi 4 – Un HDD de 1to + Un HDD de 5 to connectés à un hub alimenté lui même connecté à mon RPi4. Le 1to accueillera le backup du répertoire « photos » de mon Syno. Le 5to accueillera le backup des répertoires « musique » &  » sauvegarde » du mon Syno. Tout ceci se passera en Wifi et sera automatisé.

Sur le syno

Il faut commencer par « autoriser » le RPi à monter le(s) répertoire(s) du syno.
On va dans « Panneau de configuration/Dossier partagé ». On sélectionne le répertoire qui devra être sauvegardé sur le RPi, pour l’exemple sélectionnons « music ».

Dans le 5, il convient de noter l’IP du RPi4. Pensez bien à lui affecter une IP fixe.

Sur le Raspberry Pi

Je considère comme acquis que le RPi fonctionne et que vous y avez installé une distro basée sur Debian. Perso, c’est Raspbian.

Avant tout, on commence par entrer nos deux commandes favorites de mise à jour:

sudo apt update
sudo apt full-upgrade

Ceci fait il convient de faire en sorte que les deux HDD externes se montent automatiquement au démarrage du RPi.

INITIALISATION DES DISQUES DURS

Évidemment vous devrez brancher un ou plusieurs disques durs externe sur l’un des 4 ports usb du Rpi4 (2 usb2 et 2 usb 3). Précision importante: il existe deux type de HDD externes: les SSD et les disques traditionnels. Le Rpi4 ne dispose pas d’assez de puissance pour alimenter correctement un HDD externe traditionnel. Peut être pour un SSD, bien que je n’ai jamais testé. Je vous conseil donc soit de brancher un hdd disposant de sa propre source d’alimentation (une prise le reliant au secteur) soit de faire l’acquisition, comme moi d’un hub usb alimenté.

Ceci fait, connectez vous en ssh à votre pi depuis votre PC principal, ou bien, si vous êtes sur votre Pi ouvrez un terminal et tapez la commande:

sudo fdisk -l

cette commande vous donnera la liste de l’ensemble des disques connectés au pi, y compris les partitions système sur la sdcard

On voit sur cette capture outre les partitions système, que sont branchés deux hdd. L’un de 1to (935,5GiB) sda (avec une partition sda1) et l’autre de 5to (4,6TiB) sdb (avec une partiton sdb1).

Nous allons initialiser puis monter les disques durs. Pour se faire nous allons commencer par taper la commande:

sudo fdisk /dev/sda

Cette commande nous permet d’entrer dans l’utilitaire fdisk mais spécifiquement sur le disque /dev/sda

Le prompte attends que nous lui indiquions une commande. Bien sûr, comme il est noté, on peut taper la lettre « m » pour avoir accès à l’aide.
On voit ici l’aide avec l’ensemble des possibilités

Si nous avions eu plusieurs partitions sur le disque, nous aurions pu utiliser la commande « d » pour effacer les partitions & en créer de nouvelle(s).
Dans notre cas nous allons formater le hdd en ext4 (système linux) avec la commande:

sudo mkfs -t ext4 /dev/sda1


Cette commande permet de créer une partition ext4.

Cette opération terminée, vous pourrez la renouveler pour chaque autre disque dur connecté à votre Rpi4 (sdb1, sdc1 etc….)

MONTER LES DISQUES AUTOMATIQUEMENT À CHAQUE DÉMARRAGE DU RPI4

Cette opération est essentielle, car, même si on ne redémarre que très rarement sont Rpi, il est essentiel que l’ensemble des partitions se montent automatiquement à chaque démarrage. Pour se faire nous allons les inscrire dans le fichier fstab.

Avant tout, il va falloir déterminer un point de montage. Un point de montage est un répertoire qui servira « d’accueil » aux partitions de nos hdd externe. C’est ainsi que fonctionne Linux. Souvent ces derniers sont montés dans le répertoire /media. Pour ma part je vais créer 2 répertoires (car j’ai deux hdd externes) et je les souhaites au niveau de mon répertoire racine(« / ») car cela facilitera beaucoup de choses par la suite.

Je nommerai le premier point de montage: 1to et le second: 5to. Pour se faire je vais créer les deux répertoires a la racine de mon système avec les commande suivantes:

sudo mkdir /1to

sudo mkdir /5to

Ces commandes créent nos deux répertoires (points de montage) dans le répertoire racine du système.

Cette capture nous montre la création des points de montage (sudo mkdir ….) puis je me place dans le répertoire racine du système (« cd / ») et enfin je liste les répertoires présents à la racine du sytème (« ls »). On peut y voir mes deux points de montage sur la droite (1to & 5 to)

Nous allons tester le montage de notre 1er hdd avec la commande:

sudo mount /dev/sda1 /1to

Cette commande s’interprète aisément: sudo pour être utilisateur root, puis « mount » pour « monter », puis le nom du périphérique concerné (/dev/sda1) et enfin son point de montage (/1to)

Évidemment on pourrait en faire de même avec le second hdd avec la commande:

sudo mount /dev/sdb1 /5to

On pourra vérifier l’ensemble des partitions montées sur le système avec la commande:

df -h

On retrouve bien nos deux partitions sur les deux dernières lignes ainsi que l’espace libre sur chaque partition.

Voyons maintenant juste pour la forme, si nous pouvons écrire sur nos partitions. Nous nous plaçons donc dans l’une d’entre elles (« cd /5to » par exemple) et nous utiliserons la commande « touch » qui permet de créer un fichier:

J’essaye de créer un fichier nommé « test » avec la commande « touch ». On constate que nous ne sommes pas autorisés à écrire sur notre hdd.

Pour remédier à cela on se place dans le répertoire concerné (« cd /5to ») et on tape la commande suivante!

sudo chmod 777 -R.

sudo pour être super utilisateur. chmod permet de gérer les droits. 777 donne tous les droits à tous les utilisateurs. Le -R indique la récursivité à tous les sous répertoires. Et le point final indique que cette commande s’applique au répertoire courant, celui dans lequel nous nous trouvons.

Et voilà!
Après changement des droits, la commande « touch test » ne retourne pas d’erreur. On constate même la présence du fichier test lorsqu’on fait un « ls ».

Il est temps d’inscrire nos points de montage dans fstab:

On va éditer le fichier « fstab » qui se situe dans le répertoire « /etc » à l’aide de l’éditeur « nano ». Tout cela en temps que super utilisateur « sudo »
Fichier fstab avant modifications. Nous allons lui ajouter nos deux points de montage tel que sur la capture suivante:
Explications: nous montons le disque /dev/sda1 sur le point de montage /1to il est en ext4 il a les permissions par défaut. Idem pour pour le sdb1. Ensuite nous cliquons sur « ctrl o » pour écrire le fichier, « enter » pour valider le nom puis « ctrl x » pour quitter.

On redémarre le pi avec la commande « sudo reboot » puis on se reconnecte en ssh pour vérifier que nos deux hdd sont bien montés (si j’ose dire)….;-)

Une fois reconnecté en ssh (ssh pi@ip_de_votre_Rpi4) il suffit de se placer dans chacun des points de montage et de faire une commande ls pour vérifier le contenu qui s’y trouve (vous devriez y retrouver le fichier « test » créé plus haut….

…Et voilà!

Montage des partages du syno

On commence par créer les répertoires qui vont accueillir les montages du Syno:

sudo mkdir /media/syno_photo

sudo mkdir /media/syno_music

sudo mkdir /media/syno_sauvegarde

On édite le fichier fstab du Rpi:

sudo nano /etc/fsatb

On ajoute les lignes suivantes (autant de lignes que de répertoires à sauvegarder, dans mon cas 3):

#synology_music
192.168.1.xx:/volume1/music/ /media/syno_zic nfs defaults,user,auto,noatime,intr,rw 0 0
#syno_photos
192.168.1.xx:/volume1/homes/admin/Drive/Moments/photo/ /media/syno_photos nfs defaults,user,auto,noatime,intr,rw 0 0 0
#syno_sauvegarde
192.168.1.xx:/volume1/sauvegarde/ /media/syno_sauvegarde nfs defaults,user,auto,noatime,intr,rw 0 0 0

Remplacer xx par l’ip de votre synology.

Redémarrez votre syno et votre RPi, et rendez vous dans votre navigateur de fichiers sur le pi, et vous pourrez voir apparaître les répertoires du syno. ATTENTION, POUR QUE LE SCRIPT FONCTIONNE VOUS DEVREZ CLIQUER SUR CHACUN DES TROIS RÉPERTOIRES AU MOIN UNE FOIS À CHAQUE DÉMARRAGE DU PI.

Rédaction du script:

Nous allons nous attaquer à la rédaction d’un petit script pour sauvegarder mes données sensibles.
Voilà la situation: je possède un NAS sur lequel je stock mes données dans divers répertoires. Les plus importants à mes yeux sont: photos, sauvegarde et musique. Comme nous l’avons vu précédemment nous savons monter des répertoires partager d’un pc ou d’un nas sur un autre pc ou nas. Il est donc aisé de programmer un script qui utilisera le protocole Rsync pour faire ceci. Rsync est installé par défaut dans toutes les distributions Linux. L’utiliser dans un script bash permet ne pas avoir à taper la commande Rsync chaque fois qu’on souhaite lancer le script. Nous verrons dans le chapitre suivant comment automatiser avec crontab.

Rsync fonctionne de la manière suivante:

rsync /répertoire_à_sauvegarder /repertoire_de_destination

Dans mon cas, je souhaite sauvegarder le répertoire photos de mon nas sur le hdd externe 1to de mon Rpi4. Le hdd externe 1to est monté sur /1to. La commande Rsync serait donc la suivante:

rsync -av /media/syno_photos /1toCette commande va sauvegarder le répertoire /media/syno_photos vers le répertoire /1to. Le « v » après le « -a » indique le mode « verbeux » ce qui signifie que vous verrez tout ce que fait rsync dans un terminal. Dans notre cas il ne sera pas nécessaire. nous pourrons donc nous contenter de: rsync -a /media/syno_photos /1to

Voilà, c’est aussi simple que cela. Supposons maintenant que j’ai voulu sauvegarder un répertoire directement depuis mon nas via le protocole ssh. La commande aurait été la suivante:

rsync -a user@ip_de_mon_nas:/repertoire/de/nas/à/sauvegarder /répertoire/du-pi/qui accueil/la-sauvegarde

L’inconvénient c’est qu’il faut être présent physiquement pour entre le mdp du nas. Cette opération peut être automatiser par un échange de clés ssh entre le pi et le nas, mais malgré mon insistance cela n’a jamais fonctionné chez moi. Vous trouverez un excellent tuto sur la chaîne de mon ami américain SpaceRex ici.

Pour pimenter la chose nous allons demander à notre script de noter dans un fichier texte le jour et l’heure de démarrage de la sauvegarde ainsi que la fin (heureuse) de la sauvegarde. Nous utilserons la commande « echo »:

echo « [debut sauvegarde_syno] $(date) » >> /home/pi/Documents/log.txt
rsync -av /media/syno_sauvegarde /5to && echo « [terminé sauvegarde_syno] $(date) » >> /home/pi/Documents/log.txtÇa parait compliqué mais c’est en fait très simple: « echo » signifie « écrit ce que je te demande dans le « [….] ». « $(date) » indique qu’il y ajoutera la date (ce qui inclu l’heure d’ailleurs). le « >> » lui indique où il doit l’écrire, en l’occurence dans le fichier texte « log.txt » qui est situé dans « /home/pi/Documents ». Ensuite vous avez la commande Rsync et enfin le « && » indique que si tout s’est bien passé alors il passe à la commande suivante, en l’occurrence nous l’écrire dans le même fichier « log.txt ».

voilà

En ce qui concerne la rédaction elle même du script elle fonctionne ainsi:

#!/bin/bash
echo « [debut sauvegarde_syno] $(date) » >> /home/pi/Documents/log.txt
rsync -av –delete-after /media/syno_sauvegarde /5to && echo « [terminé sauvegarde_syno] $(date) » >> /home/pi/Documents/log.txt
echo « [debut photos_syno] $(date) » >> /home/pi/Documents/log.txt
rsync -av /media/syno_photos /1to && echo « [terminé photos_syno] $(date) » >> /home/pi/Documents/log.txt
echo « [debut zic_syno] $(date) » >> /home/pi/Documents/log.txt
rsync -av –delete-after /media/syno_zic /5to &&
echo « [terminé zic] $(date) » >> /home/pi/Documents/log.txtUn script bash démarre toujours parcequ’on appel le « shebang » (c’est l’expression qu’on retrouve sur la 1ère ligne: #!/bin/bash. Ensuite j’ai mit une ligne par sauvegarde que je souhaite effectuer avec une sortie texte spécifique pour chaque action dans le fichier « log.txt ». L’option « –delete-after » pemet de supprimer dans la sauvegarde, les fichiers qui auraient été supprimés de la source entre deux sauvegardes.

J’ai enregistré le script, comme cela est l’usage, avec une extension en .sh et je l’ai rendu exécutable avec la commande:

sudo chmod +x nom_du_script
Je vous conseil de donner un nom assez explicite a votre script, du type: synosauvegarde.sh

Il ne reste plus qu’à lancer le script avec la commande:

sudo /home/pi/Documents/synosauvegarde.sh

Ou bien, si vous êtes déjà dans le répertoire « Documents »:

sudo bash synosauvegarde.sh

AUTOMATISER LES SAUVEGARDES AVEC CRONTAB

Là encore c’est très simple. On lance crontab avec la commande

crontab -e

On choisis l’éditeur de texte, dans notre cas on clic sur 1 (nano)

Pour ce qui me concerne je souhaite une sauvegarde toutes les nuits a 00h00.

Je noterai donc sur la derniere ligne:

00 00 * * * sudo /pi/home/Documents/backupsyno.sh

Laisser un commentaire

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