Comment faire une image réduite de votre carte SD?

J’ai récemment eu à partager une distribution d’une image de Raspberry.
Celle-ci, à la base était sur une carte de 16go et de ce fait l’image obtenue fait également 16Go.
Il est ensuite très difficile de la partager. Dans cette article, j’explique comment passer de 16Go à 590Mo.
Je tiens à remercier F5NLG pour son aide sur ce sujet…

Ce que vous devez avoir

  • Un PC sous linux
  • Quelques connaissances en ligne de commandes
  • Une image non optimisée (monimage.img par exemple).

    Pour faire l’image de votre carte SD vous avez plusieurs solutions:
    Soit utiliser Win32 Disk Imager
    Soit en ligne de commande:
Emplacement selon lecteur de carte SD, nom selon votre choix
 sudo dcfldd if=/dev/sdb2 of=/home/spotnik/RpispotnikV3.img
 dcfldd if=/dev/mmcblk0 of=spotnik-2.0_jessie_opi.img

Soit avec rpi-clone
….

Créer un périphérique virtuel avec une image

GParted est une excellente application qui peut très bien gérer les tables de partition et les systèmes de fichiers.
Dans ce tutoriel, nous utiliserons GParted pour réduire le système de fichiers (et sa partition associé dans la table de partition).

GParted fonctionne sur des périphériques, et non sur des fichiers images directement .
C’est pourquoi nous devons d’abord créer un périphérique virtuel pour l’image.
Nous faisons cela en utilisant la fonctionnalité loop sous Linux.

Nous devons dans un premier temps activer le loopback:

$ sudo modprobe loop

Nous demandons un périphérique virtuel libre:

$ sudo losetup -f

Vous obtiendrez le chemin de votre périphérique virtuel, par exemple: /dev/loop9.

Nous devons maintenant associé l’image avec le périphérique virtuel:

$ sudo losetup /dev/loop7 myimage.img

Maintenant le périphérique situé sur /dev/loop9 représente l’image myimage.img.
Nous voulons accéder aux partitions qui se trouvent sur l’image, nous devons donc demander au noyau de les charger aussi.

$ sudo partprobe /dev/loop9

Cela devrait nous donner le périphérique /dev/loop9p1, qui représente la première partition de myimage.img. Nous n’en n’avons pas besoin directement, mais GParted lui oui.

Redimensionner la partition avec GParted

Maintenant non devons charger le périphérique dans GParted:

$ sudo gparted /dev/loop9

Vous devriez avoir une image comme ci-dessous:

Voila ce que nous voyons:

  • Il y a deux partitions
  • La partition de Boot
  • La partition avec notre sytème sous linux.

Nous souhaitons redimensionner la partition avec etiquette svxcardRRF.

Sélectionner donc la partition et cliquer sur Resize/Move (3ème icône).
Vous devriez avoir une fenêtre comme ci-dessous:

Vous réduisez au maximum et laisser un petit peut de blanc (200Mo).

Il suffit ensuite d’appliquer les modifications (V vert) pour effectuer l’opération:

Maintenant, nous n’avons plus besoin du périphérique, on le déconnecte avec la commande suivante:

$ sudo losetup -d /dev/loop9

Optimisation de l’image

Nous avons toutes les données importantes en début de l’image, il est temps d’enlever cette partie non allouée.
Nous devrons d’abord savoir où se termine notre partition et où commence la partie non allouée. Pour obtenir ses informations on utilise fdisk:

$ fdisk -l myimage.img

Voila ce que j’ai eu comme résultat :

  • La partition termine au block 568247 (colonne Fin)
  • La taille des blocks est de 512 bytes.

Nous utiliserons ces chiffres dans le reste de l’exemple. La taille de bloc (512) est souvent le même, mais le bloc de fin (568247) sera différent pour vous.
Les nombres signifient que la parition se termine sur l’octet 568247 * 512 du fichier.
Après cet octet vient la partie non allouée.
Seuls les 568247 * 512 premiers octets seront utiles pour notre image.

Ensuite, nous réduisons le fichier image à une taille qui peut simplement contenir la partition.
Pour cela, nous utiliserons la commande truncate.
Avec la commande truncate, vous devez fournir la taille du fichier en octets.
Le dernier bloc était 568247 et les numéros de bloc commencent à 0. Cela signifie que nous avons besoin de (568247 + 1) * 512 octets.
C’est important, sinon la partition ne s’adaptera pas à l’image.
Alors maintenant, nous utilisons truncate avec les nos données:

$ truncate --size=$[(568247+1)*512] lenomdevotreimage.img

Nous obtenons une image de environ 2giga soit 8 x moins que l’image d’origine après cette opération.

En compressant le fichier img obtenu avec 7zip l’image finale pèse 590Mo.

Vous pouvez maintenant partager ou sauvegarder votre image de petite taille.

Pour l’utiliser, vous devez décompresser votre fichier 7zip, on obtient alors un fichier IMG et on grave cette image avec Win Disk Imager par exemple.

Vous pouvez recevoir un email dès la parution d’un article sur le Blog F8ASB.COM, entrez votre mail sur la fenêtre à droite et cliquer sur abonnement. Tous les articles en 1 clic ICI

Ce contenu a été publié dans informatique, radioamateur, Raspberry, spotnik2hmi, Svxlink, avec comme mot(s)-clé(s) , , , , , , , , , , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

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

Time limit is exhausted. Please reload CAPTCHA.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.