OpenWrt 路由空间不够?试试扩容 overlay 的根
之前我分享的扩容 overlay 是复制原本 OpenWrt 的 /overlay 分区并且挂载作为外部 overlay 使用,但在最新的 OpenWrt/LEDE 以及基于 LEDE 编译的 CatWrt 也是扩容不了的,虽然说有的扩容成功了但成功率不高,这次分享的总结于 B 站 UP 主 韩风 Talk 视频中的第一种方法,成功率也比较高因为第二种我在固件里没有刷新成功容量所以就放弃了。
首先非常感谢韩风提供的方法,有需要可以查看他的视频我这里就做一个总结。
在 v22.11 固件中就有 100M 可用空间强烈不推荐小白作为安装 OpenWrt 的必选项!是有门槛的而且数据无价有需要可以先做备份再进行操作,甚至你可以给虚拟机创建一个快照。
以前的靠作为外部 overlay 的可以参考我这期博客 OpenWrt 扩容 overlay 分区教程
准备
首先打开终端 SSH 连接到软路由,这里我使用 CatWrt EFI 启动固件自带的 ttyd
先看看软路由的分区情况 fdisk -l
root@CatWrt:~# fdisk -l
Disk /dev/loop0: 184.88 MiB, 193855488 bytes, 378624 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
GPT PMBR size mismatch (852511 != 7129087) will be corrected by write.
Disk /dev/sda: 3.4 GiB, 3650093056 bytes, 7129088 sectors
Disk model: VMware Virtual I
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 0EAC8D5A-F014-DB49-E8EB-FA846A473B00
Device Start End Sectors Size Type
/dev/sda1 512 33279 32768 16M Linux filesystem
/dev/sda2 33280 852479 819200 400M Linux filesystem
/dev/sda128 34 511 478 239K BIOS boot
Partition table entries are not in disk order.
可以看到 EFI 版固件要比传统模式下多出一个 239k 的 /dev/sda128,但中止扇区还是在 819200,记住这个中止扇区,后续很多细节都是围绕这个中止点!
下面进行分区工作,首先需要了解你的固件是否需要升级,在 CatWrt 里我们强烈建议预留 200M 空闲空间这个空间在现在看需要在 /dev/sda2 后面预留了
首先进入分区管理工具,输入 fdisk /dev/sda
这里需要注意一下,扇区不能一定重复!
随后输入 n
新建一个分区
root@CatWrt:~# fdisk /dev/sda
Welcome to fdisk (util-linux 2.38).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
GPT PMBR size mismatch (852511 != 7129087) will be corrected by write.
This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.
Command (m for help): _
这里让我们选择主要分区还是扩展分区,我们选择主要输入 p
(这里我没遇到,不是所有人都有)
Select (default p): _
这里让我们选择一个分区,因为这个 OpenWrt 没有进行过任何分区操作,这里就选择为 3
Partition number (3-127, default 3): _
这里让我们给 /dev/sda3
分区一个开始的扇区,这里按照未来升级的需要,我们将 /dev/sda2 分区的中止扇区加上 409600;
也就是 2048 x 200 即 200M 分区,从中止点 (≈852479) 860000 到 1269600 预留给升级,也就是我们要从 1270000 扇区开始分区。
这里把 1270000 填上
First sector (852480-7129054, default 854016): _
新分区的中止分区我们这里可以直接用我们最熟悉的 g 单位开始了,这里创建建议填 +2g 起
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1270000-7129054, default 7127039): +2g
这里输入 w
回车就算是保存成功了
Created a new partition 3 of type 'Linux filesystem' and of size 2 GiB.
Command (m for help): w
The partition table has been altered.
Syncing disks.
root@CatWrt:~#
这样就创建成功了可以看看分区是否成功 fdisk -l
root@CatWrt:~# fdisk -l
Disk /dev/loop0: 184.88 MiB, 193855488 bytes, 378624 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sda: 3.4 GiB, 3650093056 bytes, 7129088 sectors
Disk model: VMware Virtual I
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 0EAC8D5A-F014-DB49-E8EB-FA846A473B00
Device Start End Sectors Size Type
/dev/sda1 512 33279 32768 16M Linux filesystem
/dev/sda2 33280 852479 819200 400M Linux filesystem
/dev/sda3 1270000 5464063 4194064 2G Linux filesystem
/dev/sda128 34 511 478 239K BIOS boot
Partition table entries are not in disk order.
格式化
到这里分区工作就完成了,不过还需要格式化为 ext4,输入 mkfs.ext4 /dev/sda3
并回车
root@CatWrt:~# mkfs.ext4 /dev/sda3
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 524258 4k blocks and 131072 inodes
Filesystem UUID: ff7a2c4a-fd56-42ad-a9ac-45ade1c5819a
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
挂载
这样就算完成了,接下来到 LuCi 网页后台上操作,以此进入 系统 - 挂载点 找到 挂载点 处点击 添加
UUID 处选择刚刚创建好的分区我这里是 ff7a2c4a-fd56-42ad-a9ac-45ade1c5819a (/dev/sda3, 2047 MB)
挂载点选择 作为根文件系统使用(/)
打上启用此挂载点的勾 √
刚刚我们点击了挂载点选择根文件系统使用,在 根目录准备 中弹出一串代码,这可不是出问题了我们需要把这些指令稍做修改让根文件复制到挂载点里
这里我已经修改好了,其实对比一下就知道只是样例中的 sda1 改成了 sda3,这里直接把这些命令打开终端给输上去就可以了
mkdir -p /tmp/introot
mkdir -p /tmp/extroot
mount --bind / /tmp/introot
mount /dev/sda3 /tmp/extroot
tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf -
umount /tmp/introot
umount /tmp/extroot
reboot
最后一个命令是重启需要手动按一下回车。如果在接近结尾出现了和我不同的如出现了(find 啥的字样)不同以下字样请确保你没有跳过步骤导致错误或者固件问题导致。
按照本篇是一定可以扩容成功的。
……
./www/uuandriod.png
./www/uuios.png
./boot/
./home/
./home/ftp/
./run/
./run/docker/
./run/docker/plugins/
./run/mount/
./run/blkid/
./run/blkid/blkid.tab
./run/blkid/blkid.tab.old
root@CatWrt:~# umount /tmp/introot
root@CatWrt:~# umount /tmp/extroot
root@CatWrt:~# reboot
重启过后这里最简单的方式肯定是查看软件包里是否还有多余的空间,打开 系统 - 软件包 中如图扩容成功,如果你没扩容成功还是建议删掉 sda3 后重置配置 OpenWrt
Docker
关于 Docker 分区,这里就说就不太细了可以结合上述内容,也参考之前扩容 overlay 的那期博文,这里也可以按照 fdisk 进行操作而不是 cfdisk
输入 fdisk /dev/sda
新建一个分区 n
选择主要分区还是扩展分区,我们选择主要输入 p
(这里我没遇到,不是所有人都有)
Select (default p): _
选择一个分区,这里选 4
因为扩容 (/dev/sda3) 后中止扇区在 5464063 我们这里设置开始扇区为 5466000
回车
下一步则是填写需要多少空间给 Docker 分区用,这里选择 +10g
这里输入 w
回车就算是保存成功了
输入 mkfs.ext4 /dev/sda4
格式化 Docker 分区(/dev/sda4)
前往系统 - 挂载点,添加刚刚创建好的分区 /dev/sda4
挂载点为 作为 Docker 数据分区使用 (/opt)
勾选 启用挂载点 √
保存并应用,建议重启一下即可看到 Docker 分区已经被扩容成功了。