Backup automatique de la carte SD de Jeedom
L’objectif est de programmer une sauvegarde automatique de la carte SD entière pour permettre de remettre en route rapidement son Jeedom avec une autre carte SD.
Prérequis
- Se connecter en ssh au raspberry
- Avoir un lecteur externe Ici la freebox sur le point de montage /media/freebox, voir partage samba
- La taille de la partition ne doit pas etre trop volumineuse pour éviter une sauvegarde trop lente Un max de 5Go me semble bien
Identifier la taille de la carte SD
Se connecter en SSH au Rasp, puis :
~# sudo fdisk -l Disk /dev/mmcblk0: 15.1 GiB, 16172187648 bytes, 31586304 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x2614d0bc Device Boot Start End Sectors Size Id Type /dev/mmcblk0p1 8192 137215 129024 63M c W95 FAT32 (LBA) /dev/mmcblk0p2 137216 9558015 9420800 4.5G 83 Linux
Ici le dernier secteur de notre carte SD est le 9558015 et la taille d’un secteur est 512 octets.
On peut donc identifier la taille exact de la carte a sauvegarder : 9558015 x 512 = 4893703680 octets = 4667Mo Arrondi au dessus par sécurité
La commande de sauvegarde
Elle permet d’exporter une image des partitions utiles de la carte SD vers la freebox
sudo dd if=/dev/mmcblk0 of=/media/freebox/Jeedom/SD/bck-SDrspi$(date +%Y%m%d).img bs=1M count=4667 iflag=fullblock
Le script de sauvegarde
Le script ci-dessous permet d’arrêter les services de Jeedom, de sauvegarder la SD, de faire du tri sur les vieux fichiers de sauvegardes et de remettre en route les services. Les services sont arrêter pour fiabiliser au maximum le fichier .img
Dans le plugin script de Jeedom a installer depuis le market Jeedom
Créer un nouveau script appelé : backup-sd.sh
Comme ceci :
Editer le et copier le script ci-dessous
#!/bin/bash ### Script Sauvegarde le carte SD jusqu'a 7660o #tester la taille du dossier SD max 60Go SIZE=$(sudo du /media/freebox/Jeedom/SD | awk '{print $1}') if [ $SIZE -gt 60000000 ] then echo "taille limite du dossier dépassé" && exit 3 fi #arret des services sudo systemctl stop cron.service sudo systemctl stop apache2.service sudo systemctl stop mysql.service #Backup de la SD sudo dd if=/dev/mmcblk0 of=/media/freebox/Jeedom/SD/bck-SDrspi$(date +%Y%m%d).img bs=1M count=4670 iflag=fullblock if [ $? -eq 0 ] then #start des services sudo systemctl start cron.service sudo systemctl start apache2.service sudo systemctl start mysql.service # Purge les fichiers trop vieux : 40 jours sudo find /media/freebox/Jeedom/SD/bck-SD* -ctime +40 -exec rm -fr "{}" \; else echo "erreur de sauvegarde" && exit 4 #start des services sudo systemctl start cron.service sudo systemctl start apache2.service sudo systemctl start mysql.service fi
Programmer le lancement automatique du script
Vous pouvez directement lancer le script depuis la crontab, mais ici nous le ferons depuis Jeedom
Créer un 2ème script appelé : backup-sd-run.sh Ce dernier permettra de pouvoir arrêter le service apache2 sans se stopper grâce à la commande at
Editer le et copier le script ci-dessous
#!/bin/bash sudo at -f /var/www/html/plugins/script/core/ressources/backup-sd.sh now + 1 minute
le chemin « /var/www/html/plugins/script/core/ressources » doit être le même que le script n°1
Vous pouvez maintenant lancer le script n°2 depuis un scénario:
Le scénario déclenchera le script chaque dimanche a 4h29 seulement si l’alarme est désactivée
ATTENTION : Jeedom sera indisponible pendant la sauvegarde
8 thoughts to “Backup automatique de la carte SD de Jeedom”
Bonsoir
merci pour ce tutoriel que j’ai essayé de suivre à la lettre (du moins en changeant ce qui devait l’être).
Au moment de lancer le 2nd script (sans scénario mais avec le bouton « tester » tout à droite) Jeedom me retourne l’erreur
Erreur execution de la commande [Aucun][backup-sd-run.sh][bck-SD] : Error on shell exec, return value : 1. Details : Array ( [0] => sudo: at: command not found )
Il semble donc s’arrêter dès ce script sans aller cherche le suivant.
Faut il installer quelque chose pour que la fonction « at » soit connue ?
Merci encore
Cyril
Salut,
effectivement, il faut bien installer at
#apt-get install at
Bonsoir,
grâce à ta réponse je progresse, mais doucement. Je pense que l’écriture n’est pas possible sur la Freebox en tant qu’utilisateur pi.
En ssh (pi@XXX.XXX.XXX.XXX) j’ai bien accès au répertoire /media/freebox/jeedom mais pour écrire dedans je dois faire un sudo et je pense que l’erreur viens de là. Le répertoire appartient à 4242/4242.
Faut-il donc à ton avis que modifie le script pour insérer un sudo ou faut il que je trouve un moyen de changer les droits ou le propriétaire du répertoire (ce que je n’ai pas réussi à faire).
Encore merci
Cyril
Salut,
je crois que tu devrais monter ton partage samba avec le user www-data plutot que pi, chez moi uid=33
voici la ligne que j’ai dans ma /etc/fstab (remplacer par ton username et ton password, si tu n’as pas d’authent, supprime username et met password=vide):
//mafreebox.freebox.fr/Disque\040dur /media/freebox cifs noauto,nofail,x-systemd.automount,x-systemd.requires=network-online.target,x-systemd.device-timeout=10,rw,username=nicolas,password=@@@@@,iocharset=utf8,uid=33,sec=ntlm,file_mode=0770,dir_mode=0770 0 0
Désolé c’est un peu long mais ca répond a toutes mes contraintes.
de mon côté j’ai l’impression que c’est uid=1000 qu’il faut utiliser. Avec uid=33 un ls -l disait que tout appartenait à www-data et je ne pouvais rien écrire dedans.
J’avoue que je pige pas trop ces histoires de uid mais 1000 semble ok.
Je lance un test cette nuit.
merci de m’avoir mis sur la voie
Je te dirai ce qu’il en est si ça peut servir à d’autres.
A+
Bonsoir
la sauvegarde est partie cette fois; j’avais encore une erreur de chemin du fichier j’avais fait /media/freebox/jeedom et dans ton script c’était Jeedom-SD. Je crois que je me suis fait avoir par la commande que tu as indiquée et sur la base de laquelle j’avais fait mon arborescence:
sudo dd if=/dev/mmcblk0 of=/media/freebox/Jeedom/SD/bck-SDrspi$(date +%Y%m%d).img bs=1M count=4667 iflag=fullblock
A rectifier peut être
Merci pour le tuto et le support
Bonjour le script marche donc très bien et se lance à 3h les dimanches matin. En revanche j’ai tous les jours une erreur à 4h22 disant Erreur sur jeedom::backup() : Cannot acces backup folder, please check right : /media/freebox/jeedom
As tu une idée de ce qui peut amener jeedom à vouloir tester le point de montage et à ne pas pouvoir y accéder alors que lorsqu’il exécute le scénario il arrive bien à écrire dedans?
Merci et bon we
Salut, je pense qu’il s’agit de « l’emplacement des sauvegardes » que tu as mis dans la l’onglet « sauvegardes » de Jeedom. Cette fonction sert a sauvegarder l’appli Jeedom avec la base de données.
Que te donne un ls -lrt /media/freebox ? Jeedom ne doit pas avoir les droits pour écrire dedans.