Rapsberry Pi - retailler le fichier img

Vous avez une procédure de configuration ou un conseil pour configurer un matériel particulier, partagez votre expérience dans cette partie.
Avatar de l’utilisateur
le Manchot Masqué
Administrateur du site
Messages : 420
Inscription : lun. 26 mai 2008, 21:05
Distribution : Debian, Ubuntu
Niveau : Moitié plein !
Localisation : Guebwiller

Rapsberry Pi - retailler le fichier img

Message par le Manchot Masqué » jeu. 01 sept. 2016, 20:45

Astuce originale trouvée sur http://raspberrypi.stackexchange.com/qu ... file-size/

Le contexte

Après avoir récupéré l'image de la Ubuntu Mate sur https://ubuntu-mate.org/download/ pour l'installer sur mon Rpi2, j'ai donc voulu l'installer sur ma carte micro-sd comme indiqué sur le site de la Mate :

Code : Tout sélectionner

apt-get install gddrescue xz-utils
unxz ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img.xz
ddrescue -D --force ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img /dev/sdx
avec sdx = sdc dans mon cas. Et là, c'est le drame :

Code : Tout sélectionner

# ddrescue -D --force ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img /dev/sdc
GNU ddrescue 1.19
Press Ctrl-C to interrupt
rescued:     7892 MB,  errsize:       0 B,  current rate:     655 kB/s
   ipos:     7892 MB,   errors:       0,    average rate:    5293 kB/s
   opos:     7892 MB, run time:   24.85 m,  successful read:       0 s ago
Copying non-tried blocks... Pass 1 (forwards)
ddrescue: Write error: No space left on device
Mince : pas assez de place sur ma carte qui est pourtant sensée être une 8Go... Réflexe 1 : essayer de comprendre l'erreur en vérifiant le système de fichier par acquis de conscience :

Code : Tout sélectionner

fsck.ext4 /dev/sdc2
e2fsck 1.42.13 (17-May-2015)
La taille du système de fichiers (selon le superbloc) est de 1949440 blocs
La taille physique du périphérique est de 1910272 blocs
Le superbloc ou la table des partitions est peut-être corrompue !
Arrêter<o>? oui
Il y a effectivement un problème : l'image officielle prévue pour le RPi est trop grande pour ma carte (peut-être aussi que ma carte à des secteurs HS, n'étant plus, il est vrai, de première jeunesse...).
Et là le réflexe windowsien primaire voudrait qu'on se jette sur le net pour aller fissa acheter une nouvelle carte plus grande ! Pas de chance pour les commerciaux : notre GNU/Linux a tout ce qu'il faut pour pallier le problème !
On commence par utiliser gparted pour retailler la partition /dev/sdc2 et laisser environ 300Mo d'espace vide côté droit sur /dev/sdc2 :

Code : Tout sélectionner

losetup /dev/loop0 ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img
partprobe /dev/loop0
gparted /dev/loop0
Une fois les changements appliqués dans gparted, c'est

Code : Tout sélectionner

# losetup -d /dev/loop0
# fdisk -lu ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img 
Disque ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img : 7,5 GiB, 8053063680 octets, 15728640 secteurs
Unités : sectors of 1 * 512 = 512 octets
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x343d2bfe

Périphérique                                      Amorçage  Start      Fin Secteurs  Size Id Type
ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img1 *          2048   133119   131072   64M  c W95 FAT32 (LBA)
ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img2          133120 15042559 14909440  7,1G 83 Linux
Ce qui nous intéresse ici est le dernier secteur 14909440. Un petit

Code : Tout sélectionner

truncate --size=$[(14909440+1)*512] ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img
Et notre nouvelle image est prête à être envoyée sur la carte SD. On refait donc la commande ddrescue ci-dessus et on obtient au final :

Code : Tout sélectionner

Finished
qui nous dit que tout s'est bien passé !
Il est clair qu'un petit script qui lirait la taille réellement disponible sur la carte SD, calculerait la taille maxi de la partition /dev/sdc2, et appliquerait les opération en conséquence, serait un plus non négligeable pour les débutants...

Répondre