Bonjour à tous,
Il m’arrive de temps en temps de vouloir réaliser une sauvegarde complète (comprendre sauvegarde image, dump du disque ou de la carte sd) de mes raspberry pi avant de tenter certaines opérations.
Alors la seule bonne méthode pour réaliser cela est de le faire hors ligne… soit en branchant le disque (ou la carte SD) sur un autre ordinateur, soit en bootant sur une clé USB équipée d’un OS adapté pour réaliser la sauvegarde.
Oui mais voilà… tout est bien câblé proprement, bien rangé, bien ficelé… Je n’ai absolument pas envie de tout démonter. Alors voilà une petite astuce pour réaliser la même opération sans rien démonter… au prix d’une sauvegarde moins « propre » et qui prends le risque de ne pas être totalement valide. On va malgré tout essayer de mettre toutes les chances de notre côté.
J’ajoute que cette méthode ne remplace pas les sauvegardes faites par Jeedom, qui garantis notamment d’avoir une copie intègre de la base de données. Il vaut mieux le voir comme un complément !
Toutes les opérations doivent être réalisées en ligne de commande (SSH) et avec les droits « root » (super-utilisateur).
- Connexion en super-utilisateur
Personnellement, vu que le compte root est désactivé sur ma machine, je me connecte avec le compte « jeedom » en SSH. J’élève ensuite mes privilèges avec la commande suivante :
sudo su -
(Saisir le mot de passe compte "jeedom")
- Rendre accessible un support de stockage sur lequel on copiera la sauvegarde. Dans mon cas, j’utilise un NAS Synology connecté en NFS. Mais ça peut-être un disque externe ou une clé USB.
Le stockage externe sera accessible à travers le répertoire « /mnt ».
mount.nfs4 192.168.1.53:/volume1/JeedomBKP /mnt
- Si ce n’est pas déjà fait installer la commande « pv » qui servira à faire l’extraction des données. C’est un peu similaire à la commande « dd », mais elle permet de suivre la progression de la copie.
apt-get install pv
Optionnel : Si votre disque/carte SD supporte la commande TRIM, il est intéressant d’exécuter la commande suivante pour réduire le temps de copie (on en copie pas les blocs vides)
fstrim -v /
- Arrêter un maximum de processus, à commencer par Jeedom lui-même et surtout sa base de données. On terminer par la commande « sync » pour forcer l’écriture de tout ce qui est en mémoire sur le disque.
Ajustez selon votre propre installation.
service vsftpd stop
service apache2 stop
service nodejs stop
service mysql stop
service openvpn stop
service bluetooth stop
service fail2ban stop
service avahi-daemon stop
killall Rezolv.JeeDore.Server
killall nodejs
killall php
killall adb
killall ModemManager
sync
- Extraction de l’image
La commande « pv » sert à extraire l’image disque, on passe ensuite à la commande « dd » qui va les copier dans un fichier situé sur un stockage externe (cf. étape 2), et qui va accélérer la copie des zones disque vide (cf. étape optionnelle)
Extraction 1 : sur un raspberry pi 4B avec disque SSD
pv -B 1M /dev/sda | dd of=/mnt/JeedomPrincipal/jeePrincipal.img bs=4096 conv=sparse
Extraction 2 : sur un raspberry pi 4B avec carte SD
pv -B 1M /dev/mmcblk0 | dd of=/mnt/JeedomAlarme/jeeAlarme.img bs=4096 conv=sparse
- Rebooter !
Vu tout ce qu’on a arrêté avant, autant rebooter le système pour tout remettre en ordre.
Si tout a bien fonctionné, votre disque contient un fichier « .img », dont la taille correspond au disque qui viens d’être sauvegardé.
N’hésitez pas à ajouter vos commentaires et optimisations. Je les intègrerai avec plaisir dans ce tuto.
A+
Patrice