Cet article donne toutes les commandes afin de manipuler un fichier contenant l’image d’un disque-dur complet. Souvent les fichiers ont l’extension .img. On peut également le générer depuis un disque physique comme ceci :

dd bs=8192 if=/dev/sda of=dump.img

Prenons un exemple concret : l’image officielle Debian Wheezy ARM de développement du Raspberry Pi fait 2GB et est quasi remplie. Voici comment l’agrandir à 4GB. Fichier disponible ici ou dans la section download du site officiel.

J’utilise l’outil parted, plutôt que fdisk pour manipuler le fichier. Fdisk est moins facile à utiliser pour les offset.

Affichage du contenu du fichier image :

mini2:/var/www/public/System/Linux/ARM# parted  2012-12-16-wheezy-raspbian.img
GNU Parted 2.3
Using /var/www/public/System/Linux/ARM/2012-12-16-wheezy-raspbian.img
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) print
Model:  (file)
Disk /var/www/public/System/Linux/ARM/2012-12-16-wheezy-raspbian.img: 1940MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
1      4194kB  62,9MB  58,7MB  primary  fat16        lba
2      62,9MB  1940MB  1877MB  primary  ext4

(parted) quit

On va maintenant ajouter 2GB(environ…), 8192 x 236800 octets, de plus à ce fichier afin d’avoir la place pour étendre la partition:

mini2:/var/www/public/System/Linux/ARM# ls -l 2012-12-16-wheezy-raspbian.img
-rw-r–r– 1 root    root    1939865600  6 févr. 01:02 2012-12-16-wheezy-raspbian.img
mini2:/var/www/public/System/Linux/ARM# dd bs=8192 count=236800 if=/dev/zero >> 2012-12-16-wheezy-raspbian.img
236800+0 enregistrements lus
236800+0 enregistrements écrits
1939865600 octets (1,9 GB) copiés, 51,7546 s, 37,5 MB/s
mini2:/var/www/public/System/Linux/ARM# ls -l 2012-12-16-wheezy-raspbian.img
-rw-r–r– 1 root root 3879731200 11 févr. 23:01 2012-12-16-wheezy-raspbian.img

On voit donc que le fichier a bien été étendu.

On ouvre le fichier avec parted, on passe l’affichage en octet (Byte) et on affiche la table de partition :

mini2:/var/www/public/System/Linux/ARM# parted 2012-12-16-wheezy-raspbian.img
GNU Parted 2.3
Using /var/www/public/System/Linux/ARM2012-12-16-wheezy-raspbian.img
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) unit B
(parted) print
Model:  (file)
Disk /var/www/public/System/Linux/ARM/2012-12-16-wheezy-raspbian.img: 3879731200B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start      End          Size         Type     File system  Flags
1      4194304B   62914559B    58720256B    primary  fat16        lba
2      62914560B  1939865599B  1876951040B  primary  ext4

(parted)

La partition qui doit être maintenant étendue est la numéro 2, de type EXT4.

Il faut commencer par la supprimer. Oui, c’est étrange, mais il faut garder à l’idée que la manipulation de la table des partitions ne touche jamais les données des partitions. C’est flippant, mais faire ceci :

(parted) rm 2

Maintenant il faut créer la partition avec la taille étendue. Les valeurs initiales de la table de partition ci-dessus vont servir. La partition commence au même endroit et fini au dernier octet de l’image (longueur totale 3879731200 – 1) :

(parted) mkpart primary ext4 62914560B 3879731199B

On contrôle le tout et on en fini avec parted :

(parted) print
Model:  (file)
Disk /var/www/public/System/Linux/ARM/2012-12-16-wheezy-raspbian.img: 3879731200B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start      End          Size         Type     File system  Flags
1      4194304B   62914559B    58720256B    primary  fat16        lba
2      62914560B  3879731199B  3816816640B  primary  ext4

(parted) quit

Maintenant que le fichier .img possède une taille étendue et une table de partition en conséquence, il faut étendre le système de fichier ext4 qui n’occupe pas tout l’espace disponible.

On commence par rendre la partition visible du système d’exploitation en utilisant un interface « loopback » afin de la manipuler :

mini2:/var/www/public/System/Linux/ARM# losetup -f –show -o 62914560 2012-12-16-wheezy-raspbian.img
/dev/loop0

On contrôle la partition et si tout ne se passe pas bien, c’est que l »étape d’avant a eu un problème :

mini2:/var/www/public/System/Linux/ARM# e2fsck /dev/loop0
e2fsck 1.41.12 (17-May-2010)
/dev/loop0 : propre, 67480/237568 fichiers, 388619/931840 blocs

On lance ensuite le redimensionnement de la partition :

mini2:/var/www/public/System/Linux/ARM# resize2fs -f  /dev/loop0
resize2fs 1.41.12 (17-May-2010)
En train de retailler le système de fichiers sur /dev/loop0 à 931840 (4k) blocs.
Le système de fichiers /dev/loop0 a maintenant une taille de 931840 blocs.

On contrôle la partition de nouveau :

mini2:/var/www/public/System/Linux/ARM# e2fsck /dev/loop0
e2fsck 1.41.12 (17-May-2010)
/dev/loop0 : propre, 67480/237568 fichiers, 388619/931840 blocs

On monte et test la partition :

mini2:/var/www/public/System/Linux/ARM# mount /dev/loop0 /mnt
mini2:/var/www/public/System/Linux/ARM# ls /mnt
bin  boot  dev  etc  home  lib  lost+found  media  mnt  opt  proc  root  run  sbin  selinux  srv  sys  tmp  usr  var
mini2:/var/www/public/System/Linux/ARM# touch /mnt/tmp/toto
mini2:/var/www/public/System/Linux/ARM# ls -l /mnt/tmp/toto
-rw-r–r– 1 root root 0 12 févr. 00:04 /mnt/tmp/toto

Rien n’est vrillé … 🙂

On démonte et supprime l’interface loopback :

mini2:/var/www/public/System/Linux/ARM# umount /mnt
mini2:/var/www/public/System/Linux/ARM# losetup -d /dev/loop0

A travers ce billet vous avez les clés pour comprendre comment manipuler des tables de partitions et les partitions. Amusez-vous !

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s