本文将指导你如何扩展 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
。 - 下载自动化扩展脚本。
- 执行下载的脚本。
- 手动执行扩展根分区脚本以确保更改生效。
通过上述命令,你可以高效地完成扩展操作,避免了多次输入命令的麻烦。
方式一:自动化操作
对于希望快速完成操作的用户,自动化脚本是最简便的方法。
第一步:安装必要的软件包
在进行扩展之前,需要安装以下工具:
- 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
执行后,系统会重启以应用更改。
方式二:手动操作
对于对命令行操作感兴趣的用户,手动步骤可以帮助你深入了解整个过程。
第一步:配置启动脚本
手动操作涉及创建两个脚本,分别用于扩展根分区和文件系统。这些脚本将在系统启动时自动执行。
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根分区和文件系统的扩展。如果在操作过程中遇到任何问题,请随时寻求帮助或查阅相关资料。