虚拟机克隆
虚拟机克隆是指基于已有的虚拟机创建一个相同配置和内容的副本,虚拟机克隆过程中会生成和原始虚拟机不同的MAC地址和UUID,允许克隆的虚拟机和原始虚拟机在同一网络中出现,并且不会产生任何冲突。
全量克隆(Full Clone)
全量克隆的虚拟机不依赖源虚拟机,是完全独立的虚拟机,它的性能与被克隆虚拟机相同。由于全量克隆不与父虚拟机共享虚拟磁盘,所以创建全量克隆所需的时间比链接克隆更长。如果涉及的文件较大,全量克隆可能需要数分钟才能创建完成。全量克隆只复制克隆操作时的虚拟机状态,因此无法访问父虚拟机的快照。
链接克隆(Linked Clone)
依赖于源虚拟机(称为父虚拟机)。由于链接克隆是通过父虚拟创建而成,因此节省了磁盘空间,而且克隆速度非常快,但在克隆后的虚拟机性能能会有所下降。对父虚拟机的虚拟磁盘进行的更改不会影响链接克隆,对链接克隆磁盘的更改也不会影响父虚拟机。如果父虚拟机损坏或快照点删除,链接克隆的虚拟机将无法使用;如果父虚拟机移动位置,需要重新指定父虚拟机的位置,再启动链接克隆虚拟机。
快速全量克隆(Fast Full Clone)
快速全量克隆采用写时复制(Copy-On-Write)的策略。首先虚拟机进行链接克隆技术,保证虚拟机快速克隆启动,当新创建的虚拟机对共享的虚拟磁盘进行写操作时,系统会将需要写入的数据写入新磁盘,而不是直接修改共享的磁盘。确保了新虚拟机与源虚拟机之间的数据隔离。虚拟机启动后在后台异步的将原镜像进行全量复制并进行全量数据合并,最后保持数据磁盘独立性。通过此方式克隆的虚拟机启动速度快,数据始终独立,克隆完成后性能完全无影响。
全量克隆、快速全量克隆、链接克隆 优劣势介绍
克隆速度 | 性能影响 | 使用限制 | 应用场景 | |
---|---|---|---|---|
全量克隆 | 受虚拟磁盘大小、网络带宽等因素影响,数据复制完成后,主机才能启动 | 主机启动速度较慢,数据始终独立,克隆完成后性能完全无影响 | 对主机存储位置无限制 | 用于需要完全复制源主机的场景,比如备份、恢复和迁移等操作 |
快速全量克隆 | 秒级克隆 | 主机启动速度快,数据最终独立,克隆完成后性能完全无影响 | 源主机/虚拟磁盘与克隆主机/虚拟磁盘存储位置保持一致 | 快速创建多个相同的主机环境,且最终主机数据需要保持独立的场景 |
链接克隆 | 秒级克隆 | 主机启动速度快,节省存储空间,但链接克隆的主机/虚拟磁盘和源主机/虚拟磁盘之间存在依赖关系,克隆完成后性能仍受影响 | 源主机/虚拟磁盘与克隆主机/虚拟磁盘存储位置保持一致 | 开发、测试等对性能要求不高的场景,节省存储空间 |
kvm虚拟化主机克隆
完整克隆
1,自动克隆(虚拟机关机克隆)
代码语言:javascript复制virt-clone --auto-clone -o openeuler22.03 -n openeuler22.03_clone
-o 原始虚拟机 -n 克隆后的新虚拟机
代码语言:javascript复制virt-clone -o openeuler22.03 -n openeuler22.03_clone --file /data/openeuler22.03_clone.qcow2
-f 克隆后新虚拟机的磁盘
2,手动克隆
- 复制虚拟磁盘
- 生成xml文件
- 修改xml文件
- 导入xml文件
a、使用cp命令复制一个磁盘
代码语言:javascript复制cp /var/lib/libvirt/images/openeuler22.03.qcow2 /var/lib/libvirt/images/openeuler22.03_clone.qcow2
b、复制虚拟机的xml文件
代码语言:javascript复制virsh dumpxml --domain openeuler22.03 > /etc/libvirt/qemu/openeuler22.03_clone.xml
c、修改xml文件将原始机器的唯一性配置删除
- 修改虚拟机名字
- 删除UUID
- 删除mac地址
- 修改磁盘路径信息
d、导入虚拟机
根据xml文件导入虚拟机
代码语言:javascript复制virsh define --file /etc/libvirt/qemu/openeuler22.03_clone.xml
e、启动虚拟机
代码语言:javascript复制virsh start openeuler22.03_clone
f、查看虚拟机列表
代码语言:javascript复制virsh list --all
Id Name State
---------------------------------------
4 openeuler22.03_clone running
3,链接克隆
a、 创建一个链接克隆磁盘,qcow2格式
代码语言:javascript复制qemu-img create -b /var/lib/libvirt/images/openeuler22.03.qcow2 -f qcow2 -F qcow2 /var/lib/libvirt/images/openeuler22.03_clone2.qcow2
或
qemu-img create -f qcow2 -F qcow2 -o backing_file=/var/lib/libvirt/images/openeuler22.03_clone.qcow2 /var/lib/libvirt/images/openeuler22.03_clone3.qcow2
未指定size,使用基础镜像的size
b、附加特殊权限防止误删
代码语言:javascript复制chattr i /var/lib/libvirt/images/openeuler22.03.qcow2
c、查看虚拟磁盘信息
代码语言:javascript复制qemu-img info /var/lib/libvirt/images/openeuler22.03_clone2.qcow2 --force-share
或
qemu-img info /var/lib/libvirt/images/openeuler22.03_clone2.qcow2 --U
d、生成虚拟机xml文件并启动虚拟机
virt-install --virt-type kvm --os-type=linux --name openeuler22.03_clone2 --memory 2048 --vcpus 1 --disk /var/lib/libvirt/images/openeuler22.03_clone2.qcow2,format=qcow2,bus=virtio --boot hd --network bridge=br0,model=virtio --accelerate --noautoconsole --graphics vnc,listen=0.0.0.0 --video cirrus
e、查看虚拟机磁盘信息验证虚拟机
代码语言:javascript复制[root@openEuler-node1 qemu]# virsh domblklist openeuler22.03_clone2
Target Source
---------------------------------------------------------------
vda /var/lib/libvirt/images/openeuler22.03_clone2.qcow2