Você pode usar kpartx
para isso. Aqui está uma maneira de criar uma imagem de disco completa.
# create empty image
dd if=/dev/zero of=myvm.img bs=1G count=0 seek=100
# partition the image file with fdisk/gdisk or any other tool
gdisk myvm.img
# make the partitions in the image file available as individual devices
kpartx -a myvm.img
# work with the partitions
./someprogram /dev/mapper/loop0p1
# close the partitions
kpartx -d myvm.img