How to find the type of an img file and mount it?
Solution 1
Try running the command fdisk -l <img file>
. Typically if the .img
files are entire disks from say a KVM VM then they're technically a virtual disk.
Example
I've got a CentOS KVM VM which shows up like so with the file
command:
$ file centostest.img
centostest.img: x86 boot sector; partition 1: ID=0x83, active, starthead 1, startsector 63, 208782 sectors; partition 2: ID=0x8e, starthead 0, startsector 208845, 20755980 sectors, code offset 0x48
Running fdisk
with it:
$ sudo /sbin/fdisk -lu /kvm/centostest.img
last_lba(): I don't know how to handle files with mode 81ed
You must set cylinders.
You can do this from the extra functions menu.
Disk /kvm/centostest.img: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
Units = sectors of 1 * 512 = 512 bytes
Device Boot Start End Blocks Id System
/kvm/centostest.img1 * 63 208844 104391 83 Linux
/kvm/centostest.img2 208845 20964824 10377990 8e Linux LVM
Partition 2 has different physical/logical endings:
phys=(1023, 254, 63) logical=(1304, 254, 63)
If you'd like to mount one of these partitions you can do so as follows:
fdisk (cylinder output)- block-size of 512 bytes and the start-block is 63.
- The offset is 512 * 63 = 32256.
- block-size of 512 bytes and the start-block is 1.
- The offset is 512 * 1 = 512.
So the mount command would be:
in cylinders$ mount -o loop,offset=32256 centostest.img /mnt/tmp
To mount the other partition (512 * 208845 = 106928640):
$ mount -o loop,offset=106928640 centostest.img /mnt/tmp
in sectors
$ mount -o loop,offset=512 centostest.img /mnt/tmp
To mount the other partition (512 * 14 = 7168):
$ mount -o loop,offset=7168 centostest.img /mnt/tmp
NOTE
This will only work if mount can determine the type of filesystem within the "partition" you're attempting to mount. You may need to include -t auto
, or be specific and tell mount
that's it's -t ext4
for example.
References
Solution 2
Use parted
to identify offset values.
root@mysystem:~/# parted myimage.img
GNU Parted 2.3
Using /root/myimage.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) u
Unit? [compact]? B
(parted) print
Model: (file)
Disk /root/myimage.img: 8589934592B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32256B 254983679B 254951424B primary ext3 boot
2 254983680B 1274918399B 1019934720B primary linux-swap(v1)
3 1274918400B 3323013119B 2048094720B primary ext3
4 3323013120B 8587192319B 5264179200B primary ext3
(parted)
Now you have offset values and you can use those to mount filesystems.
# mount -o loop,offset=32256 myimage.img /mnt/disk1
# mount -o loop,offset=1274918400 myimage.img /mnt/disk2
# mount -o loop,offset=3323013120 myimage.img /mnt/disk3
Solution 3
I realize this thread is old but if your system is newer, like Ubuntu 20.04, you could use udiskctl:
udisksctl loop-setup --file something.img
It will create loop devices for the partitions in the img and mount them. Cheers.
Solution 4
Another quite simple way to mount an img file is to use kpartx
tool (from the kpartx
package). The explanation from the kpartx man page (run using sudo/root):
To mount all the partitions in a raw disk image:
kpartx -av disk.img
This will output lines such as:
loop3p1 : 0 20964762 /dev/loop3 63
The loop3p1 is the name of a device file under /dev/mapper which you can use to access the partition, for example to fsck it:
fsck /dev/mapper/loop3p1
Mount that device on /mnt
:
mount /dev/mapper/loop3p1 /mnt
When you're done, you need to remove the devices: kpartx -d disk.img
Solution 5
A modern version of the file
command reports the startsector in a much more convenient way than fdisk or parted:
file $img
Armbian_jw.img: DOS/MBR boot sector; partition 1 : ID=0x83, start-CHS (0x40,0,1), end-CHS (0x3ff,3,32), startsector 8192, 2883584 sectors
This one-liner output can be scripted like this:
startsector=$(file $img | sed -n -e 's/.* startsector *\([0-9]*\),.*/\1/p')
offset=$(expr $startsector '*' 512)
echo $offset
4194304
sudo mount -o loop,offset=$offset $img /mnt
Related videos on Youtube
Luigi
Updated on September 18, 2022Comments
-
Luigi over 1 year
I have to mount a .img file but I don't know what type of .img it is. How can I figure out what type of .img file it is?
# mount -t auto -o ro,loop gmapsupp.img /mnt/iso/ mount: you must specify the filesystem type # file -k gmapsupp.img gmapsupp.img: x86 boot sector, code offset 0x0 #
-
Admin almost 4 yearsIt seems looking at losetup makes a lot of magic unnecessary; see superuser.com/questions/117136/…
-
-
Luigi almost 11 years
# mount -t auto -o ro,loop,offset=512 gmapsupp.img /mnt/iso/
\mount: you must specify the filesystem type
-
Luigi almost 11 years
# fdisk -l gmapsupp.img Disk gmapsupp.img: 0 MB, 0 bytes 255 heads, 63 sectors/track, 0 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System gmapsupp.img1 1 9 65536 0 Empty Partition 1 has different physical/logical endings: phys=(1023, 15, 8) logical=(8, 40, 32) Partition 1 does not end on cylinder boundary.
-
slm almost 11 years@Luigi - there is no guarantee that
-t auto
can identify the type of the partition. You'll have to just try others to see what works. -
Necktwi over 9 yearshow to determine offset for 2nd partition? why 512x14? and my 1st partition is
W95 FAT16 (LBA)
-t vfat
failed to mount my 1st partition. -
slm over 9 years@neckTwi - if you have a follow-up Q it's best to ask it on it's own and reference this one. It's hard to understand what exactly you're asking here.
-
Jakob Bennemann over 9 yearsOne or two-line answers are often considered not that helpful. Consider expanding your explanation of your recommendation or linking to relevant documentation or helpful resources.
-
jack d about 8 yearsDefinitely better with a bit of explanation, the most efficient answer for me here, thanks Fayiz / HalosGhost !
-
user180574 about 7 yearsparted: unrecognized disk label
-
Kirollos Morkos over 3 yearsCan someone improve on this answer? My variant of "file" does not seem to show that additional information. Is there some way to use a commandline flag or compile file in a special way? I only get "data" as a result when running file on that .img file that I have; note that it was part of a .sub file too, so I have a rough clue as to what this was (I think a CD once but re-mounted or perhaps burned by nero by someone else).
-
Kirollos Morkos over 3 yearsWhile that is nice to have, I think a description could be useful; not everyone understands the shell stuff that is going on.
-
Darren Gill almost 3 yearsWorked for me on Ubuntu/Pop_OS! 20.10 -- printed the correct image type for a number of image files that I created from an Android phone's partitions. Thanks!
-
Radu Ursache over 2 yearsthank you, works on raspiban 32 and 64bit as well
-
Nicolas Formichella over 2 yearsThis is the easiest IMO, no math and way to access block devices instead of just data
-
Gaia over 2 yearsby FAR the least error-prone, most straightforward way.