Sauvegarder la carte SD d'un Raspberry Pi

Sauvegarder la carte SD d'un Raspberry Pi

25 février 2020
La roue de secours du Raspberry PI.


TL;DR

  • Remplacer /dev/sdx avec le nom de périphérique de votre carte SD.
  • Pour une carte SD de 8 Go, on va sauvegarder uniquement 7000 octets. (Pensez à réduire un peu votre partition avant la backup !)

Attention : Si vous faite une erreur dans le nom de périphérique de sortie /dev/sdh, vous pouvez corrompre votre OS !

# backup
sudo dd bs=1M count=7000 if=/dev/sdx | gzip > ./`date +%Y%m%d_%H%M`_rpi_image.gz

# restore
sudo gzip -dc my_rpi_image.gz | dd bs=4M of=/dev/sdx
sudo sync

Introduction

Quand on passe du temps à configurer un Raspberry Pi, il peut être intéressant de faire une copie de sauvegarde binaire de la carte SD. Ainsi il sera plus facile de restaurer le Raspberry Pi en cas de défaillance matériel.

Deux problèmes doivent cependant être pris en compte :

  1. Une copie binaire d'une carte SD de 8, 16 ou même 32 Giga-octet prend énormément de place. Nous allons voir comment compresser le fichier image.
  2. Toutes les cartes SD d'une même catégorie (exemple : 8 Go) n'ont pas physiquement la même capacité à l'octet près. Il sera donc nécessaire de faire une sauvegarde d'une taille légèrement inférieur pour éviter les petites disparités de capacité de carte SD.

On utilisera souvent le terme /dev/sdx pour désigner le périphérique de la carte SD. Bien évidement il faudra utiliser le nom adéquat sur votre système. Les commandes dmesg, lsblk et fdisk -l pourront vous aider à identifier facilement le nom correct sur votre ordinateur. (exemple : /dev/sdc)

Sauvegarde d'une carte SD

Le but ici est de créer une sauvegarde de la carte SD sur notre ordinateur afin de pouvoir la restaurer si besoin.

Pour éviter les problèmes lors de la restauration du fichier image, nous allons limiter la taille du fichier image à 7 Go. Ainsi il sera facilement possible de le restaurer sur toutes les cartes SD de 8 Go vierges du commerce, même si la capacité effective diffère de quelques octets entre deux cartes.

La première étape est donc de réduire un petit peu la taille de la dernière partition de la carte SD. Généralement sur un OS type raspbian le nom de cette partition sera rootfs. Pour réduire une partition, vous pouvez utiliser gparted par exemple. Prenons un exemple :

  • Nous avons une carte de 8 Go à sauvegarder
  • Nous allons sauvegarder uniquement 7 Go (7000 x 1 Mo)
  • La carte est composé de deux partitions :
    • boot : qui fait 260 Mo
    • rootfs : avec une taille initialement composée de 7125 Mo
  • Nous allons donc réduire la partition rootfs de 7125 Mo à 6700 Mo.
  • Ainsi une sauvegarde de 7 Go sera suffisant pour couvrir l'ensemble des partitions.

A présent, nous allons utiliser la commande dd qui permet une copie binaire. Afin de réduire drastiquement la place occupé par le fichier image, nous allons également le compresser à la volée avec la commande gzip.

# backup
sudo dd bs=1M count=7000 if=/dev/sdx | gzip > ./`date +%Y%m%d_%H%M`_rpi_image.gz
  • bs (block size) la taille du bloc tampon
  • count indique la quantité de bloc à copier
  • if (input file) sélectionne le périphérique d'entrée, ici notre carte SD
  • date permet de specifier un nom de fichier image avec la date du jour

Pour une carte SD de 8 Go avec un OS Raspbian, on peut s'attendre à un fichier image compressé d'environ 2.9 Go.

Restauration d'une carte SD

A présent que nous avons notre fichier image de sauvegarde compressé, voyons comment le restaurer sur une carte SD vierge.

Attention : Si vous faite une erreur dans le nom de périphérique de sortie /dev/sdh, vous pouvez corrompre votre OS !

# restore
sudo gzip -dc my_rpi_image.gz | dd bs=4M of=/dev/sdx
sudo sync
  • -d (--decompress) mode décompression
  • -c (--stdout) permet d'écrire le résultat sur la sortie standard. Pratique pour utiliser avec un | pipe et enchaîner une commande dd.
  • bs (block size) la taille du bloc tampon
  • of (output file) le périphérique de sortie, ici c'est notre carte SD