How can I mount a partition from dd-created image of a block device (e.g. HDD) under Linux?
I have an image of the entire disk created using dd. The disk structure follows:
kent@cow:~$ sudo fdisk -l
Disk /dev/sda: 750.1 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000b8508
Device Boot Start End Blocks Id System
/dev/sda1 * 5 90872 729929303+ 83 Linux
/dev/sda2 90873 91201 2642692+ 5 Extended
/dev/sda5 90873 91201 2642661 82 Linux swap / Solaris
The image was created using:
dd if=/dev/sda of=image750.img
How would I, if it is possible, mount /dev/sda1 from the image so that I'm able to read the contents?
It's not an option to clone the HDD again, I know how to do it if I had only cloned the single partition by itself. I hope it's still possible with the current image.
Solution 1:
Nowadays, there is a better way, no need to use offsets or kpartx anymore:
losetup --partscan --find --show disk.img
mount /dev/loop0p1 /mnt
to free up loop0, use after umount:
losetup -d /dev/loop0
Solution 2:
I ran into this problem today and wanted to update the answers just as a reminder for myself. Instead of calculating the offset on your own, you can use a tool that provides you with mountable devices from a dd image: kpartx
http://robert.penz.name/73/kpartx-a-tool-for-mounting-partitions-within-an-image-file/
http://linux.die.net/man/8/kpartx
In the given case, it would need something like
sudo kpartx -a image750.img
sudo mount /dev/mapper/loop1p1 /mount/point -o loop,ro
where loop1p1 stands for the first partition, loop1p2 for the second, etc.
Solution 3:
You've got the first part: fdisk -l to find the start offset. Take that number, multiply by 512, and you'll get the offset option to mount. So, for sda1 in your case, 5 * 512 = 2560. Then run the mount:
mount -o loop,offset=2560 -t auto /path/to/image.dd /mount/point