扩展 OpenWrt 根分区和文件系统

本文将指导你如何扩展 OpenWrt 的根分区和文件系统。通过以下步骤,你可以充分利用存储空间,从而提升系统性能。

介绍

在某些情况下,OpenWrt 系统的根分区可能没有使用所有可用的存储空间。例如,在设备的存储空间很大时,默认的根分区大小可能不足以支持安装额外的软件包或存储数据。通过本指南,你可以自动识别根分区并将其扩展,以提高系统的存储能力。

特点
  • 支持的镜像类型:该方法支持 ext4squashfs 镜像类型。
  • 自动识别:系统将自动识别当前根分区和文件系统。
  • 扩展能力:能够使用未分配的存储空间扩展根分区和文件系统。
  • 固件升级保留:在固件升级后,扩展脚本会被保留并自动运行。
  • 简单快捷:用户可以通过简单的命令快速完成扩展过程。
方式〇:懒人操作

以使用以下命令合并所有步骤:

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. 更新软件包列表。
    2. 安装 partedlosetupresize2fs
    3. 下载自动化扩展脚本。
    4. 执行下载的脚本。
    5. 手动执行扩展根分区脚本以确保更改生效。

通过上述命令,你可以高效地完成扩展操作,避免了多次输入命令的麻烦。

方式一:自动化操作

对于希望快速完成操作的用户,自动化脚本是最简便的方法。

第一步:安装必要的软件包

在进行扩展之前,需要安装以下工具:

  • parted:用于调整分区大小。
  • losetup:用于设置和管理循环设备。
  • resize2fs:用于扩展文件系统。

步骤:

  1. 打开命令行界面(如通过SSH连接到OpenWrt设备)。

  2. 输入以下命令更新软件包列表并安装必要工具:

    opkg update
    opkg install parted losetup resize2fs
    
第二步:下载并执行自动化扩展脚本
  1. 下载扩展脚本

    在终端中运行以下命令:

    wget -U "" -O expand-root.sh "https://openwrt.org/_export/code/docs/guide-user/advanced/expand_root?codeblock=0"
    
  2. 执行扩展脚本

    输入以下命令来运行下载的脚本:

    . ./expand-root.sh
    

    脚本会自动检测当前的根分区和文件系统,并使用可用的空闲空间进行扩展。

  3. 执行扩展根分区脚本

    完成自动化脚本后,需手动执行以下命令以确保更改生效:

    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根分区和文件系统的扩展。如果在操作过程中遇到任何问题,请随时寻求帮助或查阅相关资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值