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 :

Jeedom script SD

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

jeedom script SD

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:

jeedom scenario SD

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

  • cyril

    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

    Répondre
    • hedaweb

      Salut,
      effectivement, il faut bien installer at
      #apt-get install at

      Répondre
      • Cyril

        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

        Répondre
        • hedaweb

          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.

          Répondre
          • cyril

            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+

          • cyril

            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

  • Cyril

    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

    Répondre
    • hedaweb

      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.

      Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *