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