ensP

[Raspberry Pi] Création d’une image disque compressée

Cet article a été rédigé il y a 5 années ! Il commence à dater, mais n'est pas forcément obsolète.. Lisez-le en gardant cela en tête !
Bonjour, Et dire que j’en ai bavé pour créer une image disque.. Certains se marreront sûrement, mais j’ai mis une semaine à trouver comment faire pour qu’à partir d’une carte SD (Finalement j’aurai mieux de lire la doc, cela m’aurait été plus profitable !!). Tout cela pour mettre en téléchargement un bête fichier .img ! Je vais donc résumer la démarche dans cet article pour permettre à d’autres qui me liront de simplifier leur démarche. Vous pourrez ainsi partager des .img et sauvegarder en l’état votre carte, pour la réinstaller par la suite à l’identique ! /!\ Article mis à jour le 15 novembre 2014, parties "récupération minimale" et "automatisation de la sauvegarde" complétées !

I) Pré-requis

Vous aurez besoin pour cet article de :
  • Un lecteur de carte SD
  • Une carte SD avec un OS déjà installé (expl : Raspbian, OpenElec,..) Normal me direz vous on va en faire une sauvegarde..
  • Un ordinateur Unix (Apple, Linux Ubuntu..)
A priori si vous avez déjà installé un OS sur une carte SD pour l’utiliser avec un Raspberry, vous avez probablement tapé la commande suivante :
dd bs=1m if=~/path/madistribution.img of=/dev/rdiskX
Nous allons donc faire l’action inverse et récupérer l’image de la distribution après l’avoir modifié par exemple. Si vous souhaitez comme moi proposer en téléchargement un .img vous allez y trouver votre compte !! (Cf. Installation de l’extension Pi’BOX : Une plateforme de libre partage..)  

II) Récupérer le fichier .img

Nous allons à présent commencer la partie intéressante de cet article. La récupération des images disques. Pour cela vous avez 2 méthodes. La première est plus contraignante car cela prend plus de temps que la seconde, n’est pas du coup automatique et êtes obligé d’éteindre votre raspberry. Néanmoins elle a l’avantage d’être facile à utiliser. Dans tous les cas, je vous conseille de brancher une clef USB à votre raspberry pour sauvegarder l’image ou de mettre en place un partage NFS (personnellement j’ai opté pour cela avec mon Syno!)

1. Récupération grossière + compression

Dans un premier temps, éteignez votre raspberry. Et branchez la carte sur votre ordinateur. Commencez par lancer la commande suivante, pour connaitre le numéro du disque depuis votre ordinateur (Cf. Configuration minimale de son RPi)
df -h
Chez moi le numéro du disque est le n°1. Nous allons à présent démonter la partition boot qui apparaît ! Et lancer la commande suivante d’extraction :
dd bs=1024 if=/dev/mmcblk0 of=~/manouvelle_distribution.img
Un nouveau fichier du nom de manouvelle_distribution.img sera créé dans votre dossier personnel. Du coup avec cette méthode vous allez vous retrouver avec une image disque de la taille de votre carte SD ! Pas top top, c’est pourquoi nous allons passer à la seconde étape, la compression. Pour compresser l’image disque, je vous conseille une distribution linux basique (ubuntu,debian ou autre). Lancez GParted et ouvrez l’image disque, puis redimensionnez la au minimum. Une fois l’action terminée vous vous retrouvez avec une image toute propre.

2. Récupération minimale

Vous avez une seconde possibilité peut-être plus sympa, car cela vous permet d’automatiser l’exportation des images disques avec une machine connecté en ssh au raspberry, et vous n’êtes pas obligé d’éteindre votre raspberry. Avec cette méthode vous récupérez un fichier .img tout propre, de la taille de votre carte SD. Puis vous lancez un programme qui la réduire à une taille d’environ 1,7Go si vous aviez une distribution Raspbian pas trop modifiée comme moi. Concernant la récupération d’une image minimale, je vous conseille d’utiliser le script que j’ai pondu en réadaptant un programme écrit en Perl et qui me permet de redimensionner l’image disque à une taille minimale :
wget http://partage.gauss-it.net/raspberrypi/shrink/raspi-shrink -O /bin/raspi-shrink chmod 755 /bin/raspi-shrink
Commande à lancer :
raspi-shrink ~/votre_image.img
A la fin de l’exécution vous vous retrouverez avec une image d’une taille minimale !! 🙂 En cas de problème n’hésitez pas à m’écrire un commentaire, car cette partie m’a donné beaucoup de fils à retordre ! 🙂 Source du programme en PERL : http://www.raspberrypi.org/forums/viewtopic.php?f=91&t=58069  

III) La compression ZIP

