Une carte SD type pour la raspberry pi doit avoir au minimum deux partitions :
On va commencer par créer un fichier vierge (rempli de caractères NULL) de type bloc, de taille 2Go, avec la commande linux dd.
Maintenant, Il faut associer un périphérique de boucle avec notre image précédemment créé, grâce à la commande losetup.
Nous voila avec une association entre notre périphérique et notre fichier, on va créer une table de partitions et les partitions pour notre fichier image, pour cela, nous allons utiliser la commande fdisk.
Et pour la partition du système de fichiers :
Pour afficher le résultat de nos actions :
Nous avons 2 partitions vierges, typées (une en W95 FAT32 et une autre en linux), il nous reste plus qu'à sauvegarder puis quitter l'utilitaire fdisk.
Puisque nous sommes sur un fichier typé disque et non pas sur une vraie carte SD, une erreur apparaît lors de l'enregistrement, mais à ne pas prendre en compte dans notre cas.
A ce moment là, les partitions ne sont pas explicitement présentes sur notre distribution, ce qui veut dire que si on exécute la commande :
On ne verra pas nos deux partitions : /dev/loop0p1 et /dev/loop0p.
L'utilitaire kpartx va créer un mapping des périphériques en fonction de la table de partition donnée :
Maintenant si on ré-itère la commande :
Nous visualisons bien que nos deux partitions sont présentes sur le système.
Il va falloir les formater, pour cela nous allons utiliser les utilitaires mkfs.vfat et mkfs.ext4.
Pour formater la partition Fat32, la commande va être la suivante :
Pour formater la partition Linux en Ext4, la commande va être la suivante :
Pour accéder à ces deux partitions, on va finalement les monter avec l'utilitaire mount.
Pour utiliser le fichier, il va falloir démonter le périphérique de boucle associé à celui-ci, dans l'ordre, cela va nous donner :
Notre carte SD virtuelle est maintenant prête ....
Dans un prochain billet, nous verrons son utilisation.
- Partition de boot de type Fat32 amorçable, ou se trouveront les fichiers nécessaires pour initialiser le système.
- Partition de système de fichiers de type Ext4, ou se trouvera le système de fichiers (Logique ;)).
- dd : Convertir un fichier en le copiant.
- losetup : activer et contrôler les périphériques de boucles.
- fdisk ou cfdisk : manipulateur de tables de partitions pour Linux.
- kpartx : créer un mapping des périphériques à partir des tables de partitions.
- mkfs.vfat et mkfs.ext4 : créer un système de fichiers linux.
- mount et umount : monter/démonter un système de fichiers linux.
On va commencer par créer un fichier vierge (rempli de caractères NULL) de type bloc, de taille 2Go, avec la commande linux dd.
# dd if=/dev/zero of=fake_sd_card.img bs=1024 count=2000000 2000000+0 enregistrements lus 2000000+0 enregistrements écrits 2048000000 octets (2,0 GB) copiés, 86,1476 s, 23,8 MB/s Paramètres: -> if : fichier d'entrée. -> of : fichier de sortie. -> bs : nombre d'octets écrits en une fois. -> count : nombres de blocs à écrire.
Maintenant, Il faut associer un périphérique de boucle avec notre image précédemment créé, grâce à la commande losetup.
# sudo losetup -f /dev/loopX -> -f : pour connaître le premier périphérique de boucle disponible. -> X : le numéro du périphérique de boucle disponible. # sudo losetup /dev/loop0 fake_sd_card.img Périphérique boucle : /dev/loop0
Nous voila avec une association entre notre périphérique et notre fichier, on va créer une table de partitions et les partitions pour notre fichier image, pour cela, nous allons utiliser la commande fdisk.
# sudo fdisk /dev/loop0 Commande (m pour l'aide): n (ajouter une nouvelle partition) Commande d'action e étendue p partition primaire (1-4) p Numéro de partition (1-4, par défaut 1): (Touche ENTRER) Utilisation de la valeur par défaut 1 Premier secteur (2048-3999999, par défaut 2048): (Touche ENTRER) Utilisation de la valeur par défaut 2048 Dernier secteur, +secteurs or +taille{K,M,G} (2048-3999999, par défaut 3999999): +75M Commande (m pour l'aide): t (modifier l'identifiant de système de fichier d'une partition) Partition sélectionnée 1 Code Hexa (taper L pour lister les codes): c Type système de partition modifié de 1 à c (W95 FAT32 (LBA)) Commande (m pour l'aide): a (bascule le drapeau d'amorce) Numéro de partition (1-4): 1
Et pour la partition du système de fichiers :
Commande (m pour l'aide): n (ajouter une nouvelle partition) Commande d'action e étendue p partition primaire (1-4) p Numéro de partition (1-4, par défaut 2): (Touche ENTRER) Utilisation de la valeur par défaut 2 Premier secteur (155648-3999999, par défaut 155648): (Touche ENTRER) Utilisation de la valeur par défaut 155648 Dernier secteur, +secteurs or +taille{K,M,G} (155648-3999999, par défaut 3999999): (Touche ENTRER) Utilisation de la valeur par défaut 3999999
Pour afficher le résultat de nos actions :
Commande (m pour l'aide): p (affiche la table de partition) Disque /dev/loop0 : 2048 Mo, 2048000000 octets 255 têtes, 63 secteurs/piste, 248 cylindres, total 4000000 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 : 0x29d14150 Périphérique Amorce Début Fin Blocs Id Système /dev/loop0p1 * 2048 155647 76800 c W95 FAT32 (LBA) /dev/loop0p2 155648 3999999 1922176 83 Linux
Nous avons 2 partitions vierges, typées (une en W95 FAT32 et une autre en linux), il nous reste plus qu'à sauvegarder puis quitter l'utilitaire fdisk.
Commande (m pour l'aide): w (écrire la table sur le disque et quitter)
Puisque nous sommes sur un fichier typé disque et non pas sur une vraie carte SD, une erreur apparaît lors de l'enregistrement, mais à ne pas prendre en compte dans notre cas.
A ce moment là, les partitions ne sont pas explicitement présentes sur notre distribution, ce qui veut dire que si on exécute la commande :
# ls -al /dev
On ne verra pas nos deux partitions : /dev/loop0p1 et /dev/loop0p.
L'utilitaire kpartx va créer un mapping des périphériques en fonction de la table de partition donnée :
# sudo kpartx -a -v /dev/loop0 add map loop0p1 (253:0): 0 153600 linear /dev/loop0 2048 add map loop0p2 (253:1): 0 3844352 linear /dev/loop0 155648
Maintenant si on ré-itère la commande :
# ls -al /dev/mapper drwxr-xr-x 2 root root 100 2012-06-20 15:05 ./ drwxr-xr-x 16 root root 4420 2012-06-20 15:05 ../ crw------- 1 root root 10, 236 2012-06-18 16:47 control lrwxrwxrwx 1 root root 7 2012-06-20 15:05 loop0p1 -> ../dm-0 lrwxrwxrwx 1 root root 7 2012-06-20 15:05 loop0p2 -> ../dm-1
Nous visualisons bien que nos deux partitions sont présentes sur le système.
Il va falloir les formater, pour cela nous allons utiliser les utilitaires mkfs.vfat et mkfs.ext4.
Pour formater la partition Fat32, la commande va être la suivante :
# sudo mkfs.vfat -F 32 /dev/mapper/loop0p1
Pour formater la partition Linux en Ext4, la commande va être la suivante :
# sudo mkfs.ext4 /dev/mapper/loop0p2 mke2fs 1.41.14 (22-Dec-2010) Étiquette de système de fichiers= Type de système d'exploitation : Linux Taille de bloc=4096 (log=2) Taille de fragment=4096 (log=2) « Stride » = 0 blocs, « Stripe width » = 0 blocs 120240 i-noeuds, 480544 blocs 24027 blocs (5.00%) réservés pour le super utilisateur Premier bloc de données=0 Nombre maximum de blocs du système de fichiers=494927872 15 groupes de blocs 32768 blocs par groupe, 32768 fragments par groupe 8016 i-noeuds par groupe Superblocs de secours stockés sur les blocs : 32768, 98304, 163840, 229376, 294912 Écriture des tables d'i-noeuds : complété Création du journal (8192 blocs) : complété Écriture des superblocs et de l'information de comptabilité du système de fichiers : complété
Pour accéder à ces deux partitions, on va finalement les monter avec l'utilitaire mount.
# sudo mkdir -p /media/boot # sudo mkdir -p /media/rootfs # sudo mount /dev/mapper/loop0p1 /media/boot # sudo mount /dev/mapper/loop0p2 /media/rootfs
Pour utiliser le fichier, il va falloir démonter le périphérique de boucle associé à celui-ci, dans l'ordre, cela va nous donner :
# sudo umount /media/boot # sudo umount /media/rootfs # sudo kpartx -d -v /dev/loop0 del devmap : loop0p2 del devmap : loop0p1 # sudo losetup -d /dev/loop0
Notre carte SD virtuelle est maintenant prête ....
Dans un prochain billet, nous verrons son utilisation.
Merci pour ce tuto...
RépondreSupprimer