K2DLS
April 4, 2025, 7:14am
1
I suspect that the automated procedure documented to expand the filesystem is breaking 24.10.0 images.
This procedure (https://openwrt.org/docs/guide-user/advanced/expand_root ) works fine on 23.05.5 but an attended sysupgrade to 24.10.0 failed on me, leaving my system unaccessible.
I then decided to do a fresh install of 24.10.0. Everything worked fine, until I installed the referenced scripts via the suggested automated process:
# Install packages
opkg update
opkg install parted losetup resize2fs
# Download and run expand-root.sh
wget -U "" -O expand-root.sh "https://openwrt.org/_export/code/docs/guide-user/advanced/expand_root?codeblock=0"
. ./expand-root.sh
I suspect some fatal incompatability with 24.10.0.
If someone has a 24.10.0 system that they can risk trashing, can you please install and reboot and advise if you too are unable to connect over the network?
Hoping to rule this out as the issue...
What make/model device did you perform the filesystem expansion on?
If this is a RPi, then yes, you need to changed the cmdline.txt file too.
Edit the cmdline.txt to say root=/dev/mmcblk0p2 instead of root=PARTUUID=661a1cf7-02. The resize script should work fine afterwards.
1 Like
We could potentially update the script on that page with the following
Wonder what sets the root= to the partition id. I have this every time I sysupgrade, it reverts back after I changed it. I use the scripts too. I can't see where the script would update this.
Edit
1st and 6th result looks interesting.
Google suggests partuuid is based on the sector start/end so changes when you resize the partition. Could perhaps get the new partuuid and replace it in the cmdline.txt with something like
NEW_UUID=`blkid ${ROOT_DISK}p${ROOT_PART} | sed -n 's/.*PARTUUID="\([^…
It should update the UUID and should work on all devices. Even if the UUID remains the same, it'll just update the existing ID.
May avoid these issues going forward
Adding
NEW_UUID=`blkid ${ROOT_DISK}p${ROOT_PART} | sed -n 's/.*PARTUUID="\([^"]*\)".*/\1/p'`
sed -i "s/PARTUUID=[^ ]*/PARTUUID=${NEW_UUID}/" /boot/cmdline.txt
after line 12 in 70-rootpt-resize
post what the file should look like, and I'll update the wiki.
1 Like
# Configure startup scripts
cat << "EOF" > /etc/uci-defaults/70-rootpt-resize
if [ ! -e /etc/rootpt-resize ] \
&& type parted > /dev/null \
&& lock -n /var/lock/root-resize
then
ROOT_BLK="$(readlink -f /sys/dev/block/"$(awk -e \
'$9=="/dev/root"{print $3}' /proc/self/mountinfo)")"
ROOT_DISK="/dev/$(basename "${ROOT_BLK%/*}")"
ROOT_PART="${ROOT_BLK##*[^0-9]}"
parted -f -s "${ROOT_DISK}" \
resizepart "${ROOT_PART}" 100%
mount_root done
touch /etc/rootpt-resize
NEW_UUID=`blkid ${ROOT_DISK}p${ROOT_PART} | sed -n 's/.*PARTUUID="\([^"]*\)".*/\1/p'`
sed -i "s/PARTUUID=[^ ]*/PARTUUID=${NEW_UUID}/" /boot/cmdline.txt
reboot
fi
exit 1
EOF
cat << "EOF" > /etc/uci-defaults/80-rootfs-resize
if [ ! -e /etc/rootfs-resize ] \
&& [ -e /etc/rootpt-resize ] \
&& type losetup > /dev/null \
&& type resize2fs > /dev/null \
&& lock -n /var/lock/root-resize
then
ROOT_BLK="$(readlink -f /sys/dev/block/"$(awk -e \
'$9=="/dev/root"{print $3}' /proc/self/mountinfo)")"
ROOT_DEV="/dev/${ROOT_BLK##*/}"
LOOP_DEV="$(awk -e '$5=="/overlay"{print $9}' \
/proc/self/mountinfo)"
if [ -z "${LOOP_DEV}" ]
then
LOOP_DEV="$(losetup -f)"
losetup "${LOOP_DEV}" "${ROOT_DEV}"
fi
resize2fs -f "${LOOP_DEV}"
mount_root done
touch /etc/rootfs-resize
reboot
fi
exit 1
EOF
cat << "EOF" >> /etc/sysupgrade.conf
/etc/uci-defaults/70-rootpt-resize
/etc/uci-defaults/80-rootfs-resize
EOF
Will updating the codeblock on the wiki also update - https://openwrt.org/_export/code/docs/guide-user/advanced/expand_root?codeblock=0
EDIT: it did
probably doesn't matter, but the /boot/cmdline.txt
is only used by the RPi ?
on all other platforms, the file have no function ...
ideally, the existence of the file should be checked, and only if it exists, updated.
Maybe
# Configure startup scripts
cat << "EOF" > /etc/uci-defaults/70-rootpt-resize
if [ ! -e /etc/rootpt-resize ] \
&& type parted > /dev/null \
&& lock -n /var/lock/root-resize
then
ROOT_BLK="$(readlink -f /sys/dev/block/"$(awk -e \
'$9=="/dev/root"{print $3}' /proc/self/mountinfo)")"
ROOT_DISK="/dev/$(basename "${ROOT_BLK%/*}")"
ROOT_PART="${ROOT_BLK##*[^0-9]}"
parted -f -s "${ROOT_DISK}" \
resizepart "${ROOT_PART}" 100%
mount_root done
touch /etc/rootpt-resize
if [ -e /boot/cmdline.txt ]
then
NEW_UUID=`blkid ${ROOT_DISK}p${ROOT_PART} | sed -n 's/.*PARTUUID="\([^"]*\)".*/\1/p'`
sed -i "s/PARTUUID=[^ ]*/PARTUUID=${NEW_UUID}/" /boot/cmdline.txt
fi
reboot
fi
exit 1
EOF
cat << "EOF" > /etc/uci-defaults/80-rootfs-resize
if [ ! -e /etc/rootfs-resize ] \
&& [ -e /etc/rootpt-resize ] \
&& type losetup > /dev/null \
&& type resize2fs > /dev/null \
&& lock -n /var/lock/root-resize
then
ROOT_BLK="$(readlink -f /sys/dev/block/"$(awk -e \
'$9=="/dev/root"{print $3}' /proc/self/mountinfo)")"
ROOT_DEV="/dev/${ROOT_BLK##*/}"
LOOP_DEV="$(awk -e '$5=="/overlay"{print $9}' \
/proc/self/mountinfo)"
if [ -z "${LOOP_DEV}" ]
then
LOOP_DEV="$(losetup -f)"
losetup "${LOOP_DEV}" "${ROOT_DEV}"
fi
resize2fs -f "${LOOP_DEV}"
mount_root done
touch /etc/rootfs-resize
reboot
fi
exit 1
EOF
cat << "EOF" >> /etc/sysupgrade.conf
/etc/uci-defaults/70-rootpt-resize
/etc/uci-defaults/80-rootfs-resize
EOF
1 Like
K2DLS
April 4, 2025, 12:38pm
9
It is indeed an RPi CM4 based system.
system
Closed
April 14, 2025, 7:19pm
12
This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.