跳转至

空间扩容

本文档适用范围:OpenWrt-RpiOpenWrt-Buildbot

本节所述内容适用于以 SD 卡或硬盘为存储介质的设备,如树莓派、NanoPi R2S、X86 设备等。

将本项目 OpenWrt 固件刷入 SD 卡后,SD 卡内 boot 分区所占空间为 64M,root 分区所占空间为 960M,所以:

SD 卡总容量 - (64+960)M ≈ 空闲分区容量

虽然刷入固件的初始状态下空闲分区无法被利用,但在默认情况下,960M 的 root 分区完全能胜任日常使用。

若确有扩容 root 分区的需求,请按下文内容操作。

小心

数据无价,在扩容操作前,请务必备份好 SD 卡内的重要数据。

注意

如确有扩容需求,请尽量在全新刷入固件后立即进行分区扩容操作,在全新刷入状态后进行扩容操作不仅可以避免文件丢失,在一定程度上还可加快分区扩容速度。

ext4 固件

由于未知原因,ext4 固件暂时无法在 Windows 下使用 Diskgenius、PartitionGuru 等磁盘管理工具扩容,所以我们需要在 Linux 环境下对 SD 卡进行扩容操作。

1⃣ 如果你有现成的 Linux 环境,则可以将 SD 卡插入电脑,使用 GParted 工具对 SD 卡的 Root 分区进行扩容;

2⃣ 如果你有空闲的 U 盘,则可以将 Linux 发行版的 Live CD 写入 U 盘,重启至 U 盘中的 Live 环境使用 GParted 工具对 SD 卡进行扩容;

3⃣ 如果以上条件都不满足,则可使用虚拟机软件虚拟 Gparted 的 Live CD,在虚拟机中完成 SD 卡的扩容。

以下内容介绍 (相对最麻烦的) 方法 3⃣ ,方法 1⃣2⃣ 与方法 3⃣ 大同小异,在此不再赘述。

在接下来的内容中,我们使用开源免费的 VirtualBox 来进行 SD 卡的扩容操作,VMWare 下的操作步骤与 VirtualBox 相似,在此也不再赘述。

下载所需文件

(点击各彩色条目即可展开该步骤对应图片)

前往 VirtualBox 官网的下载页面:

https://www.virtualbox.org/wiki/Downloads

下载适用于 Windows 的 VirtualBox 安装包和扩展包:

文件下载到本地后,注意比对文件名中的版本号是否一致。以上图为例,安装包和扩展包的文件名分别为:

VirtualBox-6.1.16-140961-Win.exe

Oracle_VM_VirtualBox_Extension_Pack-6.1.16.vbox-extpack

两文件名中版本号 (6.1.16) 相同,则证明文件下载正确。

接着,我们前往 Gparted 官网的下载页面:

https://gparted.org/download.php

下载适用于 x86_64 设备的 Live CD 映像»

至此,扩容所需文件下载完成。

建立虚拟 GParted Live 环境

(点击各彩色条目即可展开该步骤对应图片)

在 VirtualBox 安装过程中,除安装目录外,不建议对其他选项进行修改操作。

完成 VirtualBox 的安装后,双击刚刚下载好的扩展包,完成对 VirtualBox 扩展包的安装。

接下来的步骤在 VirtualBox 中进行:

1. 虚拟机类型选择为“Linux”,版本选择为“Other Linux (64-bit)” »

2. 内存分配默认的 512M 即可 »

3. 因为我们将在虚拟机中运行 Live 映像,所以不必配置虚拟磁盘 »

4. 选中刚刚创建好的虚拟机,点击“设置”按钮进入详细的虚拟机配置界面 »

5. 在“系统 - 启动项”中,将“光驱”设为唯一启动项并将其移动到第一位 »

6. 注册并应用我们刚刚下载好的 GParted Live CD 文件 »

7. 将 SD 卡装入读卡器插入电脑,在“USB 设备”中,勾选 USB 2.0 选项,点击右侧按钮将 USB 读卡器设备分配给虚拟机 »

8. 回到主界面,启动虚拟机 »

9. 在启动菜单中选择 (默认的) 第一个选项,按下回车键进入 »

10. 默认情况下不需要选择按键布局,故我们直接按下回车键选择默认选项进入 »

11. 输入 “26” 将界面语言选择为“简体中文” »

