前言
因为固件给的空间实在是太小了,随便装几个软件就会出问题,所以强烈建议在安装完成后优先进行磁盘扩容!
磁盘扩容涉及到不同版本的不同操作方法,我们下载使用的版本为 ext4
,另一个版本为 squashfs
。
ext4磁盘扩容
一、关机状态下,直接编辑虚拟机的硬盘容量
二、再次打开OpenWrt,可以看到,即使调整了容量,并不会直接体现在系统里,仍然只有102.33M
三、SSH连接OpenWrt,输入以下命令安装必要软件
opkg update
opkg install block-mount e2fsprogs fdisk blkid vim
各种SSH工具都可以,putty,MobaXterm,tabby等等
实在没有的,打开windows终端,输入
ssh root@10.0.0.2
四、配置磁盘空间
依次输入以下命令:
-
fdisk -l
可以看到
/dev/sda
变为 4GB 了。 -
fdisk /dev/sda
这边输入
m
可以查看帮助,会介绍一些命令用法 -
输入
n
(新建分区)出现3个提示,直接回车即可。
-
输入
p
(打印分区信息),可以看到多了一个sda3
的分区 -
输入
w
(写入分区信息并退出) -
输入
mkfs.ext4 /dev/sda3
(格式化分区) 并复制 UUID -
重启
reboot
。
五、配置fstab
分别执行下面的命令:
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
建议每行命令单独运行,别学我一次性粘贴在里面,可能会漏掉
六、将根目录复制到新的分区下
执行以下命令:
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
七、启用引导
/etc/init.d/fstab enable
/etc/init.d/fstab start
八、重启
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
软件:
opkg update
opkg install cfdisk
然后输入:
cfdisk
打开磁盘管理界面:
这里可以看到,目前一共有三个已有分区,现在新建一个分区:
选中 Free Space
,再选中 New
,输入需要的大小,比如 3G。
接着选择 Write
输入 yes
,完成新分区的创建
选择 Quit
退出
二、格式化分区
使用下面命令格式化分区:
mkfs.ext4 /dev/sda3 #更改为自己的分区
三、挂载新分区
输入命令:
mount /dev/sda3 /mnt/sda3
四、转移到新分区
然后将原来 upper
层中的数据复制到新的分区中:
cp -r /overlay/* /mnt/sda3
五、后台配置
进入OpenWRT后台的【系统】-【挂载点】,点击下方的【挂载点】栏目的【添加】按钮,在【UUID】中找到刚刚的分区 dev/sda3
,【挂载点】选择【作为外部overlay使用】:
六、完成
到这一步,只需要重启 OpenWRT 即可成功扩容。
重启后到 【系统】 -> 【软件包】 可以看到变大后的空间容量。
分区默认会在 OpenWRT 重启后会自动挂载,如果遇到没有挂载的情况,需要编辑
/etc/rc.local
在
exit 0
之前加入一行mount /dev/sda3 /overlay
即可。