diff options
Diffstat (limited to 'recipes-core/fs-init/files/mx6/resizefs.sh')
-rwxr-xr-x | recipes-core/fs-init/files/mx6/resizefs.sh | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/recipes-core/fs-init/files/mx6/resizefs.sh b/recipes-core/fs-init/files/mx6/resizefs.sh new file mode 100755 index 0000000..8f066d1 --- /dev/null +++ b/recipes-core/fs-init/files/mx6/resizefs.sh @@ -0,0 +1,53 @@ +#!/bin/sh +# resize the rootfs ext filesystem size to its full partition size +# usually used on first boot in a postinstall script +# or set in an autostart file from a postinstall script + +DISK="mmcblk0" +PART="mmcblk0p2" + +logger "resizing $PART to fill its full partition size" +# get the disk total size +DISK_SIZE=`cat /sys/block/$DISK/size` + +# get partition start and size +PART_OFF=`cat /sys/block/$DISK/$PART/start` +PART_SIZE=`cat /sys/block/$DISK/$PART/size` + +# calculate size after the partition to the end of disk +SPARE=`expr $DISK_SIZE - $PART_OFF - $PART_SIZE` + +# new filesystem size, it must not overlap the secondary gpt header +# assume 1024kB as GPT size (is 34 sectors) +if [ $SPARE -lt 2048 ] +then + FSSIZE=`expr $PART_SIZE - 2048` +else + FSSIZE=$PART_SIZE +fi + +# resize now + +#reduce I/O load by doing this in STEPSIZE increments +#idea stolen from here: +#https://codereview.chromium.org/551127 + +#start from the current size in blocks of 512 byte, add STEPSIZE on each iteration +STEPSIZE=`expr 64 \* 1024 \* 2` +NEXTSIZE=`df /dev/$PART | grep /dev/root | awk '{print $2}'` +NEXTSIZE=`expr $NEXTSIZE \* 2` +NEXTSIZE=`expr $NEXTSIZE + $STEPSIZE` +while [ $NEXTSIZE -lt $FSSIZE ]; do + FSSIZEMEG=`expr $NEXTSIZE / 2 / 1024`"M" + resize2fs /dev/$PART $FSSIZEMEG + sleep 1 + NEXTSIZE=`expr $NEXTSIZE + $STEPSIZE` +done +FSSIZEMEG=`expr $FSSIZE / 2 / 1024`"M" +resize2fs /dev/$PART $FSSIZEMEG + +#job done, remove it from systemd services +systemctl disable resizefs.service + +logger "resizing $PART finished, new size is $FSSIZEMEG" + |