Como executar o mkfs em partições de imagem de arquivo sem montar?

5

Estou criando um arquivo vazio ...

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

... em seguida, transformando-o em uma imagem de disco ...

parted -s ${SDCARD} mklabel msdos

... e criando partições nele

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)

Como faço para usar mkfs.ext e mkfs.vfat sem montar esta imagem?

    
por Paul Knopf 06.05.2016 / 20:51

2 respostas

4

Você deseja formatar uma partição em um arquivo de imagem de disco, em vez de todo o arquivo de imagem. Nesse caso, você precisa usar losetup para dizer ao linux para usar o arquivo de imagem como um dispositivo de loopback.

NOTA: losetup requer privilégios de root, portanto, deve ser executado como root ou com sudo. Os dispositivos /dev/loop* que ele usa / cria também requerem privs root para acessar e usar.

por exemplo (como 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 entries 512, sectors 1023 (volumes <=32 MB) , Media descriptor 0xf8, sectors/FAT 1, sectors/track 32, heads 64, serial number 0xfa9e3726, unlabeled, FAT (12 bit)

e, finalmente, desanexar a imagem do dispositivo de loopback:

# losetup -d /dev/loop0

Veja man losetup para mais detalhes.

    
por 07.05.2016 / 04:23
4

Para criar uma imagem com múltiplas partições, uma solução que não requer ferramentas ou acesso root é criar primeiro os sistemas de arquivos e depois concatená-los.

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

Em seguida, execute parted ou fdisk para criar as partições.

Esta abordagem tem a desvantagem de a imagem resultante não ser escassa.

    
por 07.05.2016 / 21:16