diff mbox

[4/4] board/raspberrypi: auto-expand rootfs on first boot

Message ID 5881659.QqO7LoEYvS@sagittea
State Not Applicable
Headers show

Commit Message

Jérôme Pouiller Aug. 27, 2015, 9:22 p.m. UTC
Hello Benoît,

On Thursday 27 August 2015 11:02:02 Benoît Thébaudeau wrote:
> Hi Vivien, Yann, all,
> 
> On 22/08/2015 22:01, Benoît Thébaudeau wrote:
[...]
> So the initial contents of the unused space on the SD card seem to have an
> influence, and there seems to be a bug somewhere (Linux, resize2fs,
> genext2fs, tune2fs, or lack of call to e2fsck before calling resize2fs but
> this would not be reliable with an online partition).
> 
> Then I retried with a 16-GiB SD card on a Raspberry Pi B, and it was very
> slow too. Same if the resize is performed on a PC. However, it's very quick
> with raspi-config and the latest Raspbian image. The main difference seemed
> to be the block size (4 KiB on Raspbian vs. 1 KiB with mke2img), so I
> hacked mke2img to test with genext2fs -B 4096 and tune2fs -J size=4, but it
> did not make things faster, only the image bigger (about 512 MiB, probably
> the minimal size for 4-KiB blocks). So I don't know which ones, but it's
> probably some ext4 parameters that are having an influence on the resize2fs
> speed here. Any idea?
Yes, I have an idea :-) Did you try sparse_super?

In fact a did nearly same task a few month ago and I found same problem. For 
information, I use following script to fill disk with last partition:

Comments

Benoît Thébaudeau Aug. 28, 2015, 10:36 a.m. UTC | #1
Hi Jérôme,

On 27/08/2015 23:22, Jérôme Pouiller wrote:
> On Thursday 27 August 2015 11:02:02 Benoît Thébaudeau wrote:
>> Hi Vivien, Yann, all,
>>
>> On 22/08/2015 22:01, Benoît Thébaudeau wrote:
> [...]
>> So the initial contents of the unused space on the SD card seem to have an
>> influence, and there seems to be a bug somewhere (Linux, resize2fs,
>> genext2fs, tune2fs, or lack of call to e2fsck before calling resize2fs but
>> this would not be reliable with an online partition).
>>
>> Then I retried with a 16-GiB SD card on a Raspberry Pi B, and it was very
>> slow too. Same if the resize is performed on a PC. However, it's very quick
>> with raspi-config and the latest Raspbian image. The main difference seemed
>> to be the block size (4 KiB on Raspbian vs. 1 KiB with mke2img), so I
>> hacked mke2img to test with genext2fs -B 4096 and tune2fs -J size=4, but it
>> did not make things faster, only the image bigger (about 512 MiB, probably
>> the minimal size for 4-KiB blocks). So I don't know which ones, but it's
>> probably some ext4 parameters that are having an influence on the resize2fs
>> speed here. Any idea?
> Yes, I have an idea :-) Did you try sparse_super?

[...]

Awesome, it works, even if resizing the partition online. Thanks for the tip!

I'll send a patch changing mke2img to allow the use of this option.

Best regards,
Benoît
Benoît Thébaudeau Aug. 28, 2015, 11:15 a.m. UTC | #2
On 28/08/2015 12:36, Benoît Thébaudeau wrote:
> On 27/08/2015 23:22, Jérôme Pouiller wrote:
>> On Thursday 27 August 2015 11:02:02 Benoît Thébaudeau wrote:
>>> Hi Vivien, Yann, all,
>>>
>>> On 22/08/2015 22:01, Benoît Thébaudeau wrote:
>> [...]
>>> So the initial contents of the unused space on the SD card seem to have an
>>> influence, and there seems to be a bug somewhere (Linux, resize2fs,
>>> genext2fs, tune2fs, or lack of call to e2fsck before calling resize2fs but
>>> this would not be reliable with an online partition).
>>>
>>> Then I retried with a 16-GiB SD card on a Raspberry Pi B, and it was very
>>> slow too. Same if the resize is performed on a PC. However, it's very quick
>>> with raspi-config and the latest Raspbian image. The main difference seemed
>>> to be the block size (4 KiB on Raspbian vs. 1 KiB with mke2img), so I
>>> hacked mke2img to test with genext2fs -B 4096 and tune2fs -J size=4, but it
>>> did not make things faster, only the image bigger (about 512 MiB, probably
>>> the minimal size for 4-KiB blocks). So I don't know which ones, but it's
>>> probably some ext4 parameters that are having an influence on the resize2fs
>>> speed here. Any idea?
>> Yes, I have an idea :-) Did you try sparse_super?
> 
> [...]
> 
> Awesome, it works, even if resizing the partition online. Thanks for the tip!
> 
> I'll send a patch changing mke2img to allow the use of this option.

Please apply the patch below before this series in order to avoid the resize
speed issue described above:
http://patchwork.ozlabs.org/patch/511861/

Best regards,
Benoît
diff mbox

Patch

diff --git 1/sdflash.sh 2/sdflash.sh
new file mode 100755
index 0000000..5f9a9d5
--- /dev/null
+++ 2/sdflash.sh
@@ -0,0 +1,48 @@ 
+#!/bin/bash
+#
+# Copy a disk image to sdcard card and resize last partition in order to use
+# whole disk
+#
+
+device=$1
+image=$2
+
+if [ "$device" = "" ]; then
+    echo "Usage: $0 DEVICE IMAGE"
+    echo "Example: $0 /dev/sdd images/disk.img"
+    exit 1
+fi
+
+sfdisk -R $device       || exit 1
+echo "Copying $image to $device"
+dd if=$image of=$device conv=fsync,notrunc || exit 1
+sfdisk -R $device       || exit 1
+for part in 4 3 2 1; do
+    for file in $device$part ${device}p${part}; do
+        if [ -e $file ]; then
+            ID=$(sfdisk --print-id $device $part)
+            if [[ "0x$ID" -eq 0x83 ]]; then
+                e2fsck -f $file
+                [ $? -le 1 ] || exit 1
+                tune2fs -O sparse_super -c 0 -i 0 $file
+                [ $? -eq 0 ] || exit 1
+                e2fsck -yf $file > /dev/null
+                [ $? -le 1 ] || exit 1
+                sleep 1
+                echo ',+,' | sfdisk -L -D -uM -N $part $device
+                [ $? -eq 0 ] || exit 1
+                resize2fs $file
+                [ $? -eq 0 ] || exit 1
+                e2fsck -f $file
+                [ $? -le 1 ] || exit 1
+                exit 0
+            else
+                echo "Unknown partition type"
+                exit 1
+            fi
+        fi
+    done
+done
+echo "Cannot find partition on $device"
+exit 1
+