为什么使用Squashfs固件?
-
OP的Squashfs固件被广泛应用与arm等embed设备,初衷是防止用户因不慎操作(插件、配置)等意外情况,导致无法正常访问系统或系统内核崩溃,而无法恢复系统只能推倒重来的情况发生。可以类比于CPU超频导致无法开机重置Bios的操作。目的是尽可能快速的,低成本的恢复系统到初始状态。
-
在PVE上使用也是同理,虽然官方也没有Squashfs的Sysupgrade固件用来升级,但这不影响我们利用Squashfs的特性。
Squashfs固件和Ext4的区别
- Squashfs固件同ext4的固件大体一致,都拥有一个boot分区和一个date分区,区别在于Data分区的使用上。
EXT4
- 对于ext4固件:配置文件和插件等其他对系统的更改,会直接写入对应的文件,并可持有化在磁盘上。这与我们常规系统的文件读写一致。
Squashfs
- 对于Squashfs固件:data分区逻辑上被分成了上下层的两部分结构,下层只读,上层可读写,所有被修改的配置和文件,将存储至上层,未修改的文件将直接读取下层使用。上下层逻辑上平行,物理顺序存储,即在磁盘上顺序表现为:下层-上层-空闲空间。
两层结构
-
下层(lower):只读的基础层,通常包含基本的系统文件,即kennel和系统自带软件(luci等)
-
上层(upper):可写层,用于保存对系统的修改,
工作原理
-
当读取文件时,系统首先检查上层是否有该文件,如果有则读取上层文件
-
如果上层没有,则读取下层文件
-
写操作只发生在上层
-
当修改下层文件时,系统会将文件复制到上层进行修改(写时复制)
正式安装
固件的下载
-
这里是用的是ImmortalWrt固件,是Op的一个国人专用版分支,具体优缺点和介绍可以参考我的PVE集群文档
-
前往firmware-selector下载COMBINED (SQUASHFS-COMBINED.IMG.GZ) 版本后,解压得到img文件即可
创建VM
- ISO镜像和硬盘不添加,CPU选Host即可
导入IMG并开机
-
使用
qm importdisk <VM-ID> <IMG-PATH> <Stroage>
进行导入 -
qm importdisk 100 /var/lib/vz/template/iso/openwrt-22.03.5-x86-64-generic-ext4-combined-efi.img local-lvm
-
添加导入后的磁盘,设置启动顺序
-
为VM创建对应大小的外置Overlap分区
-
开机
换源与安装所需插件
-
这里以ImmortalWrt的NJU源为例
sed -e 's,https://downloads.immortalwrt.org,https://mirror.nju.edu.cn/immortalwrt,g' \ -e 's,https://mirrors.vsean.net/openwrt,https://mirror.nju.edu.cn/immortalwrt,g' \ -i.bak /etc/opkg/distfeeds.conf
-
安装
lsblk, cfdisk
用于查看磁盘分区情况和对overlay磁盘进行分区opkg update opkg install lsblk cfdisk
初始化外置Overlay分区
-
查看已连接的磁盘设备,并对Overlay磁盘进行分区
- 使用
lsblk
查看磁盘设备,此时我们要将sdb磁盘全部容量作为overlay分区
root@ImmortalWrt:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 290.3M 0 loop /overlay sda 8:0 0 332.5M 0 disk ├─sda1 8:1 0 32M 0 part /mnt/sda1 │ /boot │ /boot └─sda2 8:2 0 300M 0 part /rom sdb 8:16 0 1G 0 disk
- 使用
cfdisk /dev/sdb
进行分区,选择磁盘分区格式为dos
,分区后结果为
root@ImmortalWrt:~# cfdisk /dev/sdb Syncing disks. root@ImmortalWrt:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 290.3M 0 loop /overlay sda 8:0 0 332.5M 0 disk ├─sda1 8:1 0 32M 0 part /mnt/sda1 │ /boot │ /boot └─sda2 8:2 0 300M 0 part /rom sdb 8:16 0 1G 0 disk └─sdb1 8:17 0 1023M 0 part
- 对
/dev/sdb1
进行格式化
root@ImmortalWrt:~# mkfs.ext4 /dev/sdb1 mke2fs 1.47.0 (5-Feb-2023) Discarding device blocks: done Creating filesystem with 261888 4k blocks and 65536 inodes Filesystem UUID: b8b62451-0e47-41a2-8a97-0abafdb055e7 Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done
- 使用
-
挂载新分区,并将
/overlay
内容拷贝至其中
root@ImmortalWrt:~# mount /dev/sdb1 /mnt/sdb1
root@ImmortalWrt:~# cp -r /overlay/* /mnt/sdb1/
root@ImmortalWrt:~# ls /mnt/sdb1/
lost+found upper work
root@ImmortalWrt:~# umount /mnt/sdb1/
使用Luci对外置Overlay分区进行设置
-
登录Luci,进入
系统--挂载点
-
在页面找到
挂载点
,并点击添加 -
uuid
选择前文已配置好的分区,挂载点
选择作为外部 overlay 使用(/overlay)
,保存 -
重启系统
完成设置
- 此时使用
df -h
可看到,外置/overlay
分区已被正确挂载
root@ImmortalWrt:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 9.8M 9.8M 0 100% /rom
tmpfs 237.0M 188.0K 236.8M 0% /tmp
/dev/sdb1 988.4M 1.1M 920.2M 0% /overlay
overlayfs:/overlay 988.4M 1.1M 920.2M 0% /
/dev/sda1 31.5M 7.7M 23.1M 25% /boot
/dev/sda1 31.5M 7.7M 23.1M 25% /boot
tmpfs 512.0K 0 512.0K 0% /dev
/dev/sda1 31.5M 7.7M 23.1M 25% /mnt/sda1
评论区