侧边栏壁纸
博主头像
Gerchart's Blog 博主等级

For the ideal life is the ideal of the life.

  • 累计撰写 5 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

PVE下OpenWrt X86 squashfs 固件,使用外部Overlay分区进行扩容

gerchart
2025-02-26 / 0 评论 / 0 点赞 / 61 阅读 / 0 字
温馨提示:
本文最后更新于2025-02-26,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

为什么使用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):可写层,用于保存对系统的修改,

工作原理

  • 当读取文件时,系统首先检查上层是否有该文件,如果有则读取上层文件

  • 如果上层没有,则读取下层文件

  • 写操作只发生在上层

  • 当修改下层文件时,系统会将文件复制到上层进行修改(写时复制)

正式安装

固件的下载

创建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

0

评论区