Sauvegarde Scriptée via Raspberry Pi 3

Sauvegarde Serveur Web
Sauvegarde Serveur Web

Sauvegarde Opérationnelle

Bonjour à tous, cela fait quelque temps que cet article est en attente, mais après la première mise en route de mon Raspberry Pi 3, j’ai pris le temps d’étudier la manière dont j’allais mettre en place ma sauvegarde automatique.

Autant vous le dire tout de suite, pour moi cela n’est pas abouti, le système est 100% fonctionnel, mais non abouti.

Je vous explique, je n’ai pas mis longtemps à mettre en place la sauvegarde côté serveur, mais j’ai eu quelques difficultés à le rapparier automatiquement sur mon Disque Dur Externe via le Raspberry Pi 3.

Commençons par mon installation finale.
Elle se compose de mon Raspberry Pi 3, connecté à ma TV ca j’avais un port HDMI de libre (et la Livebox est situé à cet endroit également), un clavier et une souris USB (j’envisage de remplace le clavier par un clavier bluetooth normalement prévu pour téléphone afin de gagné de la place) et d’un disque dur de 1To dans un boitier alimenté.

J’ai mis à la fin de mon script un arrêt automatique, et pour le démarré automatiquement, le Raspberry est actuellement branché sur un programmateur électrique, tout simplement. Je verrais par la suite si il y a possibilité de programmer informatiquement son démarrage.

Voici à proprement parlé le script :

Sur le Serveur

Pour la sauvegarde coté serveur je crée un script tout simple, appelé en tache cron tout les soirs à 22h00, qui effectue une archive de mon dossier home complet ainsi qu’une sauvegarde de l’intégralité de mes BDD.

Tâche cron

# m    h     dom mon dow user command
 00   22   *         *        *     root /etc/cron.daily/backup.sh

Script sauvegarde

#!/bin/bash

#date du jour
 bacupdate=$(date +%Y-%m-%d-a-%Hh%M)
 # se qui donne par exemple : 2016-05-09-a-22h00

#Répertoire de backup
 dirbackup=/backup-$bacupdate
 # afin de donner un répertoire nommé backup-2016-05-09-a-22h00
 #création du repertoire de backup
 mkdir /backups/$dirbackup

#Sauvegarde de /home
 tar cvzf /backup-$bacupdate/home-$bacupdate.tar.bz2 /home

#Sauvegarde MySQL
 mysqldump --user=MONUSER --password=MONPASSWORD --all-databases > /backup-$bacupdate/mysqldump-$bacupdate.sql

Sur le Raspberry Pi 3

Sur le Raspberry Pi 3, après plusieurs erreurs qui m’ont value de remettre le système de celui-a zero, j’ai décidé de stocker les scripts sur le disque dur externe qui accueil les sauvegardes. Ainsi en cas de remise à zero, je n’ai qu’ réinstaller les logiciels et systèmes, sans perdre mes scripts (vive les sauvegardes).

Tout d’abords je vous conseille, si vous utilisé une carte SD de plus de 3Go, détendre la partition de votre Raspberry. Et même au passage, de gagner près d’1Go sur celle-ci.

Connecter ensuite votre disque dur qui accueillera votre sauvegarde et le renommer avec la commande suivante :
sudo e2label /dev/sda2 BACKUP

J’ai ici donné le label BACKUP à mon disque dur de sauvegarde. L’avantage, c’est que dans mon script j’appel le chemin de sauvegarde en passant par le label, donc si je change de disque dur, il me suffira de lui donner le même label pour que tout fonctionne.

J’ai déjà créer une clef de sécurité ssh que j’ai envoyé sur le serveur avec cette méthode

$ sudo apt-get update
$ sudo apt-get install openssh-client

Il faudra de même disposer de ssh-server sur la machine distante.

Ceci fait, il vous faut générer vos clés publiques et privées :

$ ssh-keygen -t dsa -b 1024
Generating public/private dsa key pair.

Là, il vous faut répondre à une petite série de questions :

Enter file in which to save the key (/home/monlogin/.ssh/id_dsa):

Appuyez sur Entrée, vos clés seront sauvegardées dans le repertoire caché .ssh.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Une fois votre passphrase entrée, un message de confirmation de création est affiché :

Your identification has been saved in /home/monlogin/.ssh/id_dsa.
Your public key has been saved in /home/monlogin/.ssh/id_dsa.pub.
The key fingerprint is:
XX:8a:XX:91:XX:ae:XX:23:XX:2e:XX:ed:XX:4e:XX:b8 monlogin@mamachine

Ensuite, il vous faut ajouter votre clé publique à la liste des clés autorisées du serveur distant. En admettant que votre serveur se nomme toto.host.org et que votre nom d’utilisateur est titi [1], cela donne :

$ ssh-copy-id -i ~/.ssh/id_dsa.pub titi@toto.host.org
Password:

Entrez le mot de passe de l’utilisateur titi sur la machine distante. Si l’opération d’ajout de votre clé a réussi, un message est affiché :

Now try logging into the machine, with "ssh 'titi@toto.host.org'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Et voila, il ne vous reste plus qu’à lancer un ssh titi@toto.host.org, il vous sera demandé votre passphrase et vous serez loggué :)

$ ssh titi@toto.host.org
Enter passphrase for key '/home/monlogin/.ssh/id_dsa':

Explication issu de ce très bon site : prendreuncafe.com

Tache cron

# m    h     dom mon dow user command
 00   23   *         *        *     root /media/pi/BACKUP/scripts/savbackup.sh

Script de sauvegarde

#!/bin/bash

echo '---'

echo 'Début' $(date +%d/%m/%Y-%H:%M)

eval 'ssh-agent'

ssh-add .ssh/id_dsa

sudo /usr/bin/rsync -avz -e "/usr/bin/ssh -i /home/pi/.ssh/id_dsa" USER@XXX.XXX.XXX.XXX:/backup /media/pi/BACKUP

echo 'Fin' $(date +%d/%m/%Y-%H:%M)

echo '---'

sudo shutdown -h now
J’utilise donc rsync pour télécharger mes fichiers, l’avantage de ce logiciel, c’est qu’il permet de ne télécharger du dossier source que ce qu’il n’a pas déjà en stock dans le dossier de destination.
Afin de valider la clef, j’ai du lancer manuellement une fois mon script, et après il se lançais tout seul sans problème.

Se qu’il reste à faire : supprimer sur le serveur toutes les sauvegarde de plus de 30 jours (j’ai suffisamment d’espace sur le serveur pour garder un mois de sauvegarde mais plus ce serait du gâchis) , améliorer la sécurité, intégrer un envois de mail en cas de problème de sauvegarde, mettre en place un rangement automatique des sauvegarde par Mois / Année et connecté mon clavier bluetooth.

 

About David 9 Articles
Diplômé d'un DUT Services et Réseaux de Communication de Belfort-Montbéliard, je suis actuellement Webdesigner, intégrateur et chargé de projet. Voici une liste non-exhaustive des compétences que je me propose de mettre en œuvre pour votre entreprise : - Mise au point du projet - Design du site en fonction de l’ identité visuelle du client - Intégration du site en utilisant les langages les mieux adaptés au projet - Vérification de la compatibilité inter-navigateurs - Suivi post livraison

Be the first to comment

Leave a Reply