12. 输入“0”并回车直接进入 X 界面 »

13. 进入图形界面后,将自动启动 Gparted »

14. 右击卷标为“rootfs”的 960M 分区,选择“更改大小/移动” »

15. 拖动手柄调整 rootfs 大小进行扩容,如果你要进行全盘扩容操作,建议在 rootfs 分区前后留出大于 4M 的空间 »

16. 回到 Gparted 主界面,点击“绿色箭头”执行扩容操作 »

17. 扩容中...可能需要 1 分钟或几分钟 »

18. 扩容完成 »

19. 回到主界面查看分区信息,确认分区扩容完毕 »

20. 回到桌面,依次点击“Exit - Shutdown”关机 »

Squashfs 固件

(点击各彩色条目即可展开该步骤对应图片)

对于 squashfs 固件,我们可以在暂未使用的空闲空间上新建一个分区,之后将 overlay 分区中的内容拷贝到这个分区,然后将系统在 overlay 分区的挂载点修改为刚刚新建的分区来进行扩容。

注意

由于 Squashfs 固件的扩容操作涉及到文件迁移,所以请尽量在刷入固件后即进行分区扩容操作。

1. 在“系统 - 软件包”中查看 rootfs 剩余空间为 600M »

2. 在“系统 - 磁盘管理”中找到 SD 卡设备 (/dev/mmcblk0),点击“修改” »

3. 在分区信息中可以看出 SD 卡中有 14.83G 的空闲空间,点击右侧“新建”按钮新建分区 »

4. 分区新建完成,点击“格式化” »

5. 选择 ext4 分区作为新分区的文件系统 »

6. 分区已成功格式化为 ext4 格式 »

7. 进入 OpenWrt 的 TTYD 或 SSH,进行迁移文件操作 »
# 将刚刚新建的 /dev/mmcblk0p3 分区挂载至 /mnt
root@OpenWrt:/# mount /dev/mmcblk0p3 /mnt

# 查看分区挂载情况
root@OpenWrt:/# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0         7:0    0 760.8M  0 loop /overlay
mmcblk0     179:0    0  14.9G  0 disk 
├─mmcblk0p1 179:1    0    64M  0 part /boot
├─mmcblk0p2 179:2    0   960M  0 part /rom
└─mmcblk0p3 179:3    0  13.8G  0 part /mnt

# 将 /overlay 分区下的所有文件拷贝至刚刚建立好的分区内
root@OpenWrt:/# cp -f -a /overlay/. /mnt

# 查看是否拷贝成功
root@OpenWrt:/# ls -a /mnt
.           ..          .fs_state   lost+found  upper       work
root@OpenWrt:/# ls -a /overlay
.          ..         .fs_state  upper      work

# 同步文件
root@OpenWrt:/# sync

# 卸载 /dev/mmcblk0p3 分区
root@OpenWrt:/# umount /mnt
8. 前往“系统 - 挂载点”,点击“生成配置” »

9. 在“挂载点”中我们可以看到刚刚创建好的 ext4 分区 /dev/mmcblk0p3,点击右方“修改” »

10. 在接下来的界面中,“启用此挂载点”并选择“作为外部 overlay 使用”,点击“保存&应用” »

11. 在“系统 - 挂载点”页面下,确认挂载点已启用 (打钩),并确认挂载点为 /overlay,点击下方“保存&应用”,之后重启 OpenWrt »

12. 验证分区扩容成功 »

root@OpenWrt:/# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0         7:0    0 760.8M  0 loop /mnt/loop0
mmcblk0     179:0    0  14.9G  0 disk 
├─mmcblk0p1 179:1    0    64M  0 part /boot
├─mmcblk0p2 179:2    0   960M  0 part /rom
└─mmcblk0p3 179:3    0  13.8G  0 part /overlay

root@OpenWrt:/# mount | grep overlay
/dev/mmcblk0p3 on /overlay type ext4 (rw,relatime)
overlayfs:/overlay on / type overlay (rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work)
overlayfs:/overlay on /opt/docker type overlay (rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work)

root@OpenWrt:/# df -h | grep overlay
/dev/mmcblk0p3           13.5G     42.2M     12.8G   0% /overlay
overlayfs:/overlay       13.5G     42.2M     12.8G   0% /
overlayfs:/overlay       13.5G     42.2M     12.8G   0% /opt/docker

回到页面顶部