2

I'm experimenting with mounting the Raspbian .img and adding code/files and then repacking. The purpose of this is to be able to create custom distros for projects (rather than making clones of the SD cards using dd).

I have got the .img file mounting based on this.

However, I very quickly run out of space on the partition (I think there is something like 400mb of free space out of the gate). And so i'd like to resize the partition.

I have tried a few things so far:

fdisk

First, adding bits to the end of the file with

dd if=/dev/zeros bs=512k count=1000 >> 2018-06-27-raspbian-stretch-lite.img

and then running:

fdisk 2018-06-27-raspbian-stretch-lite.img

delete the old partition and create a new partition from the start of the original partition to the end (the end is now longer because the .img has been extended)

When I flash an SD card with this img I get a kernel panic.

qemu-img

I resize the .img file directly with:

qemu-img resize 2018-06-27-raspbian-stretch-lite.img 2.8G

This seems to work but when I make an SD card and run it on a PI, it says "resizing sd-card" the first time it boots.

This isn't too bad but I think in an ideal world I would have control over this process and understand it a little better.

EDIT: So, running this actually only extends the .img file size but did not give me more space when I mounted the disk img.

In my mind the fdisk mechanism should work and/or is ideal and a better understanding of this process would be great!

sabjorn
  • 21
  • 5
  • Fiddling with `fdisk` will only modify the partition table - to resize the partition you need to use `resize2fs` – Milliways Aug 23 '18 at 20:34
  • see https://raspberrypi.stackexchange.com/questions/37739/ubuntu-mate-not-using-all-its-storage/37744#37744 – Milliways Aug 23 '18 at 20:44
  • @Milliways thanks! This is excellent! So, will I run these steps on the `.img` file or on `/dev/loop0`? – sabjorn Aug 25 '18 at 03:27
  • The link was just an example of `resize2fs` use - it is intended to run on the Pi itself, but (with appropriate changes) could be used on an image. You need to adjust partitions first `gparted` is probably easier if you have an appropriate machine to run it on. I have posted examples of a script to adjust images which run from command line. `fdisk` is a bit difficult to script, `parted` may be better. – Milliways Aug 25 '18 at 14:10
  • total success. Ran `resize2fs` on `/dev/loop0` after running `losetup`. Works like a charm. – sabjorn Aug 26 '18 at 19:05

2 Answers2

1

If you like to be completely flexible with partitions you can backup a Raspbian image for example into a tar archive. Then you can setup your partitions as you like. You can restore the tar archive to partitions of any size as long as it fits into it with its disk usage. There is no problem to backup from a 32 GB SD Card and restore it on a 8 GB card. This could be interesting if you have one installation to copy to many different SD Cards. How to do this you can look at Howto prepare a SD card from a tar archive.

Ingo
  • 40,606
  • 15
  • 76
  • 189
0

Use following commands:

sudo apt-get install gparted
sudo losetup /dev/loop0 /path/to/imagefile.img
sudo partprobe /dev/loop0
sudo gparted /dev/loop0

GParted will be able to resize partitions and the included filesystem in one go. Best of all, it is a graphical program. If you want a commandline program, use GNU parted which incidentially uses the same backend code as GParted.

flakeshake
  • 6,085
  • 1
  • 11
  • 33