
Mounting partitions from a dd image - assafmo
https://assafmo.github.io/2018/05/09/mount-dd.html
======
discreditable
This is doing it the hard way. Make the image a loop device:

    
    
       losetup /dev/loop0 /path/to/your/image.img
    

Now you can use /dev/loop0 like it's a normal disk. If you're not seeing your
partitions (/dev/loop0p1, etc.):

    
    
        partprobe /dev/loop0
    

When you're done, detach the loop device:

    
    
        losetup -d /dev/loop0
    

I use this trick to transparently compress ddrescue images with brtfs:
[https://brashear.me/blog/2017/11/14/how-to-create-a-
compress...](https://brashear.me/blog/2017/11/14/how-to-create-a-compressed-
ddrescue-image/)

~~~
strong_silent_t
Thanks, not OP but that looks useful to me. For context, I've used the
strategy in OP to debug a small linux system running on an SD card, if I have
one version that has a bug and one that doesn't, and I don't know the
difference, I can image them both, mount them and diff the whole system (i.e.
with meld.) And it can be done with the same card over time. I'd like to
figure out how to do this with VM disks as well but I've never had a pressing
need.

~~~
jlgaddis
> _I 'd like to figure out how to do this with VM disks as well but I've never
> had a pressing need._

Everything that you will (probably) need is here:
[http://libguestfs.org](http://libguestfs.org)

If you happen to need something that isn't already included, the APIs make it
pretty easy to build your own tools as well.

Conveniently, those tools are also already packaged up for your distro (unless
you use some esoteric distribution, perhaps).

------
dbolgheroni
OpenBSD uses vnconfig (also FreeBSD; on NetBSD it's vndconfig). An example:

    
    
      # vnconfig vnd0 install63.fs
    

Then you can treat _vnd0_ as if it was a disk:

    
    
      # disklabel vnd0
      # /dev/rvnd0c:
      type: vnd
      disk: vnd device
      label: fictitious
      duid: 138b4f2a2e184426
      flags:
      bytes/sector: 512
      sectors/track: 100
      tracks/cylinder: 1
      sectors/cylinder: 100
      cylinders: 7382
      total sectors: 738240
      boundstart: 1024
      boundend: 737280
      drivedata: 0 
      
      16 partitions:
      #                size           offset  fstype [fsize bsize   cpg]
        a:           736256             1024  4.2BSD   2048 16384 16142 
        c:           738240                0  unused                    
        i:              960               64   MSDOS                    
    

For instance, to mount the 'a' partition:

    
    
      # mount /dev/vnd0a /mnt
    

You can also associate an encryption key with the device. All data written to
the diskimage will then be encrypted.

~~~
floatboth
FreeBSD does not use vnconfig, FreeBSD uses mdconfig:

    
    
        # mdconfig -f smartos-latest-USB.img
        md0
        # gpart list md0
        ...
        scheme: MBR
        Providers:
        1. Name: md0s1
           ...
        # mount -o ro -t msdosfs /dev/md0s1 /mnt
        // (or, use labels)
        # mount -o ro -t msdosfs /dev/msdosfs/SMARTOSBOOT /mnt
    

Or for ISOs, in one line:

    
    
        # mount -t cd9660 /dev/$(mdconfig -f image.iso) /mnt

~~~
jlgaddis
I was just about to correct your correction, because I can quite clearly
recall using _vnconfig_ on FreeBSD.

Apparently that's been a little while, however. According to vnconfig(8):

> _The mdconfig utility first appeared in FreeBSD 5.0 as a cleaner replacement
> for the vn(4) and vnconfig(8) combo._

5.0 was released just over 15 years ago.

------
phaedrus
One time I tried to create a tool to do in-place conversion between Linux
software RAID volumes (e.g. RAID-0 to RAID-1 (assuming data fits), or RAID-1
to RAID-5, etc.) I used disk image files and the loopback device to test it to
avoid having to reformat physical partitions.

Despite reading all of the documentation I could find, and even going so far
as to read kernel source code, I could never get the system to recognize my
striped block data. That is, I tried to generate three files composing a
RAID-5 "by hand", but mdadm would refuse to mount them. I never figured out if
there was some additional id-block I was missing, or if my striping algorithm
was not correct.

------
ckastner
Under Linux, this can also be achieved with kpartx(8).

[https://linux.die.net/man/8/kpartx](https://linux.die.net/man/8/kpartx)

------
rwmj
Or without needing root using guestfish
([http://libguestfs.org/guestfish.1.html](http://libguestfs.org/guestfish.1.html))

    
    
        $ guestfish -a img.dd -m /dev/sda1
        ><fs> ll /
    

guestmount works if you want to mount it on a local directory (implemented
using libguestfs + FUSE).

------
dpedu
I think ZFS has the easiest way to do this sort of thing:

    
    
        # fallocate -l 256M disk.bin
        # zpool create filepool /root/disk.bin
        # zfs set mountpoint=/root/filepool filepool
        # df -h /root/filepool
        Filesystem      Size  Used Avail Use% Mounted on
        filepool        208M     0  208M   0% /root/filepool

~~~
trm42
Sure, ZFS has lots of awesome features, but the point of loopback device lets
you to attach and mount basically any disk image that has kernel or fuse
drivers.

------
theonewolf
You can directly expose the partitions using the tool `kpartx`, which will
create a `loop` device for you:

    
    
      > sudo kpartx -a test.raw
      > lsblk
      NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
      loop0       7:0    0     4G  0 loop
      └─loop0p1 253:0    0     4G  0 part
      > sudo kpartx -d test.raw

------
Ace17
> mount -t -o ro,offset=$((512 _63)) x.dd partition_1

> mount -t -o ro,offset=$((512_96390)) x.dd partition_2

Isn't the mount type "-t" value missing?

~~~
assafmo
Thanks! I missed this. Fixed. :-)

------
pixelbeat__
libguestfs > losetup > fdisk

I.E. libguestfs is safer when dealing with images of unknown origin, and
losetup has inbuilt support now for partition scanning.

Here's an old fdisk/parted wrapper I used to use:

[http://www.pixelbeat.org/scripts/lomount.sh](http://www.pixelbeat.org/scripts/lomount.sh)

------
amelius
Is it also possible to repartition the image with conventional tools?

How about setting a boot flag and writing it back to e.g. an USB stick?

~~~
peterwwillis
Yes, you can use losetup.

    
    
      ~# dd if=/dev/zero of=image.img bs=1M count=100
      ~# LODEVICE=$(losetup --find --show image.img)
      ~# fdisk $LODEVICE
      ~# losetup -d $LODEVICE
    

^ The above creates a 100MB disk image, binds it to a loopback device, runs
fdisk, and then detaches it. I'm not sure how formatting the partition would
work but presumably those tools have an offset option too?

edit: this page explains using offsets for mke2fs and doesn't require losetup:
[https://superuser.com/questions/737072/userspace-
manipulatio...](https://superuser.com/questions/737072/userspace-manipulation-
of-partition-and-disk-images)

also, losetup can now scan the device for partition tables and make partition-
specific loopbacks!
[https://stackoverflow.com/a/15200862](https://stackoverflow.com/a/15200862)

~~~
regularfry
Extlinux on an ext4 partition doesn't need an offset. Or at least didn't when
I wrote this:
[http://www.blackkettle.org/posts/archive/2013-08-19-bootable...](http://www.blackkettle.org/posts/archive/2013-08-19-bootable-
mountable-vm-images/)

