Création d’une image disque RAW

Cet article montre comment créer l’image RAW d’un périphérique de stockage de type bloc (comme un disque dure, une clef USB ou encore une carte SD). À terme, cette image peut-être copié sur un périphérique par la commande dd if=image.img of=/dev/sdX, avec /dev/sdX le périphérique cible.
Dans l’exemple de l’article, l’image créée à une taille de 4Gio, avec deux partitions primaires. La première, de 60 Mio, est formaté en FAT32. La seconde, qui utilise le reste de l’espace disponible, est formaté en Ext4.
Cette image est prête à recevoir un système Raspbian personnalisé.

Deux commandes sont disponibles : qemu-img et fallocate. La première commande est présente avec le paquet qemu-utils sous Debian. La seconde est disponible sur une installation Debian de base.
Créons donc une image vierge de 4Gio. Avec la commande qemu-img :

# qemu-img create -f raw test.img 4G

Avec la commande fallocate :

# fallocate -l 4G test.img

C’est maintenant le moment de créer la table des partitions dans ce fichier RAW. Pour ce faire, nous allons utiliser la commande fdisk.

# fdisk test.img

Créons une première partition primaire de 60 Mio.

: n
: p
: 1
: 2048
: +60M

Créons la seconde partition, qui utilise le reste de l’espace disponible.

: n
: p
: 2
: (default)
: (default = dernier secteur)

Modifions le type de la première partition pour être « FAT32″.

: t
: 1
: c

Vérifions nos modifications, puis écrivons les.

: p
Disque loop2 : 4294 Mo, 4294967296 octets
255 têtes, 63 secteurs/piste, 522 cylindres, total 8388608 secteurs
Unités = secteurs de 1 * 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Identifiant de disque : 0x05fff442

Périphérique Amorce  Début        Fin      Blocs     Id  Système
loop2p1               2048     124927      61440      c  W95 FAT32 (LBA)
loop2p2             124928    8388607    4131840     83  Linux
: w

Voilà, l’image contient des partitions propres. Nous allons maintenant créer un périphérique de type bloc avec notre image fraîchement créé dans notre système hôte.

# kpartx -a -v test.img
add map loop2p1 (254:7): 0 122880 linear /dev/loop2 2048
add map loop2p2 (254:8): 0 8263680 linear /dev/loop2 124928

Ici, la commande kpartx crée le périphérique de type bloc loop2 et associe ses deux partitions aux périphériques loop2p1 et loop2p2 dans /dev/mapper.
Formatons ces deux partitions. Attention, elles dépendent des périphériques renvoyés par la commande kpartx.

# mkfs.vfat /dev/mapper/loop2p1
# mkfs.ext4 /dev/mapper/loop2p2

Voilà une image RAW prête à l’emploie. Pour fini, supprimons le périphérique du système.

# kpartx -d test.img