Exécution de mkfs sur des partitions d'image de file

Je crée un file vide …

dd if=/dev/zero of=${SDCARD} bs=1 count=0 seek=$(expr 1024 \* ${SDCARD_SIZE}) 

… puis le transformer en image de disque …

 parted -s ${SDCARD} mklabel msdos 

… et en créant des partitions dessus

 parted -s ${SDCARD} unit KiB mkpart primary fat32 ${IMAGE_ROOTFS_ALIGNMENT} $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) parted -s ${SDCARD} unit KiB mkpart primary $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} \+ $ROOTFS_SIZE) 

Comment utiliser mkfs.ext et mkfs.vfat sans monter cette image?

Vous souhaitez formater une partition dans un file d'image disque, plutôt que le file image entier. Dans ce cas, vous devez utiliser losetup pour indiquer à linux d'utiliser le file image comme périphérique de bouclage.

NOTE: losetup nécessite des privilèges root, donc doit être exécuté en tant que root ou avec sudo. Les périphériques /dev/loop* qu'il utilise / crée nécessitent également l'access et l'utilisation des droits root.

par exemple (en tant que root)

 # losetup /dev/loop0 ./sdcard.img # fdisk -l /dev/loop0 Disk /dev/loop0: 1 MiB, 1048576 bytes, 2048 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x54c246ab Device Boot Start End Sectors Size Id Type /dev/loop0p1 1 1023 1023 511.5K c W95 FAT32 (LBA) /dev/loop0p2 1024 2047 1024 512K 83 Linux # file -s /dev/loop0p1 /dev/loop0p1: data # mkfs.vfat /dev/loop0p1 mkfs.fat 3.0.28 (2015-05-16) Loop device does not match a floppy size, using default hd params # file -s /dev/loop0p1 /dev/loop0p1: DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "mkfs.fat", sectors/cluster 4, root ensortinges 512, sectors 1023 (volumes <=32 MB) , Media descriptor 0xf8, sectors/FAT 1, sectors/track 32, heads 64, serial number 0xfa9e3726, unlabeled, FAT (12 bit) 

et, enfin, détacher l'image du dispositif de bouclage:

 # losetup -d /dev/loop0 

Voir man losetup pour plus de détails.

Pour créer une image avec plusieurs partitions, une solution qui ne nécessite pas d'outils de fantaisie ou d'access root consiste à créer d'abord les filesystems, puis à les concaténer.

 truncate -s $IMAGE_ROOTFS_ALIGNMENT disk truncate -s $BOOT_SPACE_ALIGNED part1 mkfs.fat part1 cat part1 >>disk truncate -s $ROOTFS_SIZE part2 mkfs.ext4 part2 cat part2 >>disk 

Exécutez ensuite parted ou fdisk pour créer les partitions.

Cette approche a l'inconvénient que l'image résultante ne sera pas éparse.