Linux – How to create virtual block devices from file?


  • Let's have unknown disk drive uncompressed raw image (created for example by dd if=/dev/sda of=image) in single file.
  • If we knew the disk layout, we could mount particular partitions from the file as the loop devices via skipping some offsets.
  • Let's suppose we don't know the layout. Can we somehow "mount" the whole disk drive image, which process would create virtual block devices according to the disk layout? For example having 2 partitions in the image would result in creating 3 devices (/dev/sdx, /dev/sdx1, /dev/sdx2). We could then mount such devices as usual.

Best Answer

  • After some more research I have found, there are at least two methods to test:

    1. According to this post, kpartx is applicable tool.
      • Unfortunately it didn't work on Arch Linux for me
      • It's from AUR: yaourt multipath-tools-git, seems to be not well supported/finished and ended up with errors like:

        device-mapper: reload ioctl on loop0p1 failed: No such device

      • Can be at least used to list the embedded partitions: kpartx -l image
      • EDIT: According to this post, it seems to be obsolete and the preferred method is the following one.
    2. According to this post, losetup can be used.
      • Firstly it didn't work: losetup /dev/loop0 image (missing the devices for particular partitions).
      • Trying again using additional -P option did the work: losetup -d /dev/loop0, losetup -P /dev/loop0 image and /dev/loop0pX devices were created.
      • These devices are then mountable as expected, like mount /dev/loop0p3 /mnt/x -t ntfs