关于我
~一个热爱火影的业余小提琴玩家~
Joynaruto

OpenWrt 从物理机迁移到虚拟机的完整过程

背景说明

我的网络核心原本运行在一台基于 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 盘备份(初步尝试)

  1. 插入 USB 并识别设备
    dmesg | tail
    lsblk
    # 检查识别为 /dev/sdb1
    
  2. 格式化 USB 为 ext4 并挂载
    mkfs.ext4 /dev/sdb1
    mount /dev/sdb1 /mnt/usb
    
  3. 尝试备份整个物理硬盘
    dd if=/dev/sda of=/mnt/usb/openwrt.img bs=1M status=progress
    

    注:虽然 /dev/sda 是 111GB,但实际只用到前 10GB,因此未来转换可压缩。

  4. 卸载并移除 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 中加载

  1. 使用 qcow2 创建新的 KVM 虚拟机。
  2. 这里我没直通网口,把原来的mac地址也复刻过来
  3. 启动后发现IP、WireGuard、Keepalived 等配置一切正常。

网络高可用与切换设计

原设计考虑由 Home Assistant 检测物理机状态并控制主从切换:

  • 如果物理机挂掉,立即由虚拟机 B 接管。
  • 同时自动开机虚拟机 A,恢复主控地位。

但目前决定暂时停用物理机,转由虚拟机 A 长期运行,虚拟机B作为Keepalived的热备方案。原有的 Home Assistant 联动方案暂不启用,留作未来物理机重新启用时再考虑整合。

性能测试对比

  • iperf3 网络带宽测试(虚拟机 A):
    合计约 946 Mbit/s
    
  • 实际使用体验
    • 油管8K 60fps 流畅播放,跑分20万
    • CPU 占用不超过 35%
    • WireGuard 回家较原来速度更快,延迟更低
    • 配合虚拟机快照,定期备份,出问题随时还原,极大提高了灵活性 :idea:

导出 OVA(备份虚拟机 A)

最后我把虚拟机完整导出成OVA,在主服务器中也备份了一次,这下心安了 :oops:

在导出过程中,系统会生成:

  • vmdk(磁盘文件)
  • ovf(配置文件)
  • .mf(校验文件)

最终生成 .ova,可被 VMware、VirtualBox、Proxmox、KVM 等主流虚拟化平台识别。

总结与展望

  • 本次迁移圆满成功,虚拟机运行稳定。
  • 当前决定物理机不启用,虚拟机 A 将作为主节点运行一段时间。
  • 接下来可能考虑将网络接管策略与 Home Assistant 深度联动,实现自动主从切换、预警、告警等。

迁移经验:

  • 确保 dd 和 img 处理阶段有足够空间和正确挂载
  • 使用 qemu-img-c 参数能有效缩减体积
  • 虚拟机资源分配合理,性能可超过原物理机

如有类似需求,欢迎借鉴,也欢迎提问交流!

发表回复

textsms
account_circle
email

Joynaruto

OpenWrt 从物理机迁移到虚拟机的完整过程
背景说明 我的网络核心原本运行在一台基于 AMD A4-5300 的物理机上,搭载 OpenWrt 系统,作为旁路由运行 WireGuard、Keepalived、分流、NAT 等服务。为了提升灵活性和可维护性,我计划将…
扫描二维码继续阅读
2025-06-11