Comment faire une sauvegarde de Raspberry Pi et l’installer sur une autre carte SD

Quiconque utilise la Raspberry Pi doit connaitre la commande dd qui permet de transférer une image brute sur une carte SD (cf. http://elinux.org/RPi_Easy_SD_Card_Setup).
Il est possible de faire la copie dans l’autre sens et sauvegarder ainsi tout son système.
Mais cette technique à deux inconvénient majeurs :

  1. lorsqu’on copie toute la carte SD, l’image fait la taille de carte, quelque soit la taille des partitions et l’espace disponible dans les systèmes de fichiers.
  2. lorsqu’on souhaite restaurer une telle image, il faut un disque avec une capacité supérieure ou égale à celui que l’on a cloné.

Ces deux inconvénients m’ont poussés à chercher une alternative pour ne copier que les données utiles.
La solution que je propose ici est largement inspirée de la documentation d’Ubuntu : https://help.ubuntu.com/community/BackupYourSystem/TAR et a été testé avec Ubuntu 14.04.

On crée une archive de l’ensemble des fichiers de chaque partition avec la commande :
cd /chemin/vers/la/carteSD && sudo tar -cpzf /chemin/vers/l-archive/backup.tar.gz --one-file-system .
Généralement il y a 2 partitions sur une carteSD de Raspberry Pi, une petite en FAT32 d’environ 60Mo et une autre en ext4 de plusieurs Go.
Il faut faire un backup pour chacune des partitions.
Dans mon cas :
cd /media/boot && sudo tar -cpzf /home/antoine/boot.tar.gz --one-file-system .
cd /media/system && sudo tar -cpzf /home/antoine/system.tar.gz --one-file-system .

Ma carte SD fait 16Go et le backup compressé moins de 600Mo.

Pour restaurer ce système à partir d’une carte SD vierge, il faut tout d’abord recréer une partition FAT32 (que j’ai appelé boot) d’environ 60Mo au début de la carte puis une autre en ext4 (system) suffisamment grande pour accueillir tous les fichiers.
Ensuite, on décompresse les archives directement dans les nouveaux systèmes de fichiers avec la commande :
sudo tar -xvpzf /chemin/vers/l-archive/boot.tar.gz -C /chemin/vers/la/partition/boot/ --numeric-owner

Une fois la copie terminée, la carte est prête à être utilisée !

Cette technique a toutefois l’inconvénient de ne fonctionner que sur un système capable de lire les partitions Linux, ce qui n’est pas le cas Mac OS X ni de Windows par défaut (mais il existe des outils pour palier ce manque).