Overlay 文件系统
- Lower Layer 为编译固件时分配的 只读 空间
- sda1 为内核分区
- sda2 为固件分区
- Upper Layer 即为 Overlay 分区 可读写
举个例子:
例如,openwrt 的固件分区为 16MB + 300MB 在系统启动时,会将 Firmware 部分拷贝到 Overlay 中
Overlay 的空间使用的是 sda2 分区的剩余空间
假如 Firmware 的大小为 120MB,sda2 的实际使用空间为120MB(Firmware)+ 120MB(Firmware 副本)
所以 sda2 实际使用空间则只剩余为 60MB
那么 Overlay 给我带来的好处就是,Firmware 部分可以相当于一个系统备份,而我们所有的操作都是在 Overlay 上面。同样,我们也可以随时进行系统恢复。
由上可以看出,Overlay 的弊端就是会占用两倍的 Firmware 空间。
例如一台路由器的内存为 256MB,那么我们实际能使用的空间则仅剩大概 256MB – 120MB * 2,也就是 10MB 左右
所以我们就需要将 Overlay 的空间指向一个外部存储设备。
注意:只有 Squash 格式的固件支持 Overlay,etx4 格式的固件不支持
Overlay 扩容
进行扩容之前,需要确保安装以下 ipk
opkg update
# block-mount 为 openwrt 的挂载点应用,安装后需重启才可显示
# kmod-usb-storage USB 存储支持
# kmod-fs-ext4 ext4 文件系统
# e2fsprog ext 文件系统工具
# fdisk 磁盘分区格式化工具
# cfdisk 同上
opkg install block-mount kmod-usb-storage kmod-fs-ext4 e2fsprogs fdisk cfdisk
操作步骤
- 先找到我们外部存储设备
# 使用 fdisk 工具 fdisk -l
# 返回结果 # Disk /dev/mmcblk0: 28.99 GiB, 31104958464 bytes, 60751872 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 # Disklabel type: dos
# Disk identifier: 0x4020f983
# Device Boot Start End Sectors Size Id Type
# /dev/mmcblk0p1 2048 60751871 60749824 29G 83 Linux
# /dev/mmcblk0 为外部存储设备,/dev/mmcblk0p1 则代表该设备的第一个分区
- 格式化当前整个磁盘 数据将全部清空
# 注意:这里格式化的是整个磁盘 mmcblk0,而非 p1 分区
mkfs.ext4 /dev/mmcblk0
# 如果格式化失败可能是因为当前设备已经被挂载 # 需先将设备卸载 umount /dev/mmcblk0
- 进行磁盘分区
cfdisk /dev/mmcblk0
# 由于我们格式化的是整个磁盘,此时 cfdisk 会提示我们按 Enter 继续
# 分区表选择 dos
# 创建分区的步骤如下
# New(新建分区) --> 设置分区大小 --> Write(写入配置) --> Quit(退出)
# 最后再将创建的分区格式化为 ext4 格式 mkfs.ext4 /dev/mmcblk0p1
- 将现有 Overlay 中的文件拷贝到该分区中
# Copy 的目的主要是为了保留你当前对系统所做的更改
# 如果不进行 Copy。 Openwrt 会将系统的默认配置 Copy 到 Overlay 中
# 如果要将全新安装的 Openwrt 系统进行扩容,那么你也可以不进行这一步
cp -r /overlay/* /mnt/mmcblk0p1