PVE 更新 OpenWrt
准备工作
OpenWrt 固件

- 建议编译时 不要 选中
gzip压缩,否则容易出现各种奇妙的问题 - 一般情况下不选用名称带有
rootfs的固件
- 建议编译时 不要 选中
USB 网卡 (可选)

- 如果你和我一样把全部网口都直通了,则需要在更新时使用其他的方式连接到 PVE
- PVE 默认不会自动启用新插入的网卡,你可能需要
ifup enx00xxxxxxxxxx && ip link set dev enx00xxxxxxxxxx up其中网卡名enx00xxxxxxxxxx可以在ifconfig查询
为什么不能用正常方式升级?
众所周知,OpenWrt 正常升级方式是在 系统 - 备份升级 中升级:

但你会发现 x86 固件是不包含 sysupgrade 固件的:

所以,对于运行在 Proxmox VE 中的 OpenWrt 虚拟机,我们只能通过手动方式升级
在开始之前,请确保你划分了一块虚拟硬盘作为 overlay 分区放置配置。

如果没有,我强烈建议你花十分钟搜下教程
(关键词 extroot overlay)
完成这件事, 功在当代利在千秋
上传新固件
上传到 local - ISO

推荐检查 sha256sum
更换系统固件
- 在以非目标 OpenWrt 内网的方式连接 PVE 的情况下,关闭虚拟机
可以用 PVE 的 Shutdown按钮,也可以在 Console 输入poweroff - 选中系统盘
点击 Detach并确认
再在下方找到 Unused Disk 0并Remove删除
- 导入新固件
来到 PVE 的 Console 输入:qm importdisk 101 /var/lib/vz/template/iso/openwrt-x86-64-generic-squashfs-combined-efi.img local-lvm
其中101是你的 OpenWrt 虚拟机 ID
随后一个新的 Unused Disk 0出现了
- 启用新系统盘
选中新的Unused Disk 0并点击Edit,确认即可
- 启动虚拟机
恢复配置
- 按一下回车激活 Console

- 此时,原先的
overlay会被自动挂载为/mnt/sda1(有时是sdb1)
我们可以发现,该目录下etc内含有一.extroot-uuid文件。
这一文件会误导系统读取正确的 UUID 并导致无法挂载!
使用rm -rf /mnt/sda1/etc将之删除。/etc/fstab也是没用的:rm -f /etc/fstab - 查看自动生成的
/etc/config/fstab
- 去掉用不到的
boot挂载 - 把
sda1的 UUID 移动到overlay配置下
保存后重启
- 把修改的
/etc/config/fstab同步到配置分区cp -a /etc/config/fstab /mnt/sda1/upper/etc/config/
完成
- 重启
- 检查
df -h,可发现配置分区已成功挂载!
References
我被万恶的 .extroot-uuid 困扰了几个月之久,直到看到了
这篇帖子

因此写这篇教程广而告之。
