Mes passions, le boulots, mes coups de gueule...




Raspberry Pi : Script de backup de la carte SD

Catégories : Geek, Informatique, Mac, Raspberry Pi · par 8 Mar 2015

Il y a quelques temps, j’avais publié des articles traitant de la sauvegarde et des moyens pour en réduire la taille.

Voici un petit résumé de la méthode que j’ai adopté, après pas mal de tâtonnements, pour effectuer un backup hebdomadaire de mon Raspberry Pi.

Vous pouvez télécharger mon script ici : RPi-Backup.sh

Copiez-le dans le dossier de l’utilisateur pi de votre Raspberry :

/home/pi/

Rendez ensuite le script exécutable :

$ sudo chmod u+x /home/pi/RPi-Backup.sh

On va ensuite ajouter une tâche dans Cron :

$ sudo crontab -e

Et on ajoute cette ligne au fichier :

30 3 * * 1 /home/pi/RPi-Backup.sh > /home/pi/RPi-Backup.log 2>&1

La tâche sera exécutée à 3h30 (30 minutes, 3 heures) du matin tous les lundis (dimanche = 0, lundi = 1, …).

On quitte (ctrl+x) et on enregistre les modifications.

Puis, on édite le fichier pour l’adapter à vos besoins :

$ sudo nano /home/pi/RPi-Backup.sh
#!/bin/sh

echo "Exécution du script de Backup"
echo "============================="
echo "$(date +%Y%m%d-%T)"
echo

# Mémorisation de l'heure du début du backup
hback=$(date +%H%M)

# Arret des services
echo
echo "$(date +%Y%m%d-%T) : Arret des services"
echo
sudo service minidlna stop
sudo service transmission-daemon stop
sudo service nginx stop
sudo service mysql stop
sudo service php5-fpm stop
sudo service fr24feed stop

sleep 3

# Suppression des paquets périmés
echo
echo "$(date +%Y%m%d-%T) : Suppression des paquets périmés"
echo
sudo apt-get autoclean

sleep 3

# Suppression du contenu de la corbeille de Root
echo
echo "$(date +%Y%m%d-%T) : Suppression du contenu de la corbeille de Root"
echo
sudo rm -r -f -v /root/.local/share/Trash/files/*

# Suppression du contenu de la corbeille de Pi
echo
echo "$(date +%Y%m%d-%T) : Suppression du contenu de la corbeille de Pi"
echo
sudo rm -r -f -v /home/pi/.local/share/Trash/files/*

sleep 3

# Suppression du contenu de UpDraft Plus
echo
echo "$(date +%Y%m%d-%T) : Suppression du contenu de UpDraft Plus"
echo
sudo rm -r -f -v /var/www/wordpress/wp-content/updraft/*.gz

sleep 3

# Remplissage de l'espace libre par des zéros
echo
echo "$(date +%Y%m%d-%T) : Remplissage de l'espace libre par des zéros"
echo

sudo sync

sudo dd if=/dev/zero of=/home/pi/Desktop/zero.small.file bs=1024 count=102400
sudo dd if=/dev/zero of=/home/pi/Desktop/zero.file bs=1024

sudo sync
sleep 30
sudo sync

sleep 3

# Suppression des fichiers de zéros
echo
echo "$(date +%Y%m%d-%T) : Suppression des fichiers de zéros"
echo

sudo rm -f -v /home/pi/Desktop/zero.small.file
sudo rm -f -v /home/pi/Desktop/zero.file

sleep 3

# Exécution du backup
echo
echo "$(date +%Y%m%d-%T) : Exécution du backup"
echo
sudo dd bs=4M if=/dev/mmcblk0 | gzip > /media/RPi-USB-Dsk/Backups/backup-`date +%Y%m%d`-$hback.gz

sleep 3

# Suppression du backup d'il y a 26 semaine (182 jours ou 6 mois)
echo
echo "$(date +%Y%m%d-%T) : Suppression du backup d'il y a 26 semaine (182 jours ou 6 mois)"
echo
sudo rm -f -v /media/RPi-USB-Dsk/Backups/backup-$(date --date="182 days ago" +%Y%m%d)-0330.gz

sleep 3

# Reprise des services
echo
echo "$(date +%Y%m%d-%T) : Reprise des services"
echo
sudo service php5-fpm start
sudo service mysql start
sudo service nginx start
sudo service transmission-daemon start
sudo service minidlna start
sudo service fr24feed start

sleep 3

echo
echo "$(date +%Y%m%d-%T) : Fin du script Backup.sh"

Adaptez la liste des services qui seront arrêtés et redémarrés en fin de backup.

Updraft Plus est un plugin WordPress qui permet d’automatiser une sauvegarde WordPress dans le cloud selon un planning défini.

Modifiez cette ligne pour adapter le chemin vers votre disque dur ou la destination de la sauvegarde :

$ sudo dd bs=4M if=/dev/mmcblk0 | gzip > /media/RPi-USB-Dsk/Backups/backup-`date +%Y%m%d`-$hback.gz

Sur MAC, pour restaurer la sauvegarde depuis le fichier .gz vers la carte SD, procédez comme suit :

On insert la carte SD dans le lecteur du Mac et on recherche son nom :

$ diskutil list

RPi-Backup-02

Ici, la carte SD se nome /dev/disk5

On va maintenant démonter et PAS ÉJECTER la carte SD avec la commande suivante dans le Terminal du Mac :

$ diskutil unmountDisk /dev/disk5

Attention disk5 est un exemple !
Maniez cette commande avec la plus grande prudence.
Une erreur pourrait effacer un mauvais disque.

Puis, on exécute la restauration du fichier backup vers la carte SD sur le Mac :

$ sudo gzip -dc ~/Desktop/backup-20150305-0330.gz | sudo dd of=/dev/disk5 bs=4m

Dans notre exemple, le fichier de sauvegarde est sur le bureau du Mac et se nomme : backup-20150305-0330.gz

La procédure peut durer 2h pour une carte de 16Go en fonction de la vitesse d’écriture de celle-ci et des performances du lecteur.
Durant ce temps, rien ne s’affichera dans le Terminal. Ne le quittez pas tant que la restauration n’est pas terminée.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.