Accessing a Disk Image File
A handy computer tool is the loop device. The loop device is used to mount files as file systems.
In the house network is a collection of image files from disks. All of the disk images are files. All are backups of some kind. Some of the images are for historical references. Some are partition images and some are full hard disk images. Some are floppy disk images.
The image files of full hard disks and floppies can be copied to respective physical media with the dd
command. Hard disk partition images can be copied the same way but only to a disk partition of the same or larger size. Or image files can be mounted and files within those file systems can be copied.
That is fine and dandy except most of the time all that is desired is browsing or finding files. This happens a couple times a year with the historical images.
The important tool is the losetup
command. This command is used to configure and control loop devices.
Accessing a floppy disk image is straightforward:
losetup -f losetup /dev/loop0 floppy.img mount -o ro /dev/loop0 /mountpoint
Likewise for a hard disk partition image:
losetup -f losetup /dev/loop0 partition.img mount -o ro /dev/loop0 /mountpoint
Accessing a partition on a full disk image requires a few more steps. Disks cannot be mounted. Only partitions can be mounted. To mount a partition in a full disk image file requires knowing where the partition begins inside the image file.
The first two steps remain the same:
losetup -f losetup /dev/loop0 disk.img
At that point disk tools such as fdisk
can be used to view the image file just like a physical hard disk. The fdisk -l
command will reveal the needed information to mount a partition. Important is knowing the disk sector size and starting sector of the desired partition.
The fdisk -l
command lists the partitions using /dev/loop0
as part of the partition device name.
Here is a snapshot of a 20 GB hard disk that was used in a 486 computer to dual boot Windows for Workgroups (WFWG) 3.11 and Slackware 11.0:
Disk /dev/loop0: 18.65 GiB, 20020396032 bytes, 39102336 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x0009d558 Device Boot Start End Sectors Size Id Type /dev/loop0p1 63 996029 995967 486.3M 6 FAT16 /dev/loop0p2 996030 1044224 48195 23.5M 83 Linux /dev/loop0p3 1044225 39102209 38057985 18.1G 5 Extended /dev/loop0p5 1044288 3148739 2104452 1G 82 Linux swap /dev/loop0p6 3148803 11534669 8385867 4G 83 Linux /dev/loop0p7 11534733 13639184 2104452 1G 83 Linux /dev/loop0p8 13639248 15743699 2104452 1G 83 Linux /dev/loop0p9 15743763 17848214 2104452 1G 83 Linux /dev/loop0p10 17848278 19952729 2104452 1G 83 Linux /dev/loop0p11 19952793 32531624 12578832 6G 83 Linux /dev/loop0p12 32531688 34636139 2104452 1G 83 Linux /dev/loop0p13 34636203 39102209 4466007 2.1G 83 Linux
To mount any partition in this hard disk image file, multiply the sector size by the starting sector. For example, to mount the FAT16 partition — in this case the original MS-DOS and WFWG 3.11 partition, multiply 512 * 63 = 32256
.
To mount that partition:
mount -o ro,loop,offset=32256 disk.img /mountpoint
A good idea is avoiding inadvertent changes because these images are archived for historical purposes. The -o ro
option mounts the partition as read-only. Additional protection is copying the disk image file to a different location and working with the copy. Another option is configuring the loop device read-only.
Posted: Tutorial Tagged: General
Category:Next: Booting a 486 from a CD
Previous: Setting a System Wakeup Time