Backup de mon Nas Synology

Constitution de mon réseau domestique pour le backup de mon nas

Sur cette page je me propose de détailler l’ensemble du process que j’ai mis en place pour sauvegarder les répertoires principaux de mon nas.

Pour faire simple, j’utilise trois (plus que deux désormais!) méthodes en parallèle. L’une en local et deux (plus qu’une) dans le cloud:

Synology C2 dans le cloud. J’utilisais aussi Hubic, mais ce dernier a fermé la possibilité de synchro automatique depuis les syno. Je vais étudier la possibilité d’utiliser Backblaze à la place.

– Localement je sauvegarde mon nas sur 4 hdd externes connectés à un Raspberry PI 4, en wifi via un système que je vais détailler ci-dessous.

LE CLOUD

Il me parait indispensable aujourd’hui d’avoir un backup dans le cloud, qu’elle que soit la solution retenue, à partir du moment où elle peut être automatisée via CLOUD SYNC, l’appli maison de DSM. L’offre de services compatible est importante, jugez par vous même:

À VOUS DE CHOISIR LE SERVICE QUI VOUS CONVIENT.

Je ne m’étalerais pas plus sur la partie cloud, mais gardez à l’esprit que cela reste la seule méthode efficace contre l’incendie de votre foyer ou le cambriolage.

LE BACKUP LOCAL

Localement, le « montage » est plus intéressant. En effet j’ai retenu la méthode qui consiste à:
– monter sur mon raspberry PI les répertoires de mon Nas que je souhaite sauvegarder (via le protocole NFS). Ce montage s’opère automatiquement à chaque démarrage après modification du fichier /etc/fstab (sur le Rpi4).
– synchroniser les répertoires choisis à l’aide du protocole Rsync.
– Automatiser les tâches via un script bash et une tâche Crontab.

Commençons par le Rpi4. J’utilise la distribution Raspbian. J’ai activé les protocoles ssh et vnc afin de pouvoir intervenir à distance sur le Rpi. J’AI AUSSI ATTRIBUÉ UNE ADRESSE IP FIXE À MON RPI. C’EST ESSENTIEL POUR LA SUITE DU PROCESSUS. Pour se faire vous pouvez utiliser l’une des multiples méthodes existantes, pour ma part ce sera l’utilisation de baux statiques via ma livebox. En clair, c’est ma box qui attribue l’ip de mon choix au Rpi en fonction de son adresse MAC.
Une fois installée et mise à jour, la distribution Raspbian peu accueillir notre « installation maison ».

On commence par installer sur le Rpi le paquet nfs-common:

sudo apt install nfs-common

Ceci permettra au Rpi d’être un client NFS du Nas Synology.

Il faut désormais s’occuper des hdd externes. Je conseil vivement de connecter le ou les hdd via un hub alimenté. En effet le Rpi n’est pas assez puissant pour alimenter de manière régulière et continue le ou les disques durs externes. Personnellement j’en ai trouvé un très bien sur Amazon, capable d’alimenter mes 4 hdd externes.

On commence donc par connecter les disques durs externes au Rpi, un par un et entre chaque connexion on tape 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).

