6. 存储管理¶
6.1. SD卡扩容¶
由于在镜像生成时,用户空间的大小就已经固定了,为了照顾使用小容量SD卡用户能够烧录镜像, 我们提供的镜像用户空间容量有所控制,扣除系统和预装软件占用的空间,剩余空间也能满足用户安装很多软件。
但是使用大容量SD卡的用户,有很大一部分存储空间无法被利用,这是一种极大的浪费, 好在我们可以通过新建分区的方法使用这一部分空间。
由于squashfs和ext4两种文件系统的特性,在squashfs扩容时无法扩大安装程序的空间,而ext4可以, 接下来我们以两种不同的文件系统为例,分别讲解他们的扩容过程。
我们使用ttyd终端来进行扩容操作。
6.1.1. 查看sd卡信息¶
我们先来查看一下存储设备的详细信息。
1 | fdisk -l
|

我们可以看到,当前sd卡的设备号是 /dev/mmcblk0,他的总存储空间是14.84GiB。 已经存在mmcblk0p1和mmcblk0p2两个分区。
输入下面的命令,进入cfdisk工具进行后续操作。mmcblk0为对应存储设备的设备号。
1 | cfdisk /dev/mmcblk0
|

6.1.2. 新建分区¶
通过上下方向键,选中大小为11.2G且没有分区的空间 ,然后使用左右方向键选中 New 选项,按Enter键。

确定新建分区的容量大小,可以自己修改,这里我们选择默认的最大值,按Enter键。

确定新建分区的类型,默认[primary],按Enter键确认。

左右方向键选中 Write 选项,按Enter键将设置的参数写入。

会提示是否确认写入刚刚的配置参数,输入 yes ,按Enter键确认写入。

左右方向键选中 Quit 选项,按Enter键退出cfdisk工具。
重新查看sd卡空间。可以看到新增了mmcblk0p3,它的容量为11.2G
1 | fdisk -l
|

6.1.3. 格式化分区¶
分区完成以后,我们对新分区进行格式化。下面的命令中,ext4 表示分区格式, /dev/mmcblk0p3 表示要格式化的分区。
1 | mkfs.ext4 /dev/mmcblk0p3
|

我们等待格式化完成后,记住刚刚格式化分区的 UUID,
6.1.4. 挂载分区¶
squashfs和ext4两种文件系统扩容的差异在这里体现。由于squashfs文件系统是只读的,是基于overlay形式的, 我们无法将新建的ext4分区挂载到根目录下,而ext4文件系统的镜像就不存在这种问题。
6.1.4.1. squashfs¶
打开 系统 -> 挂载点, 点击 新增 挂载点。

勾选启用,根据UUID或设备号选择新建的格式化分区,然后自定义挂载点。
挂载位置可以自己决定,这里我们输入自定义挂载点之后,按下Enter键保存地址,然后点击保存。

保存并应用设置

我们就可以看到新挂载的分区了。

6.1.4.2. ext4¶
注意
本小节说使用的镜像是 openwrt-embedfire_doornet1-ext4-20210524.img.gz
在挂载ext4分区之前,我们先在终端执行几条命令。 下面命令的/dev/mmcblk0p3根据自己实际新增的分区填写。
1 2 3 4 5 6 7 | mkdir -p /tmp/introot
mkdir -p /tmp/extroot
mount --bind / /tmp/introot
mount /dev/mmcblk0p3 /tmp/extroot
tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf -
umount /tmp/introot
umount /tmp/extroot
|
执行这些命令需要等待一点时间。完成之后我们开始挂载
打开 系统 -> 挂载点, 点击 新增 挂载点。
选择刚刚操作的分区,将挂载点选择作为根文件系统使用,然后保存并应用。

在完成保存之后我们还要进行重启,重启完成后我们打开 系统 -> 软件包 ,可以看到剩余的程序安装空间增大了。

这种扩容方式并不是无损的,原来的用户文件分区还是存在的但是已经无法使用,只不过我们移花接木, 将原来的用户文件分区转移到了新的分区。
如何无损的扩容ext4分区,请查看 趣味玩法 -> 一种简单的扩展ext4分区的方法