--- title: Mounting disk images on linux aliases: /posts/2022-08-06-mounting-disk-images-on-linux summary: > I sometimes create full-disk-images of USB drives or hard drives and in rare cases I have to look into them. This is how I usually do that. date: 2022-08-06T21:02:21+02:00 lastmod: 2024-09-28T23:48:06+0000 categories: [computerstuff] tags: [linux, raspberry-pi] --- Let's assume you created a disk image with `dd` on a linux computer like ```console $ sudo dd if=/dev/sda of=disk.img bs=4M status=progress conv=fsync ``` There are several partitions in that image and we want to access the linux filesystem on it. For reference, I'll bring in some old backup I made from a Raspberry Pi. That backup is taken from a 8GB sdcard, which is 2.6GB compressed with `xz`. When uncompressed, look at the partition table with _fdisk_: ```console $ fdisk -l disk.img Festplatte disk.img: 7,4 GiB, 7948206080 Bytes, 15523840 Sektoren Einheiten: Sektoren von 1 * 512 = 512 Bytes Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes Festplattenbezeichnungstyp: dos Festplattenbezeichner: 0x1b7f4bbb Gerät Boot Anfang Ende Sektoren Größe Kn Typ disk.img1 8192 532479 524288 256M c W95 FAT32 (LBA) disk.img2 532480 15523839 14991360 7,1G 83 Linux ``` We will refer to this output later again. ## Using losetup The output of _fdisk_ is not that important to us, unless we have an unknown disk image that we need to inspect first. I already know the partitions. The first is the FAT32 partition used for UEFI and the second is the root file system. ### Creating and mounting the loop device ```console $ sudo losetup --partscan --find --show disk.img /dev/loop1 ``` The second line is the output of the program. I used losetup already today, so this is not _loop0_ but _loop1_. You may get `/dev/loop0` usually. Mount the new virtual loop device to the directory that you like. This is `~/tmp` in my case. ```console $ sudo mount /dev/loop1p2 tmp ``` ### Removing the loop device ```console $ sudo umount tmp $ sudo losetup -d /dev/loop1 ``` ## Using `fdisk` and `mount` From the output above, we see that `532480` is the starting unit of the linux filesystem in this image file. Further above you see the Units (Einheiten): 1 Unit is 1 sector of 512 Bytes. I use a german speaking computer, so you might look for _Start_ or _Offset_ or _Beginning_---you know what to look for... We calculate the needed offset like: `532480 * 512 = 272629760` And the resulting command is ```console $ sudo mount -o loop,offset=272629760 disk.img tmp/ ``` A remount is simple as ```console $ sudo umount tmp ``` ## When do you need this stuff I often create quick and dirty (big) card images from my Raspberry Pies. They are saved and easy to copy over to another storage (because they are a single file). If you have less space, `dd` is probably not the best method to create a disk backup. `partimage` for example creates images from partitions, but it only saves the used data from that partition. Those images are smaller.