Sauvegarde complète en ligne de votre Raspberry pi

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).

  1. 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")
  1. 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
  1. 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 /
  1. 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
  1. 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
  1. 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

7 « J'aime »

Bonsoir,
Merci du partage.

Suite du tuto :
Comment vérifier le contenu de sa sauvegarde

  1. Connexion en super-utilisateur
sudo su -
  1. Créer un répertoire dans lequel sera « monté » la sauvegarde
mkdir /mnt2
  1. Identifier les partitions contenues dans l’image
fdisk -l jeeAlarme.img
Disk jeeAlarme.img: 29,7 GiB, 31914983424 bytes, 62333952 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: 0xa2f8ee38

Device         Boot  Start      End  Sectors  Size Id Type
jeeAlarme.img1        8192   532479   524288  256M  c W95 FAT32 (LBA)
jeeAlarme.img2      532480 62333951 61801472 29,5G 83 Linux

Dans cet exemple, on voit 2 partitions :

  • La première, qui pèse 256Mo, contient la partition « /boot »
  • La seconde, de 29,5 Go, contient le système de fichiers principal « / »

C’est surtout celle-ci qui va nous intéresser. Pour la monter, il va falloir indiquer à la commande « mount » à quel endroit elle se trouve dans l’image.

C’est la commande « fdisk » lancée ci-dessus qui vas nous donner la réponse : il est indiqué que la commande démarre au secteur 532480 (colonne « Start »).

Il est aussi indiqué qu’un « Secteur » a une longueur de 512 octets.

Sortons la calculette : 532480 * 512 = 272629760

La partition démarre donc 272629760 octets après le début du fichier. Notons cette valeur pour l’étape suivante.

  1. Montage de la partition
mount -o loop,offset=272629760 jeeAlarme.img /mnt2
  1. Accès au contenu

On peut maintenant accéder au contenu de l’image en explorant le contenu du dossier « /mnt2 »

cd /mnt2
ls -l --color -F


On peut maintenant accéder au contenu de l’image !

Attention, l’image est ouverte en lecture/écriture !
Si on veut l’ouvrir en lecture seule, on peut remplacer la commande « mount » précédente par :

mount -o ro,loop,offset=272629760 jeeAlarme.img /mnt2

(remarquez la valeur « ro » = « read only »)

Comme l’image a été capturée sur un système en fonctionnement, je conseille de l’ouvrir au moins la première fois en lecture/écriture. Ca permettra à linux de corriger les éventuelles anomalies.

  1. Démontage de l’image

Pour libérer l’image, il faut la démonter :

umount /mnt2
2 « J'aime »

Salut, super tuto, qu’on découvre toujours trop tard :frowning:
par contre il manque la partie « restaurer » xD

Je viens de découvrir aussi le tuto.
Mais franchement il propose de rebooter à la fin …
Dans ce cas autant éteindre le faire à froid à mon sens

Bonjour,

J’utilise cette méthode : [Tuto] : cloner sa SD ou son SSD en 3 lignes de commandes - Forum Communauté Jeedom