前言

实操

自动化

1
2
3
4
5
6
7
8
9
10
11
12
# 安装软件包
opkg update
opkg install parted losetup resize2fs blkid

# 下载 expand-root.sh
wget -U "" -O expand-root.sh "https://openwrt.org/_export/code/docs/guide-user/advanced/expand_root?codeblock=0"

# 执行脚本(创建 /etc/uci-defaults/70-rootpt-resize 和 /etc/uci-defaults/80-rootpt-resize 文件,并将它们添加到 /etc/sysupgrade.conf 文件中,以便在系统升级后重新运行)
. ./expand-root.sh

# 调整根分区和文件系统大小(将调整分区大小,重启,调整文件系统大小,然后再次重启)
sh /etc/uci-defaults/70-rootpt-resize

手动

手动安装脚本(复制粘贴)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 配置启动脚本
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
2
3
4
5
6
# 安装软件包
opkg update
opkg install parted losetup resize2fs blkid

# 扩展根分区 / 文件系统
sh /etc/uci-defaults/70-rootpt-resize

重新运行脚本

如果根分区已被扩展且expand-root.sh脚本之前已运行过,则默认情况下再次运行该脚本将不会成功。要执行额外的根分区扩展,您需要移除之前的脚本标志:

1
2
rm /etc/rootpt-resize
rm /etc/rootfs-resize

打开/etc/sysupgrade.conf文件并删除以下几行:

1
2
/etc/uci-defaults/70-rootpt-resize
/etc/uci-defaults/80-rootfs-resize

这样可以确保系统不再认为脚本已经执行过,然后您可以重新运行脚本。