# install dependecies
apt-get install qemu qemu-user-static binfmt-support
# download raspbian image
wget https://downloads.raspberrypi.org/raspbian_latest
# extract raspbian image
unzip raspbian_latest
# extend raspbian image by 1gb
dd if=/dev/zero bs=1M count=1024 >> 2016-05-27-raspbian-jessie.img
# set up image as loop device
losetup /dev/loop0 2016-05-27-raspbian-jessie.img
# check file system
e2fsck -f /dev/loop0p2
#expand partition
resize2fs /dev/loop0p2
# mount partition
mount -o rw /dev/loop0p2 /mnt
mount -o rw /dev/loop0p1 /mnt/boot
# mount binds
mount --bind /dev /mnt/dev/
mount --bind /sys /mnt/sys/
mount --bind /proc /mnt/proc/
mount --bind /dev/pts /mnt/dev/pts
# ld.so.preload fix
sed -i 's/^/#/g' /mnt/etc/ld.so.preload
# copy qemu binary
cp /usr/bin/qemu-arm-static /mnt/usr/bin/
# chroot to raspbian
chroot /mnt /bin/bash
# do stuff...
exit
# revert ld.so.preload fix
sed -i 's/^#//g' /mnt/etc/ld.so.preload
# unmount everything
umount /mnt/{dev/pts,dev,sys,proc,boot,}
# unmount loop device
losetup -d /dev/loop0
Last active
March 24, 2024 14:36
-
-
Save jkullick/9b02c2061fbdf4a6c4e8a78f1312a689 to your computer and use it in GitHub Desktop.
Chroot into Raspberry Pi ARMv7 Image with Qemu
parted
was just the hint I needed. For anyone that wants to resize their image properly, this is how I did it:
First, list the partitions:
$ sudo parted 2016-05-27-raspbian-jessie.img print
Model: (file)
Disk /home/pop_desktop/workspace/raspiblitz_ci/2021-03-04-raspios-buster-arm64.img: 3729MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 4194kB 273MB 268MB primary fat32 lba
2 273MB 3729MB 3456MB primary ext4
Use this to determine the partition number you want, and the "end" of the partition. I wanted partition 2, as that's the home partition that needs to grow.
Then grow the partition like so:
loop=$(losetup -f) # Find the first available loop device
# extend raspbian image by 1gb
dd if=/dev/zero bs=1M count=1024 >> raspios.img
sudo parted raspios.img resizepart 2 4700MB
# set up image as loop device
losetup -P $loop raspios.img
# check file system
e2fsck -y -f ${loop}p2
#expand partition
resize2fs ${loop}p2
In the above example, I changed the "end" of the ext4 partition to 4700MB, roughly increasing it by 1GB.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
As noted above, I used this script with a physical SDCard, so I skipped that step. Looking at it, I think there's no step included to resize the partition.
resize2fs
resizes the ext4 filesystem to the size of the partition, but the partition is not enlarged first AFAIK. The image is expanded, but that data is not automatically part of the last partition. In fact if the disk uses GPT (which is likely nowadays), you need software that will not only resize the partition, but also modify the GPT headers and move their copies which are written at the end of the medium. I think software likeparted
andgdisk
can do this.