KVM虚拟机克隆那些事儿,怎么快速复制一个几乎一样的环境来用
- 问答
- 2026-01-19 19:37:05
- 1
行,那咱们就直接聊聊KVM虚拟机克隆这事儿,说白了,克隆就是想快速得到一个和现在这台虚拟机几乎一模一样的“双胞胎”,不用从头开始安装系统、装软件,省时省力,这事儿在需要部署多个相同环境的时候特别有用,比如搭个集群、做个测试啥的。
核心原理:用“快照”或直接拷贝“底片”
想象一下虚拟机就像一部电影,克隆呢,主要有两种搞法,区别在于你怎么对待它当前的状态。
-
关机克隆(冷克隆):这好比是电影拍完了,成片已经定稿,你把整部电影的母带(虚拟机的磁盘文件)完完整整地复制一份,再给这份新拷贝配上一个新的“放映机说明书”(新的虚拟机配置文件),这种方法最稳妥,因为原虚拟机是关机的,磁盘文件不会被修改,复制过程不会出错,缺点就是你得先把虚拟机关了。
- 来源参考:很多KVM管理指南都会把这种基于磁盘镜像文件复制的方式作为最基础、最可靠的克隆方法。
-
运行时克隆(热克隆):这就像电影还在拍摄中,但你需要一个当前画面的精确副本,这时候你就得用到“快照”功能,先给正在运行的虚拟机拍个快照,定个格,然后基于这个快照去创建一个新的虚拟机,这个方法好处是原虚拟机不用停机,服务可以继续跑,但相对复杂一点,对系统资源有些影响。
- 来源参考:像
virsh命令的snapshot-create-as和snapshot-revert等命令通常用于管理快照,为热克隆提供基础。
- 来源参考:像
动手实操:最直接的命令行玩法
别被命令行吓到,其实步骤很清晰,咱们以最常用、最直接的关机克隆为例,因为这样最不容易出岔子。
第一步:找到虚拟机的“身份证”和“家当”
你得知道你打算克隆的那台虚拟机叫啥名字,用这个命令列出所有虚拟机:
virsh list --all
你会看到虚拟机的名字(比如叫 ubuntu-server-old)和它的状态。
找到这个虚拟机的配置文件放在哪,这个文件告诉KVM这个虚拟机长啥样(有多少内存、几个CPU、磁盘文件在哪等等)。
virsh dumpxml ubuntu-server-old > /path/to/new-vm.xml
这个命令会把 ubuntu-server-old 的配置信息导出到一个新的XML文件里,比如我们存为 new-vm.xml,这个文件就是我们待会儿要修改的“新说明书”。
第二步:处理核心“家当”——磁盘文件
虚拟机的磁盘文件(就是装系统和数据那个大文件)通常在 /var/lib/libvirt/images/ 目录下,但具体位置你得在刚才导出的XML文件里看,用文本编辑器打开 new-vm.xml,找到类似 <disk type='file' device='disk'> 的段落,里面会有个 <source file='/path/to/original-disk.qcow2'/>,这个就是原虚拟机的磁盘文件路径。
我们去复制这个磁盘文件:
sudo cp /path/to/original-disk.qcow2 /path/to/new-disk.qcow2
这里有个小技巧,建议用 cp 命令时加上 -p 参数,这样可以保留原文件的一些属性,注意给新文件起个能区分开的名字。
第三步:修改“新说明书”(XML配置文件)
这一步是关键,得仔细点,用编辑器打开 new-vm.xml,主要改三个地方:
- 虚拟机名字:找到
<name>ubuntu-server-old</name>,把它改成新的,<name>ubuntu-server-clone</name>,这个名字必须唯一。 - UUID:找到
<uuid>...</uuid>这一整行,把它删掉或者注释掉,UUID是全局唯一标识符,就像身份证号,不能重复,删掉之后,KVM在定义新虚拟机时会自动生成一个全新的。 - 磁盘文件路径:找到刚才记下的那个
<source file='/path/to/original-disk.qcow2'/>,把路径改成你新复制出来的那个磁盘文件路径,<source file='/path/to/new-disk.qcow2'/>。 - MAC地址(可选但建议):找到网络接口配置那里,有个
<mac address='52:54:00:xx:xx:xx'/>,最好也把它改掉,或者直接删掉这一行让系统自动生成新的,避免在局域网里MAC地址冲突。
第四步:注册新虚拟机和处理克隆后的系统
改好配置文件后,用这个命令让KVM认识这个新虚拟机:
virsh define /path/to/new-vm.xml
用 virsh list --all 应该就能看到这个新虚拟机了,它目前是关机状态。
重要提醒: 到这里,你只是完成了硬件的克隆,但虚拟机里面的操作系统还不知道自己“被复制”了,特别是像Linux,它可能还保留着原虚拟机的网络配置(比如同样的IP地址)、主机名等,如果两台一样的机器在同一网络里,肯定会打架。
启动克隆后的虚拟机之前,最好先做些调整:
- 方法一(推荐):在第一次启动克隆体时,通过VNC或控制台连接进去,赶紧修改主机名(
hostnamectl set-hostname new-hostname)和IP地址(编辑/etc/netplan/或/etc/sysconfig/network-scripts/下的网络配置文件)。 - 方法二(自动化):如果使用Cloud-init这类工具,它可以帮你在首次启动时自动完成这些配置(生成新主机名、SSH密钥、扩展磁盘等),特别方便批量克隆,很多现代的Linux镜像都内置了它。
- 来源参考:Cloud-init的官方文档和很多云平台最佳实践中都强调其在虚拟机初始化(包括克隆后)中的作用。
最后
KVM克隆的本质就是“复制磁盘文件 + 修改并注册新配置”,关机克隆最省心,热克隆适合不能停机的场景但稍复杂,别忘了克隆完后处理系统内部的唯一性信息,不然网络冲突会让你头疼,多练几次,熟悉了之后几分钟就能搞出一台新环境来。

本文由颜泰平于2026-01-19发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/83848.html