Ceci fait, nous allons automatiser le montage de ces HDD à chaque redémarrage du Rpi.

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 4 répertoires (car j’ai quatre 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, le second: 5to, le 3eme: lacie et le dernier: orange (du fait de sa couleur). Pour se faire je vais créer les 4 répertoires à la racine de mon système avec les commande suivantes:

sudo mkdir /1to
sudo mkdir /5to
sudo mkdir /lacie
sudo mkdir /orange

Une fois cette opération terminée, on peux vérifier que cela s’est bien déroulé en se plaçant dans le répertoire racine (cd /) puis avec la commande « ls » (sans les guillemets)

Il est temps d’inscrire nos points de montage dans le fichier /etc/fsatb.

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 4 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 RÉITÈRE LA MÊME OPÉRATION POUR LES DEUX AUTRES HDD

Ceci fait, à chaque démarrage du Rpi, verra apparaître les 4 HDD dans le navigateur de fichiers.

L’étape suivante se passe sur le NAS, avant de revenir au Rpi.

LE NAS

Nous allons indiquer au nas qu’il doit autoriser le Rpi à monter en local les répertoires partagés que nous souhaitons sauvegarder. En clair, nous verrons DANS L’EXPLORATEUR DE FICHIER DU RPI LES RÉPERTOIRES PARTAGÉS DU NAS COMME S’ILS ÉTAIENT PHYSIQUEMENT SUR LE PI.

On commence par aller dans DSM, ouvrir le panneau de configuration, puis « dossiers partagés ». Sur la droite de la fenêtre on voit l’ensemble des dossiers partagés existants, on peux bien sûr en créer d’autres.

On va cliquer une fois sur le dossier partagé que l’on souhaite monter sur le nas pour le mettre en surbrillance. Pour l’exemple je choisis le dossier « music ». Une fois sélectionné on clique sur le bouton « modifier ».

Dans la fenêtre qui s’ouvre (après avoir cliqué sur « modifier »), on va dans le dernier onglet: « Autorisations NFS » et on clique sur créer. Puis il suffit de remplir comme suit:

Validez deux fois puis réitérez autant de fois que de dossiers concernés.

On retourne maintenant sur le Rpi!

On va créer des points de montage pour « accueillir » les répertoires du nas:

sudo mkdir /media/syno_music
sudo mkdir /media/syno_photos
etc…

Cette fois-ci j’ai décidé de monter les répertoire du Nas dans le répertoire /media du rpi. Pas de raison particulière à ceci, c’est juste un choix empirique et historique, en ce qui me concerne.

Voilà, c’est presque fini, on va maintenant noter tout ceci dans le fichier fstab afin de voir nos répertoires au démarrage du Rpi.

Explication:

On va noter, pour chaque répertoire du nas une ligne sur le modèle suivant:

ip-du_nas: /répertoire_du_nas/ /point_de_montage/sur_le_rpi nfs defaults,user,auto,noatime,intr,rw 0 0 0
Pensez à respecter les espaces.

Ainsi, si l’adresse IP du Nas était 192.168.X.XX on aurait:

192.168.X.XX:/volume1/music/ /media/syno_zic nfs defaults,user,auto,noatime,intr,rw 0 0 0

Après cela, on redémarre le Rpi et l’on obtient ceci:

Étrangement, il faut tout de même cliquer une fois, à chaque démarrage du Rpi, sur chaque répertoire du nas, pour le monter. Mais c’est peu de chose eu égard au fait qu’on ne démarre le Pi que très peu souvent.

RSYNC pour synchroniser les répertoires.

Rsync est un protocole très puissant qui permet de synchroniser des répertoires en local ou au travers d’un réseau. Globalement la commande 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 /1to

Cette 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

Nous allons maintenant noter tout ceci dans un script avec l’ensemble des instructions pour la sauvegarde de tous les répertoires que j’ai choisi.

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

Cela 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 ».

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.txt

Un 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:

/home/pi/Documents/synosauvegarde.sh

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

bash synosauvegarde.sh

AUTOMATISER LA SAUVEGARDE AVEC CRONTAB

Crontab est l’utilitaire pour lancer tout type de tâches sous Linux. On le lance en ouvrant un terminal et en tapant la commande:

crontab -e

Comme toujours, n’hésitez pas à lancer la commande « crontab -help » pour connaître l’ensemble des options existantes.


Au premier lancement, il vous demandera de choisir avec quel éditeur vous souhaitez l’utiliser (nano, vi ou vim). Moi, ce sera nano.

Pour bien comprendre ce qu’il y aura à remplir, il faut savoir qu’il y aura 6 informations à donner

  • les minutes
  • les heures
  • le(s) jour(s) du mois (du 1er au 31)
  • les mois (de janvier à décembre)
  • le(s) jour(s) de la semaine
  • la commande que vous souhaitez voir se lancer.

Reprenons par l’exemple:

imaginons que je souhaite lancer le script backup.sh à date régulière. Imaginons ensuite que je souhaite que cela sois tout les dimanches à 23:15.

J’aurais donc à remplir de la manière suivante:

15 23 * * 0(ou 7) commande_à_exécuter

Explication:

le 15 correspond aux minutes (23:15).

le 23 correspond à l’heure: 23h

l’étoile suivante signifie qu’on ne défini pas un jour du mois en particulier. Si on avait souhaiter une commande qui se lance tous les 5 du mois à 23h15 on aurait mit: 15 23 05 * *. Mais ça n’est pas le cas qui nous intéresse.

l’étoile suivante signifie que notre commande ne s’effectuera pas un mois particulier. Si l’on voulait une commande qui s’effectue uniquement au mois de mai, le 21, à 23h15 on aurai mit: 15 23 21 05 *.

enfin, le dernier zéro (ou 7) indique le jour de la semaine, donc le dimanche, en effet dans crontab, les jours sont déclinés comme suit:

  • 0=dimanche
  • 1=lundi
  • 2=mardi
  • 3=mercredi
  • 4=jeudi
  • 5=vendredi
  • 6=samedi
  • 7=dimanche (oui, on n’a deux dimanches, contrairement à la vraie vie!)

Il existe quelques « trucs »dans crontab. Si l’on souhaite la répétition d’une commande toutes les « x » minutes il faudrait théoriquement utiliser la virgule. Exemple: Pour lancer une commande toutes les 20mn il faudrait40 donc noter:

00, 20, 40 * * * * commande_à_exécuter

heureusement l’on peut le faire avec l’astuce suivante:

*/20 * * * * commande_à_exécuter qui indique qu’on lancera la commande toutes les 20mn.

Autre astuce: si l’on souhaite lancer une commande tous les jours de la semaine à 14h10 sauf le week-end, on pourra utiliser l’astuce suivante:

10 14 * * 1-5 commande_à_exécuter

On peut aussi mixer autrement: si l’on souhaite, par exemple qu’une commande s’exécute tous les 5mn mais uniquement pendant la 1ere 1/2 heure de chaque heure alors on aura la commande suivante:

0-25/5 * * * * commande_à_exécuter

Pour executer le script tous les deux jours on privilégiera la commande suivante:

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