Raspberry Pi : faire un backup automatique de la carte SD

Après le plantage de ma carte SD il y a peu (voir ici), je me suis dit qu’il était temps de se mettre à la recherche d’un moyen de faire une sauvegarde de la carte SD automatiquement.

Raspberry Pi Home Server : faire un backup automatique de la carte SD

J’ai parcouru les forums et je suis tombé sur une série de post assez intéressant (ici et entre autres) et j’ai voulu regrouper un peu c’est informations et les utiliser pour assurer un minimum que si mon système plante, je ne me retrouve pas à tout réinstaller.

Je suis donc parti sur le principe que faire une sauvegarde de la carte avec dd alors que le système est en train de tourner, ça n’est pas une bonne idée. L’idéal est que ce soit un autre OS qui fonctionne. Comme il est possible de démarrer une distribution sur une clé USB, j’avais mon système de backup :

  1. Depuis mon système principal, je redémarre le Raspberry Pi et boote sur une clé USB qui contient une distribution minimaliste
  2. Une fois dans ce système, je lance mes sauvegardes
  3. A la fin des sauvegardes, je redémarre vers mon système principal

J’ai choisi de laisser les sauvegardes sur la clé USB qui chez moi sera plus facilement accessible que le disque dur. Sous Mac OS j’ai installé Fuse qui permet de lire les partitions ext4 donc je peux facilement récupérer des archives si besoin.

Ne reste plus qu’à passer à l’action !

  1. Faire une sauvegarde de votre carte SD avant toute chose (oui oui manuellement, on sait jamais)
    dd –bs=1m if=/dev/<xxx> of=<nom_image>.img
  2. Installer Moebius sur une clé USB en suivant les instructions ici
    La partition de boot sur la clé USB sera sdX2 où X sera a ou b
    Chez moi c’est /dev/sda2 c’est ce que nous allons utiliser par la suite
  3. Sur la partition /boot de la carte SD, sauvegarder le fichier /boot/cmdline.txt en /boot/cmdline.txt.origin et /boot/cmdline.txt.usbkey
  4. Editer /boot/cmdline.txt.usbkey (toujours de la carte SD) et remplacer
    root=/dev/mmcblk0p2

    Par

    root=/dev/sda2
  5. A partir de maintenant en utilisant cmdline.txt.origin, on boote sur la carte SD, en utilisant cmdline.txt.usbkey, on boote sur la clé USB. Copier /boot/cmdline.txt.usbkey à la place de /boot/cmdline.txt, brancher la clé USB et relancer le Raspberry Pi
  6. Se connecter en SSH. Attention le mot de passe est de nouveau raspi puisque la distribution est toute fraiche
  7. Le système va lancer le menu de configuration. Le quitter sans rien faire.Agrandir la partition principale ne va pas fonctionner car il se base par défaut sur la carte SD et non le périphérique utilisé.
  8. Se reconnecter
  9. Mettre à jour le système
    apt-get update
  10. Installer partclone qui va permettre la sauvegarde d’une partition
    apt-get install partclone
  11. Mon choix a été de créer une partition à part qui va utiliser le reste de la clé pour y stocker les sauvegardes de ma carte SD. Donc j’ai utilisé fdisk pour y ajouter une partition principale avec fdisk /dev/sda
  12. Modifier le fichier /etc/fstab pour monter automatiquement la partition au démarrage. Utiliser le UUID pour garantir le montage de la bonne partition (voir ici pour le montage avec UUID)
  13. Utiliser la commande dmesg pour identifier la carte, généralement mmcblk0backup-1
  14. L’objectif maintenant est de créer un script qui après le redémarrage va effectuer les actions suivantes :
    1. Définir les différents paramètres
      BACKUP_PATH=/backup
      
      BACKUP_TYPE=full ou BACKUP_TYPE=partition
    2. S’assurer de trouver la carte et que la partition de backup est bien montée
      mount | grep $BACKUP_PATH
    3. Au choix :
      • Sauvegarder la totalité de la carte (BACKUP_TYPE=full)
      • Sauvegarder le MBR, la partition boot et la partition système (BACKUP_TYPE=partition)
    4. Sur la partition /boot de la carte SD mettre le cmdline.txt.origin à la place du cmdline.txt
    5. Redémarrer (le script est disponible ici backup_sdcard.sh)
  15. Ajouter le script dans /etc/init.d pour qu’il soit lancé au démarrage du système
    update-rc.d backup_sdcard.sh defaults
  16. Si vous lancez manuellement le script, ca devrait vous créer une sauvegarde du système principal dans le répertoire de sauvegarde
  17. Copier /boot/cmdline.txt.origin à la place de /boot/cmdline.txt, relancer le Raspberry Pi
  18. Créer un script backup_sdcard.sh sur le système d’origine
    #! /bin/sh
    
    # Copy cmdline.txt.usbkey on cmdline.txt
    
    cp /boot/cmdline.txt.usbkey /boot/cmdline.txt
    
    # Reboot
    
    reboot
  19. A vous de décider si vous le lancez manuellement ou par crontab régulièrement

Voilà ! Si vous avez des soucis ou des remarques, les commentaires sont ouverts !

Bonne fêtes à tous

Vous aimez cet article ? Supportez-moi sur Patreon!

Vous aimerez aussi...