virt-p2v在线迁移最稳妥,需物理机与KVM宿主机SSH连通、root可登录、宿主机安装virt-v2v≥1.28;关键配置包括sshd开启PermitRootLogin和AllowTcpForwarding、防火墙放行22端口、客户端填宿主机IP及预建存储池,迁移后须手动注入VirtIO驱动、修复网络与GRUB、调整CPU/时钟等参数以确保正常运行。

直接用 virt-p2v 在线迁移是最稳妥的选择,前提是物理机能连上 KVM 宿主机、SSH 通、root 可登录,且宿主机装的是较新版本的 virt-v2v(≥1.28)。其他方法如 dd + qemu-img 或 Clonezilla 虽然可行,但要手动处理引导、驱动、网络等适配问题,容易启动失败或网卡失联。
确保 virt-p2v-server 能被客户端连接
这是整个流程中最常卡住的环节。virt-p2v 客户端(即从 ISO 启动的轻量系统)必须通过 SSH 连到宿主机执行转换,不是 HTTP 或自定义端口。
-
sshd_config中必须设PermitRootLogin yes和AllowTcpForwarding yes,改完记得systemctl restart sshd - 防火墙要放行 22 端口:
firewall-cmd --permanent --add-port=22/tcp && firewall-cmd --reload - 不要依赖密钥登录——客户端默认走密码,且只认 root 密码;如果宿主机禁用了 root 密码登录,需临时启用:
echo 'root:yourpass' | chpasswd - 客户端测试连接时若报
connection refused,先在宿主机上ss -tlnp | grep :22确认 sshd 真正在监听,而不是被 SELinux 拦截(可临时setenforce 0排查)
物理机启动 virt-p2v 客户端后关键配置项
U 盘或光盘启动进入图形界面后,填的目标地址是 KVM 宿主机 IP,不是物理机自己。所有路径、存储池、网络桥接名,都指宿主机上的资源。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- “Output format”选
-o libvirt,别选-o local——后者只生成镜像文件,不自动注册为 libvirt 虚拟机 - “Storage pool”必须提前在宿主机上建好,例如:
virsh pool-define-as kvm-pool dir --target /var/lib/libvirt/images && virsh pool-start kvm-pool - 勾选硬盘时,注意识别设备名(
/dev/sda还是/dev/nvme0n1),U 盘或临时挂载盘千万别选进去,否则会把镜像写进 U 盘 - 网络配置里,“Network mapping”建议填
bridge:br0(假设你已建好 Linux 网桥),别用defaultNAT 模式——物理机原 IP 很可能无法在 NAT 下复用
迁移完成后必须做的三件事
virt-p2v 不会自动安装 VirtIO 驱动或修复 GRUB,这些得靠 libguestfs 工具链补全,否则虚拟机大概率黑屏或卡在 initramfs。
- 确认目标虚拟机磁盘已用
virtio总线:在virsh edit <vm-name></vm-name>中检查<driver name="qemu" type="raw" cache="none" io="native"></driver>下是否有bus='virtio';没有就手动加 - 用
virt-customize注入 VirtIO 驱动和网卡规则:virt-customize -a /var/lib/libvirt/images/p2v.img --install qemu-guest-agent,kmod-kvdo --run-command 'dracut -f'(RHEL/CentOS)或--install linux-image-extra-virtual(Ubuntu) - 重置网络:若原物理机用
ens33,虚拟机很可能变成ens3或eth0,需删掉/etc/udev/rules.d/70-persistent-net.rules(如有),并检查/etc/netplan/或/etc/sysconfig/network-scripts/ifcfg-*是否硬编码了旧接口名
真正麻烦的从来不是“能不能迁”,而是“迁完能不能直接用”。virt-p2v 生成的 XML 描述里不会自动适配 CPU 模型、时钟源(clock offset='utc' 建议改成 hypervclock)、或关闭 KSM(内存去重可能干扰某些监控进程)。这些细节不调,虚拟机跑几天后可能出现时间漂移、内存泄漏或监控告警失灵。

















