Note

KVM虚拟机本质上由两部分组成:

  • 虚拟机配置文件
  • 虚拟磁盘

KVM 虚拟机克隆详解:完整克隆与链接克隆

在日常 KVM 虚拟化管理中,虚拟机克隆是一项非常实用的功能。通过克隆,运维人员可以快速复制一台现有虚拟机的配置和磁盘文件,从而节省部署时间、提高环境搭建效率。本文将详细介绍 KVM 虚拟机的完整克隆和链接克隆 两种方式,并提供自动化脚本示例。


一、虚拟机克隆的两种方式

在 KVM 环境中,常见的克隆方式有两种:

  1. 完整克隆(Full Clone)

    • 会复制原虚拟机的所有磁盘数据,生成一个全新的独立虚拟机。
    • 优点:互不影响,稳定可靠。
    • 缺点:磁盘文件较大,克隆耗时。
  2. 链接克隆(Linked Clone)

    • 新虚拟机磁盘文件基于原虚拟机磁盘(母盘),只记录增量部分。
    • 优点:磁盘占用小,创建速度快。
    • 缺点:依赖母盘,若母盘损坏,克隆机无法使用。

二、完整克隆方法

1. 自动模式(virt-clone 工具)

virt-clone 是 libvirt 提供的专用克隆工具,操作简单:

virt-clone --auto-clone -o web01 -n web02

2. 手动模式(复制配置 + 修改)

  1. 转换磁盘文件:
    qemu-img convert -f qcow2 -O qcow2 -c web01.qcow2 web03.qcow2
  2. 导出配置文件并修改:
    virsh dumpxml web01 > web02.xml
    vim web02.xml
    修改内容包括:
    • <name>:虚拟机名称
    • 删除 <uuid>
    • 删除 <mac address>
    • 修改 <source file> 为新的磁盘路径
      33.png
  3. 定义并启动新虚拟机:
    virsh define web02.xml
    virsh start web02

三、链接克隆方法

1. 步骤解析

a. 生成新的虚拟机磁盘文件

qemu-img create -f qcow2 -b web03.qcow2 web04.qcow2

参数说明:

b. 生成新的配置文件

virsh dumpxml web01 > web03.xml
vim web03.xml

修改点与完整克隆相同:虚拟机名称、UUID、MAC 地址、磁盘路径。

c. 导入虚拟机并测试

virsh define web03.xml
virsh start web03

2. 全自动链接克隆脚本

为了简化操作,可以写一个脚本来一键完成:

#!/bin/bash
old_vm=$1
new_vm=$2

# a:生成虚拟机磁盘文件
old_disk=$(virsh dumpxml $old_vm | grep "<source file" | awk -F"'" '{print $2}')
disk_tmp=$(dirname $old_disk)
qemu-img create -f qcow2 -b $old_disk ${disk_tmp}/${new_vm}.qcow2

# b:生成虚拟机的配置文件
virsh dumpxml $old_vm > /tmp/${new_vm}.xml

# 修改虚拟机的名字
sed -ri "s#(<name>)(.*)(</name>)#\1${new_vm}\3#g" /tmp/${new_vm}.xml
# 删除虚拟机uuid
sed -i '/<uuid>/d' /tmp/${new_vm}.xml
# 删除mac地址
sed -i '/<mac address/d' /tmp/${new_vm}.xml
# 修改磁盘路径
sed -ri "s#(<source file=')(.*)('/>)#\1${disk_tmp}/${new_vm}.qcow2\3#g" /tmp/${new_vm}.xml

# c:导入虚拟机并进行启动测试
virsh define /tmp/${new_vm}.xml
virsh start ${new_vm}

执行方式:

bash link_clone.sh web01 web05

即可基于 web01 快速生成一个新虚拟机 web05


四、完整克隆与链接克隆对比

特性 完整克隆 链接克隆
磁盘占用 较大(复制全盘) 较小(仅增量部分)
创建速度 较慢 较快
依赖性 独立运行 依赖母盘
适用场景 生产环境、长期使用 测试环境、临时环境

五、总结