链式克隆虚拟机,实现一秒开十台,每台虚拟机占用不到100MB!
概述
本教程记录在飞牛NAS(FnOS)上实现 KVM 虚拟机链式克隆的完整过程。链式克隆基于 qcow2 的 backing file 技术,克隆虚拟机仅存储与模板的差异数据,极大节省磁盘空间。
优势
- 创建速度极快 — 秒级完成
- 磁盘空间极省 — 克隆初始仅占约 256KB ~ 数百KB
- 批量部署方便 — 一个模板可派生出多个克隆
操作步骤
第一步:创建源虚拟机
- 在飞牛 Web 管理界面中,正常创建一台虚拟机并安装好操作系统。如果是Windows务必要执行通用化 运行菜单输入
sysprep - 完成所有系统配置和软件安装
- 关闭虚拟机(模板必须从关机状态的虚拟机制作)
本教程以飞牛创建的 Ubuntu 24.04 虚拟机 za66xazz 为例。
第二步:确认源虚拟机信息
列出所有虚拟机
virsh list --all
飞牛虚拟机名称不是真实命令中的名称,请根据具体配置信息确认
sudo virsh dominfo za66xazz

查看磁盘信息:
sudo virsh domblklist za66xazz

查看磁盘镜像详情:
sudo qemu-img info /vol1/vm/pool/c2656788-aa6b-4b5f-9e96-a220aac9ae65-m2iq.qcow2

第三步:复制源磁盘为模板基础镜像
创建一个专门的模板文件夹

将源虚拟机的磁盘移动或复制到模板目录:
sudo cp /vol1/vm/pool/c2656788-aa6b-4b5f-9e96-a220aac9ae65-m2iq.qcow2 \
/vol1/1000/templates/ubuntu24.04-base.qcow2
💡 提示:这里使用
cp而非移动,源虚拟机保持不变,便于确认无误后再决定是否删除。
第四步:将模板镜像设为只读
这一步非常重要! 所有克隆都依赖此模板镜像,一旦被修改会影响所有克隆虚拟机:
sudo chmod 444 /vol1/1000/templates/ubuntu24.04-base.qcow2
验证:
ls -lh /vol1/1000/templates/ubuntu24.04-base.qcow2
输出:
-r--r--r--+ 1 root root 4.5G Mar 14 20:37 /vol1/1000/templates/ubuntu24.04-base.qcow2
第五步:创建链式克隆磁盘
使用 qemu-img create 基于模板创建链式克隆磁盘:
sudo qemu-img create -f qcow2 -F qcow2 \
-b /vol1/1000/templates/ubuntu24.04-base.qcow2 \
/vol1/1000/templates/disk/ubuntu24-clone-01.qcow2
输出:
Formatting '/vol1/1000/templates/ubuntu24-clone-01.qcow2', fmt=qcow2
cluster_size=65536 extended_l2=off compression_type=zlib size=21474836480
backing_file=/vol1/1000/templates/ubuntu24.04-base.qcow2 backing_fmt=qcow2
lazy_refcounts=off refcount_bits=16
参数说明:
| 参数 | 说明 |
|---|---|
-f qcow2 | 克隆磁盘格式为 qcow2 |
-F qcow2 | backing file(模板)的格式为 qcow2 |
-b <路径> | 指定 backing file(模板基础镜像) |
| 最后的路径 | 克隆磁盘的输出路径 |
验证链式克隆磁盘:
sudo qemu-img info /vol1/1000/templates/ubuntu24-clone-01.qcow2

输出:
✅ 关键对比:模板镜像 4.5 GB,克隆磁盘仅 256 KB!
第六步:在飞牛中新建虚拟机并选择导入qcow2
- 新建虚拟机


选择一个存储空间

直接开机即可

注意事项
⚠️ 模板镜像不可修改 — 模板镜像已设为只读(444),所有克隆都依赖此镜像,修改或删除会导致所有克隆虚拟机无法启动。
⚠️ 克隆的虚拟机与模板共用相同的系统配置(hostname、MAC 地址、SSH 密钥等),多台克隆可能产生冲突。建议首次启动后手动修改 hostname 和重新生成 SSH 密钥。