Mount Raspberry Pi OS Image in Linux

Mount Raspberry Pi OS Image in Linux

Operating systems provides a way to mount file systems from devices or image files. It can be useful to view content of the OS image (.img). This tutorial shows how to mount Raspberry Pi OS image in Linux.

Mount OS image

If not already done, download the Raspberry Pi OS from the official website:

wget -qO raspios.img.xz https://downloads.raspberrypi.org/raspios_lite_armhf_latest

Extract OS image file from archive:

unxz raspios.img.xz

Check the partition table with fdisk command:

fdisk -l raspios.img

Output example:

Disk raspios.img: 1.88 GiB, 2017460224 bytes, 3940352 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: 0x7d5a2870 Device Boot Start End Sectors Size Id Type raspios.img1 8192 532479 524288 256M c W95 FAT32 (LBA) raspios.img2 532480 3940351 3407872 1.6G 83 Linux

Using this information, the following data will be used for mounting Raspberry Pi OS image:

  • Sector size: 512
  • Start position of the img1 partition: 8192
  • Start position of the img2 partition: 532480
  • Number of sectors of the img1 partition: 524288
  • Number of sectors of the img2 partition: 3407872

Calculate mount offsets and assign to variables:

MOUNT_OFFSET_1=$(fdisk -l raspios.img | grep img1 | awk '{print $2 * 512}')
MOUNT_OFFSET_2=$(fdisk -l raspios.img | grep img2 | awk '{print $2 * 512}')

Calculate mount size limits and assign to variables:

MOUNT_SIZE_1=$(fdisk -l raspios.img | grep img1 | awk '{print $4 * 512}')
MOUNT_SIZE_2=$(fdisk -l raspios.img | grep img2 | awk '{print $4 * 512}')

Note: size limit option is necessary when mounting both partitions. The first partition will mount successfully. However, when mounting a second partition, you will get an error message "mount: … overlapping loop device exists". When mounting only one partition, the size limit option is optional.

Create mount point directories:

sudo mkdir -p /mnt/rpi/img1 /mnt/rpi/img2

Mount both partitions using the following commands:

sudo mount -o offset=$MOUNT_OFFSET_1,sizelimit=$MOUNT_SIZE_1 raspios.img /mnt/rpi/img1
sudo mount -o offset=$MOUNT_OFFSET_2,sizelimit=$MOUNT_SIZE_2 raspios.img /mnt/rpi/img2

Check that both partitions are mounted:

ls /mnt/rpi/img1
COPYING.linux bcm2710-rpi-3-b.dtb fixup.dat kernel7l.img LICENCE.broadcom bcm2710-rpi-cm3.dtb fixup4.dat kernel8.img ...
ls /mnt/rpi/img2
bin dev home lost+found mnt proc run srv tmp var boot etc lib media opt root sbin sys usr

Unmount OS image

To unmount both partitions, run the following commands:

sudo umount /mnt/rpi/img1
sudo umount /mnt/rpi/img2

Delete mount point directories:

sudo rm -rf /mnt/rpi

The 2 Comments Found

  1. Avatar
    CarloRn Reply

    Thanks, nice guide.

    I want to add that in my case I had an error while mounting img2:
    mount: /mnt/rpi32/img2: wrong fs type, bad option, bad superblock on /dev/loop41, missing codepage or helper program, or other error.

    I have solved by not specifying a size limit for img2:

    sudo mount -o offset=$MOUNT_OFFSET_2 raspios.img /mnt/rpi/img2

Leave a Comment

Cancel reply

Your email address will not be published.