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
困扰了几个月之久,直到看到了
这篇帖子
因此写这篇教程广而告之。