virt-clone 是什么
virt-clone 基于已有虚机定义克隆出新虚机,自动复制磁盘并重新生成 UUID 与网卡 MAC,避免标识冲突。它要求源域处于关机状态且没有保存的状态文件,否则磁盘读取无法保证一致性。克隆完成只是第一步,还要进 guest 改主机名、机器标识与网络配置;Windows 场景需要配合 Sysprep,否则会出现 SID 与授权冲突。
基本信息
| 自动模式 | virt-clone --original vm1 --name vm2 --auto-clone |
|---|---|
| 指定磁盘 | --file /var/lib/libvirt/images/vm2.qcow2 |
| 前提 | 源域已关机(含无保存状态) |
| 后处理 | guest 内改主机名;Windows 走 Sysprep |
| 与手工拷贝差别 | 自动重生成 UUID 与 MAC,并注册新域 |
典型使用场景
- 从标准模板快速派生开发或测试环境
- 批量生成同构节点用于压测或演练
- 保留当前环境副本,改造前留后路
- 为不同环境复制同一套应用栈
- 克隆后调整规格用于不同规格的验证
克隆与核对
克隆与核对
sudo virsh shutdown vm1 # 源域必须关机
virsh list --all | grep vm1 # 确认状态为 shut off
sudo virt-clone --original vm1 --name vm2 \
--file /var/lib/libvirt/images/vm2.qcow2
sudo virsh list --all | grep vm2 # 确认新域已注册
virsh dumpxml vm2 | grep -E 'uuid|mac' # 核对标识已重新生成克隆后的处理
| 项目 | 是否自动处理 | 仍需手工处理 |
|---|---|---|
| 磁盘复制 | 自动复制并指向新路径 | 确认存储空间与后端存储策略 |
| UUID 与 MAC | 自动重新生成 | 核对 dumpxml,避免与源域重复 |
| 主机名 | 不处理 | guest 内修改 hostname 与相关配置 |
| 机器标识 | 不处理 | Linux 关注 machine-id,Windows 需 Sysprep |
| 网络配置 | 不处理 | 静态 IP 需改为新地址,避免与原虚机冲突 |
| 主机密钥 | 不处理 | 清理 SSH 主机密钥或重建,避免认证告警 |
克隆出的虚机不要与原虚机同时使用同一 IP 或同一主机名:监控、授权与日志系统会把两者混为一体,排查问题时非常难分辨。
使用 --auto-clone 时目标磁盘路径由工具生成,存储池与目录规划要提前确认,避免磁盘落到非预期的存储上。
克隆前先把源虚机整理干净:清理临时文件与日志、卸载无关挂载、关闭不再需要的服务,能减少克隆后逐台整改的工作量。