必须先关机,否则virt-clone会明确报错退出;克隆需指定--original、--name和至少一个--file;默认生成新MAC但旧系统可能因udev规则冲突导致网络异常;--auto-clone易引发路径不足、命名不规范及漏克隆磁盘等问题。

必须先关机,否则 virt-clone 会直接报错退出,不是卡住,是明确拒绝执行。
克隆前必须确保源虚拟机已完全关机
运行 virsh list --all 查看状态,只有显示为 shut off 才安全。如果看到 running 或 paused,得先执行 virsh shutdown ;等几秒后仍没变,就用 virsh destroy 强制终止。别跳过这步——virt-clone 对运行中虚拟机的检查非常严格,错误信息通常是:ERROR Domain with devices to clone must be paused or shutoff.
基础克隆命令要带齐三个核心参数
virt-clone 最小可用组合是 --original、--name 和至少一个 --file。缺任意一个都会失败或产生非预期结果:
-
--original:必须是virsh list --all中显示的**精确名称**,大小写和连字符都不能错 -
--name:新虚拟机名不能与现有任何虚拟机(包括已删未清理的 XML)重复,否则定义失败 -
--file:每个磁盘设备都要单独指定一次;如果源虚拟机有两块盘(如vda和vdb),就得写两个--file参数,路径需可写且空间足够
示例:virt-clone --original web01 --name web02 --file /var/lib/libvirt/images/web02-system.qcow2 --file /var/lib/libvirt/images/web02-data.qcow2
克隆后常见冲突点:MAC 地址和网卡识别
虽然 virt-clone 默认会生成新 MAC 地址,但某些旧系统(如 CentOS 6/7)仍可能因 /etc/udev/rules.d/70-persistent-net.rules 缓存旧网卡绑定而无法启动网络。更稳妥的做法是:
- 启动前用
virsh dumpxml web02 | grep "mac address"确认 MAC 已更新 - 若仍出问题,进系统后删掉
/etc/udev/rules.d/70-persistent-net.rules,再重启 - 或者克隆时显式指定新 MAC:
--mac 52:54:00:ab:cd:ef,避免随机值撞上已有设备
不要依赖 --auto-clone 省事
这个参数看似方便,实际会自动命名(如 web01-clone)并把镜像放到默认路径(/var/lib/libvirt/images/),但容易引发两个问题:
- 默认路径空间不足,导致克隆中途失败,错误提示模糊(只说 “allocation failed”)
- 自动生成的名称可能不符合你环境的命名规范,后续管理困难
- 它不会自动处理多磁盘场景,只克隆第一块盘,其余磁盘被忽略
真想省事,不如写个两行脚本:先 virsh domblklist 获取所有磁盘路径,再用循环拼出完整 virt-clone 命令。
真正麻烦的从来不是命令本身,而是克隆后第一次启动时发现网络不通、磁盘没挂载、或者 UUID 冲突导致 systemd 启动卡在 Reached target Local File Systems —— 这些都得进 rescue mode 手动修,比多敲几个参数费时得多。











