背景说明
我的网络核心原本运行在一台基于 AMD A4-5300 的物理机上,搭载 OpenWrt 系统,作为旁路由运行 WireGuard、Keepalived、分流、NAT 等服务。为了提升灵活性和可维护性,我计划将其完整迁移到虚拟机(虚拟机 A)上运行。
今天,我成功完成了整个迁移流程,运行稳定,特此记录分享全过程。
准备工作
- 原物理机配置:
- CPU:AMD A4-5300 APU(2 核 2 线程)
- 系统:OpenWrt R20.5.20 eSir,内核 4.19
- 安装位置:/dev/sda,主分区为 sda3(10G)
- 虚拟化平台:飞牛 NAS,宿主系统支持 QEMU/KVM。
- 目标虚拟机配置(虚拟机 A):
- CPU:Intel N100,4 核
- 内核版本:5.15,ImmortalWrt 23.05.4
- Hypervisor:KVM,桥接网卡
镜像备份步骤
方式一:U 盘备份(初步尝试)
- 插入 USB 并识别设备:
dmesg | tail lsblk # 检查识别为 /dev/sdb1
- 格式化 USB 为 ext4 并挂载:
mkfs.ext4 /dev/sdb1 mount /dev/sdb1 /mnt/usb
- 尝试备份整个物理硬盘:
dd if=/dev/sda of=/mnt/usb/openwrt.img bs=1M status=progress
注:虽然 /dev/sda 是 111GB,但实际只用到前 10GB,因此未来转换可压缩。
- 卸载并移除 USB:
lsof | grep /mnt/usb # 查看进程占用 cd /root # 切出挂载点 umount /mnt/usb
方式二:NFS 挂载备份(最终采用)
由于 U 盘容量有限、写入速度较慢,最终采用了挂载 NAS 上的 NFS 共享目录方式进行镜像备份:
mount -t nfs 192.168.x.x:/nfs/openwrt /mnt/nfs
dd if=/dev/sda of=/mnt/nfs/openwrt.img bs=1M status=progress
该方式避免了 U 盘性能瓶颈,备份过程更加稳定和快速。
转换为虚拟磁盘格式
在 Windows 中使用 qemu-img
工具:
qemu-img convert -c -f raw -O qcow2 openwrt.img openwrt.qcow2
加上
-c
会压缩未使用空间,我从原始 111GB 成功压缩至约 11GB。
在虚拟机 A 中加载
- 使用 qcow2 创建新的 KVM 虚拟机。
- 这里我没直通网口,把原来的mac地址也复刻过来
- 启动后发现IP、WireGuard、Keepalived 等配置一切正常。
网络高可用与切换设计
原设计考虑由 Home Assistant 检测物理机状态并控制主从切换:
- 如果物理机挂掉,立即由虚拟机 B 接管。
- 同时自动开机虚拟机 A,恢复主控地位。
但目前决定暂时停用物理机,转由虚拟机 A 长期运行,虚拟机B作为Keepalived的热备方案。原有的 Home Assistant 联动方案暂不启用,留作未来物理机重新启用时再考虑整合。
性能测试对比
- iperf3 网络带宽测试(虚拟机 A):
合计约 946 Mbit/s
- 实际使用体验:
- 油管8K 60fps 流畅播放,跑分20万
- CPU 占用不超过 35%
- WireGuard 回家较原来速度更快,延迟更低
- 配合虚拟机快照,定期备份,出问题随时还原,极大提高了灵活性
导出 OVA(备份虚拟机 A)
最后我把虚拟机完整导出成OVA,在主服务器中也备份了一次,这下心安了
在导出过程中,系统会生成:
vmdk
(磁盘文件)ovf
(配置文件).mf
(校验文件)
最终生成 .ova
,可被 VMware、VirtualBox、Proxmox、KVM 等主流虚拟化平台识别。
总结与展望
- 本次迁移圆满成功,虚拟机运行稳定。
- 当前决定物理机不启用,虚拟机 A 将作为主节点运行一段时间。
- 接下来可能考虑将网络接管策略与 Home Assistant 深度联动,实现自动主从切换、预警、告警等。
迁移经验:
- 确保 dd 和 img 处理阶段有足够空间和正确挂载
- 使用
qemu-img
的-c
参数能有效缩减体积 - 虚拟机资源分配合理,性能可超过原物理机
如有类似需求,欢迎借鉴,也欢迎提问交流!
发表回复