前言

因为固件给的空间实在是太小了,随便装几个软件就会出问题,所以强烈建议在安装完成后优先进行磁盘扩容!

磁盘扩容涉及到不同版本的不同操作方法,我们下载使用的版本为 ext4 ,另一个版本为 squashfs

ext4磁盘扩容

一、关机状态下,直接编辑虚拟机的硬盘容量

二、再次打开OpenWrt,可以看到,即使调整了容量,并不会直接体现在系统里,仍然只有102.33M

三、SSH连接OpenWrt,输入以下命令安装必要软件

1
2
opkg update
opkg install block-mount e2fsprogs fdisk blkid vim

各种SSH工具都可以,putty,MobaXterm,tabby等等

实在没有的,打开windows终端,输入ssh root@10.0.0.2

四、配置磁盘空间

依次输入以下命令:

  1. fdisk -l

    可以看到 /dev/sda 变为 4GB 了。

  2. fdisk /dev/sda

    这边输入 m 可以查看帮助,会介绍一些命令用法

  3. 输入 n (新建分区)

    出现3个提示,直接回车即可。

  4. 输入 p (打印分区信息),可以看到多了一个 sda3 的分区

  5. 输入 w (写入分区信息并退出)

  6. 输入 mkfs.ext4 /dev/sda3 (格式化分区) 并复制 UUID

  7. 重启 reboot

五、配置fstab

分别执行下面的命令:

1
2
3
4
5
6
7
8
9
uci add fstab mount
uci set fstab.@mount[-1].uuid=UUID #UUID改为你上面得到的值
uci set fstab.@mount[-1].options=rw,sync,noatime
uci set fstab.@mount[-1].fstype=ext4
uci set fstab.@mount[-1].enabled_fsck=1
uci set fstab.@mount[-1].enabled=1
uci set fstab.@mount[-1].target=/
uci set fstab.@mount[-1].device=/dev/sda3
uci commit fstab

建议每行命令单独运行,别学我一次性粘贴在里面,可能会漏掉

六、将根目录复制到新的分区下

执行以下命令:

1
2
3
4
5
6
7
mkdir /mnt/sda3
mount /dev/sda3 /mnt/sda3
mkdir -p /tmp/cproot
mount --bind / /tmp/cproot
tar -C /tmp/cproot -cvf - . | tar -C /mnt/sda3 -xf -
umount /tmp/cproot
umount /mnt/sda3

七、启用引导

1
2
/etc/init.d/fstab enable
/etc/init.d/fstab start

八、重启

1
reboot

九、进入系统查看分区信息

成功扩容。

上述扩容需要自行更改的一个是磁盘挂载的盘符,我这边是 /dev/sda3 ,另一个是 UUID,其他照抄就行。

squashfs磁盘扩容

什么是 overlay

OpenWRT 一般使用的文件系统是 SquashFS ,这个文件系统的特点就是:只读

一个只读的文件系统要怎么做到保存设置和安装软件的呢?这里就是使用 /overlay 的分区, overlay 顾名思义就是覆盖在上面一层的意思。虽然原来的文件不能修改,但把修改的部分放在 overlay 分区上,然后映射到原来的位置,读取的时候就可以读到修改过的文件了。

为什么要用这么复杂的方法呢? OpenWRT 当然也可以使用 EXT4 文件系统,但使用 SquashFS + overlay 的方式有一定的优点。

SquashFS 是经过压缩的,在路由器这种小型 ROM 的设备可以放下更多的东西。

OpenWRT 的恢复出厂设置也要依赖于这个方式。在你重置的时候,它只需要把 overlay 分区清空就可以了,一切都回到了刚刷进去的样子。

如果是 EXT4 文件系统,就只能够备份每个修改的文件,在恢复出厂设置的时候复制回来,十分复杂。

当然,SquashFS + overlay 也有它的缺点:

修改文件的时候会占用更多的空间。首先你不能够删除文件,因为删除文件实际上是在 overlay 分区中写入一个删除的标识,反而占用更多的空间。
另外在修改文件的时候相当于增加了一份文件的副本,占用了双份的空间。

步骤

一、创建新分区

首先,关闭OpenWrt,将你的硬盘大小调整为需要的大小(以4G为例):

打开OpenWrt,通过SSH连接,安装 cfdisk 软件:

1
2
opkg update
opkg install cfdisk

然后输入:

1
cfdisk

打开磁盘管理界面:

这里可以看到,目前一共有三个已有分区,现在新建一个分区:

选中 Free Space ,再选中 New ,输入需要的大小,比如 3G。

接着选择 Write

输入 yes,完成新分区的创建

选择 Quit 退出

二、格式化分区

使用下面命令格式化分区:

1
mkfs.ext4 /dev/sda3 #更改为自己的分区

三、挂载新分区

输入命令:

1
mount /dev/sda3 /mnt/sda3

四、转移到新分区

然后将原来 upper 层中的数据复制到新的分区中:

1
cp -r /overlay/* /mnt/sda3

五、后台配置

进入OpenWRT后台的【系统】-【挂载点】,点击下方的【挂载点】栏目的【添加】按钮,在【UUID】中找到刚刚的分区 dev/sda3,【挂载点】选择【作为外部overlay使用】:

六、完成

到这一步,只需要重启 OpenWRT 即可成功扩容。

重启后到 【系统】 -> 【软件包】 可以看到变大后的空间容量。

分区默认会在 OpenWRT 重启后会自动挂载,如果遇到没有挂载的情况,需要编辑 /etc/rc.local

exit 0 之前加入一行 mount /dev/sda3 /overlay 即可。