Il y a quelques jours, je vous expliquais comment j’effectuais un backup de la carte SD du Raspberry Pi sur mon Mac. Procédure qui avait pour inconvénient d’arrêter le RPi pendant toute la durée de la sauvegarde.
En fouillant un peu sur la toile, j’ai trouvé divers procédures (par exemple ici et ici) que j’ai modifié et adapté à ma sauce.
Tout d’abord, j’ai connecté un « vieux » disque dur de 120Go au port USB du RPi.
Il s’agit d’un LaCie Mobile Disk 2,5 inch de récupération, dont le HD avait sauté. Il a l’avantage de posséder une prise d’alimentation séparée sur laquelle j’ai connecté un transfo 5V 1A.
Ce disque est formaté en Linux ext3. Il est monté en /media/RPi-USB-Dsk/
Voici la procédure que j’ai utilisé pour automatiser le backup :
On va regarder comment s’appelle la carte SD :
sudo fdisk -l
Ici, la carte s’appelle mmcblk0.
Dans /home/pi/
, on va créer un script chargé d’exécuter le backup.
cd /home/pi sudo nano runSDCardBackup.sh
Dans l’éditeur, on va copier ce code (une seule ligne) :
sudo dd bs=4M if=/dev/mmcblk0 | gzip > /media/RPi-USB-Dsk/Backups/backup-`date +%Y%m%d-%H%M`.gz
On quite avec <Ctrl>X et oui pour sauver.
Ce code va créer un ficher nommé backup-YYYYMMDD-HHMM.gz où Y = année en 4 digits, M = mois en 2 digits, D = jour en 2 digits, H = heures en 2 digits et M = minutes en 2 digits.
Plus d’infos sur le formatage des jours, mois, années, … sur cette page.
Ce fichier va prendre place sur /media/RPi-USB-Dsk/Backups/
où RPi-USB-Dsk est le nom du disque et Backups le nom du dossier à la racine du disque.
Pour tester ce script on le rend exécutable, puis, on l’exécute avec les commandes :
sudo chmod u+x runSDCardBackup.sh sudo ./runSDCardBackup.sh
Le processus de sauvegarde devrait commencer et créer le fichier .gz qui va grossir au fur et à mesure de l’avancement de la tâche.
La ligne de commande va se bloquer et ne sera plus disponible durant tout le processus. 1h ou plus.
Pour contrôler l’avancement, ouvrez un deuxième terminal ou lancez un VNC.
Maintenant, nous allons automatiser tout ça grâce à Cron. C’est un programme Unix qui permet d’exécuter automatiquement des tâches à un horaire défini.
Editez la table de configuration de Cron avec la commande suivante :
sudo crontab -e
Dans l’éditeur, tout en bas, ajoutez la ligne suivante (une seule ligne) :
30 3 * * * /home/pi/runSDCardBackup.sh > /home/pi/SDCardBackup.log 2>&1
Ici, la sauvegarde se fera tous les jours à 3:30AM avec un log à l’issue.
2>&1
indique de ne pas envoyer de rapport par mail à l’issue du script.
Pour comprendre tous les paramètres de Crontab, repportez-vous à cette page.
Pour restaurer la sauvegarde, connectez le HD à votre MAC, copiez le fichier de backup désiré sur le bureau, insérez la carte SD dans votre MAC et tapez cette commande dans le terminal :
gzip -dc ~/Desktop/backup.gz | sudo dd of=/dev/disk5 bs=4m
Vérifiez également que la carte a bien été « démontée » (pas éjectée) avant de procéder à la restauration :
diskutil unmountDisk /dev/disk5
Attention disk5 est un exemple ! Voir cet article pour trouver le nom de la carte SD sur un MAC.
Maniez cette commande avec la plus grande prudence. Une erreur pourrait effacer un mauvais disque.
Pour éviter que le disque ne se remplisse trop vite, on peut modifier le crontab pour que le backup ne s’effectue que le lundi à 3:30AM :
30 3 * * 1 /home/pi/runSDCardBackup.sh > /home/pi/SDCardBackup.log 2>&1
Et pour éviter que le disque ne finisse par déborder, on peut ajouter cette ligne dans le script qui va supprimer les backups 3 mois après (91 jours, soit 13 semaines) :
sudo rm /media/RPi-USB-Dsk/Backups/backup-$(date --date="91 days ago" +%Y%m%d)-0330.gz
Edit 08/03/2015 :
Lisez aussi cet article pour un résumé :
https://www.fanjoe.be/?p=1373