Wednesday, August 29, 2018

mount Raspbian image and modify it


Notes on modifying a raspbian image to add ssh support and
preset for local wifi, so image can be dumped onto sd and be
ready to run.

https://ra...ypi.stackex.../how-can-i-mount-a-raspberry-pi-linux-distro-image

My settings:

fdisk partition info
Device                           Boot  Start      End Sectors  Size Id Type
2018-06-27-...stretch.img1       8192   96663   88472 43.2M  c W95 FAT32 (LBA)
2018-06-27-...stretch.img2      98304 9420799 9322496  4.5G 83 Linux
 
1st partition 512 * 8192 = 4194304
2nd partition 512 * 98204 = 50331648

boot:
mount -v -o offset=4194304 -t vfat 2018-06-27-raspbian-stretch.img /mnt
linux:
mount -v -o offset=50331648 -t ext4 2018-06-27-raspbian-stretch.img /mnt


You can't mount the image as a whole because it actually contains two partitions and a boot sector. However, you can mount the individual partitions in the image if you know their offset inside the file. To find them, examine the image as a block device with fdisk -l whatever.img. The output should include a table like this:
Device         Boot     Start       End  Blocks  Id System
whatever.img1            8192    122879   57344   c W95 FAT32 (LBA)
whatever.img2          122880   5785599 2831360  83 Linux
These are the two partitions. The first one is labelled "FAT32", and the other one "Linux". Above this table, there's some other information about the device as a whole, including:
Units: sectors of 1 * 512 = 512 bytes
We can find the offset in bytes by multiplying this unit size by the Start block of the partition:
  • 1st partition 512 * 8192 = 4194304
  • 2nd partition 512 * 122880 = 62914560
These can be used with the offset option of the mount command. We also have a clue about the type of each partition from fdisk. So, presuming we have directories /mnt/img/one and /mnt/img/two available as mount points:
mount -v -o offset=4194304 -t vfat whatever.img /mnt/img/one
mount -v -o offset=62914560 -t ext4 whatever.img /mnt/img/two
If you get an "overlapping loop" error here, your version of mount requires you to specify the size as well as the offset of the first partition. Unmount that, and use the number of blocks (57344) * 512 (= 29360128):
mount -v -o offset=4194304,sizelimit=29360128 \
    -t vfat whatever.img /mnt/img/one  
The second partition doesn't need a sizelimit since there's nothing after it in the image.
You can now access the two partitions. If you do not intend to change anything in them, use the -r (read-only) switch too. If you do change anything, those changes will be included in the .img file.
Note that the first partition is probably mounted on /boot in the second partition when the system is running.

-30-