本文将指导你如何扩展 OpenWrt 的根分区和文件系统。通过以下步骤,你可以充分利用存储空间,从而提升系统性能。
介绍
在某些情况下,OpenWrt 系统的根分区可能没有使用所有可用的存储空间。例如,在设备的存储空间较大时,默认的根分区大小可能不足以支持安装额外的软件包或存储数据。
本指南将帮助你自动识别根分区并将其扩展,以提高系统的存储能力。
特点
- 支持的镜像类型:该方法支持
ext4
和squashfs
镜像类型。 - 自动识别:系统将自动识别当前根分区和文件系统。
- 扩展能力:能够使用未分配的存储空间扩展根分区和文件系统。
- 固件升级保留:在固件升级后,扩展脚本会被保留并自动运行。
- 简单快捷:用户可以通过简单的命令快速完成扩展过程。
方式〇:懒人操作
通过以下命令合并所有步骤:
opkg update && opkg install parted losetup resize2fs && \
wget -U "" -O expand-root.sh "https://openwrt.org/_export/code/docs/guide-user/advanced/expand_root?codeblock=0" && \
. ./expand-root.sh && \
sh /etc/uci-defaults/70-rootpt-resize
说明:
- 该命令会执行以下操作:
- 更新软件包列表。
- 安装
parted
、losetup
和resize2fs
。 - 下载自动化扩展脚本。
- 运行下载的脚本。
- 手动执行扩展根分区脚本以确保更改生效。
通过此命令,你可以高效完成扩展操作,避免多次输入命令的麻烦。
方式 1:自动化操作
对于希望快速完成操作的用户,自动化脚本是最简便的方法。
第一步:安装必要的软件包
在进行扩展之前,需要安装以下工具:
- parted:用于调整分区大小。
- losetup:用于设置和管理循环设备。
- resize2fs:用于扩展文件系统。
操作步骤:
-
打开命令行界面(如通过SSH连接到OpenWrt设备)。
-
输入以下命令更新软件包列表并安装必要工具:
opkg update opkg install parted losetup resize2fs
第二步:下载并执行自动化扩展脚本
-
下载扩展脚本:
wget -U "" -O expand-root.sh "https://openwrt.org/_export/code/docs/guide-user/advanced/expand_root?codeblock=0"
-
执行扩展脚本:
. ./expand-root.sh
脚本会自动检测当前的根分区和文件系统,并使用可用的空闲空间进行扩展。
-
执行扩展根分区脚本:
sh /etc/uci-defaults/70-rootpt-resize
该命令确保更改生效,系统将重启以应用扩展。
方式 2:手动操作
对于熟悉命令行操作的用户,可以按照以下步骤手动扩展根分区和文件系统。
第一步:配置启动脚本
手动操作涉及创建两个脚本,分别用于扩展根分区和文件系统。这些脚本将在系统启动时自动执行。
1. 创建扩展根分区的脚本
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 调整根分区大小至 100%
parted -f -s "${ROOT_DISK}" resizepart "${ROOT_PART}" 100%
# 重新挂载根文件系统
mount_root done
# 创建标志文件,表示根分区已经扩展
touch /etc/rootpt-resize
# 重启系统以应用更改
reboot
fi
exit 1
EOF
2. 创建扩展根文件系统的脚本
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##*/}"
# 获取 overlay 文件系统的设备
LOOP_DEV="$(awk -e '$5=="/overlay"{print $9}' /proc/self/mountinfo)"
# 如果 LOOP_DEV 为空,分配一个可用的 loop 设备
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
3. 确保脚本在固件升级后保留
运行以下命令,将这两个脚本添加到系统升级配置文件中:
cat << "EOF" >> /etc/sysupgrade.conf
/etc/uci-defaults/70-rootpt-resize
/etc/uci-defaults/80-rootfs-resize
EOF
第二步:手动执行扩展
1. 扩展根分区
执行扩展根分区脚本:
sh /etc/uci-defaults/70-rootpt-resize
系统会自动重启以应用更改。
总结
无论选择 自动化脚本 还是 手动操作,扩展完成后,OpenWrt 系统将能够使用更多的存储空间。这对于安装更多软件包或存储更多数据非常重要。
- 自动化操作:适合希望快速完成任务的用户,操作简单。
- 手动操作:适合对整个过程感兴趣或希望定制化操作的用户。
希望这篇指南能帮助你顺利完成 OpenWrt 根分区和文件系统的扩展操作。如果遇到问题,请随时寻求帮助或查阅相关资料。