A présent, vous disposez d’un .img plutôt relativement léger, mais vous pouvez faire encore mieux ! En effet, prenez votre logiciel de compression préféré et compressez votre .img en un .zip du même nom ou .tar.gz.
zip image_disque.zip image_disque.img
À présent, vous disposez d’un fichier  d’environ 500Mo sur une distribution Raspbian classique.  

IV) Automatisation de la sauvegarde réseau

 Je vais vous expliquer la démarche que j’ai mis en place pour sauvegarder mon raspberry en réseau de façon automatique ! Dans un premier temps j’ai mis en place un service NFS sur mon serveur pour permettre au raspberry d’avoir un espace de stockage considérable. A l’aide de ce programme, vous récupérerez une image .img. Il vous faudra encore compresser l’image, ce que je n’ai pas réussi à faire sur le raspberry, raison pour laquelle rasai-backup ne compresse pas. Je pense que le programme zip doit surement prendre temporairement toute la place disponible sur la carte et donc la faire planter.. bref si quelqu’un à une solution, n’hésitez pas à m’écrire un commentaire ! 🙂 Pour l’installation lancez les commandes suivantes :
wget http://partage.gauss-it.net/raspberrypi/shrink/raspi-backup -O /bin/raspi-backup chmod 755 /bin/raspi-backup
Puis je n’ai plus qu’à lancer le programme de la façon suivante pour sauvegarder l’image :
sudo raspi-backup </chemin/vers/mon/nfs/my_image.img>
Le tout étant automatisé à l’aide de crontab pour que l’action se répète de manière régulière. Ainsi lorsque mon raspberry tourne et que je suis chez moi je peux faire des backup réseau de ma carte tout en minimisant la taille de l’image sur mes disques !  

En conclusion,

Il ne vous reste plus qu’à mettre en téléchargement le fichier .zip une fois l’image compressée. Et à la personne d’en face, de suivre la démarche d’installation d’un .img sur une carte SD comme je l’explique dans l’article suivant par exemple : [Raspberry] Configuration minimale de son RPi ! N’hésitez pas à me faire des commentaires ou me demander conseil si vous avez un problème avec ce tutoriel, j’ai eu beaucoup de mal à mettre en place quelque chose de fonctionnel, et à comprendre les erreurs, mais normalement vous ne devriez pas avoir de soucis avec les codes fournis !

8 réponses à “[Raspberry Pi] Création d’une image disque compressée

  1. Super site, j’attend avec impatience la suite de ce tuto, le second mode de récupération m’intéresse tout particulièrement. J’ai réussi a configurer une version de retropie quasi 100% fonctionnelle sur une micro sd de 64gb. J’aimerais désormais en faire une copie afin de pouvoir la partager au reste de la communauté car comme vous avez pu le remarquer, retropie demande bcp de modification afin de faire tourner la totalité des émulateurs.

  2. Bonjour .
    Merci pour ce script mais je bloque quelque part ^^
    pas moyen de le faire fonctionner .
    Il y a un truc que je n’ai pas du comprendre ^^

    sudo raspi-shrink ~/votre_image.img
    /bin/raspi-shrink: 10: /bin/raspi-shrink: [[: not found
    /bin/raspi-shrink: 16: /bin/raspi-shrink: [[: not found
    /bin/raspi-shrink: 16: /bin/raspi-shrink: /home/pi/votre_image.img:: not found
    Error : This file is not an image or doesn’t exist

    1. Oui ^^ raspi-shrink est bien installer dans /bin et j’ai bien les droit d’exécution .
      Mais il y a un truc qui bloque :'( (pour info je suis sous PI2 donc partition boot différente )

  3. Hello,

    Merci pour ce petit tuto bien utile. Cependant, je me retrouve face au même problème que jbam et mon RPi me retourne la même erreur.
    La solution a-t-elle été trouvée par l’un de vous ?

    Je vais tenter de creuser un peu de mon côté. J’vous tiens au courant si je trouve quelque chose.

    Merci d’avance ! 🙂

    1. Salut Captain,

      Est-ce que tu possèdes aussi un RPi 2 ?
      Auquel cas, je pencherai plutôt pour un problème dû à la nouvelle organisation du système, dont parlai jbam.

      J’essaie de régler ça au plus vite si tel est le cas, mais n’ayant pas de RPi 2 pour le moment.. Je vais devoir improviser et que quelqu’un teste à ma place éventuellement.

    2. Je viens de tester par moi meme sur mon raspberry, en réalité il y a effectivement un problème dans mon code.
      Je ne m’en étais pas rendu compte. Merci pour l’info, je corrige ça et vous tiens au courant !

    3. Bon OK c’est ridicule, le shebang n’était pas sur la première ligne !!

      Ca marche chez moi maintenant..
      N’oubliez pas de retélécharger raspi-shrink avant de tester 🙂
      Et dites moi si ça marche !?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *