概述

本教程记录在飞牛NAS(FnOS)上实现 KVM 虚拟机链式克隆的完整过程。链式克隆基于 qcow2 的 backing file 技术,克隆虚拟机仅存储与模板的差异数据,极大节省磁盘空间。

优势

  • 创建速度极快 — 秒级完成
  • 磁盘空间极省 — 克隆初始仅占约 256KB ~ 数百KB
  • 批量部署方便 — 一个模板可派生出多个克隆

操作步骤

第一步:创建源虚拟机

  1. 在飞牛 Web 管理界面中,正常创建一台虚拟机并安装好操作系统。如果是Windows务必要执行通用化 运行菜单输入 sysprep
  2. 完成所有系统配置和软件安装
  3. 关闭虚拟机(模板必须从关机状态的虚拟机制作)

本教程以飞牛创建的 Ubuntu 24.04 虚拟机 za66xazz 为例。

第二步:确认源虚拟机信息

列出所有虚拟机

virsh list --all

飞牛虚拟机名称不是真实命令中的名称,请根据具体配置信息确认

sudo virsh dominfo za66xazz

image.png

查看磁盘信息:

sudo virsh domblklist za66xazz

image.png
查看磁盘镜像详情:

sudo qemu-img info /vol1/vm/pool/c2656788-aa6b-4b5f-9e96-a220aac9ae65-m2iq.qcow2

image.png

第三步:复制源磁盘为模板基础镜像

创建一个专门的模板文件夹

将源虚拟机的磁盘移动或复制到模板目录:

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 qcow2backing file(模板)的格式为 qcow2
-b <路径>指定 backing file(模板基础镜像)
最后的路径克隆磁盘的输出路径

验证链式克隆磁盘:

sudo qemu-img info /vol1/1000/templates/ubuntu24-clone-01.qcow2

image.png
输出:

关键对比:模板镜像 4.5 GB,克隆磁盘仅 256 KB

第六步:在飞牛中新建虚拟机并选择导入qcow2

  1. 新建虚拟机


    选择一个存储空间

    直接开机即可

注意事项

⚠️ 模板镜像不可修改 — 模板镜像已设为只读(444),所有克隆都依赖此镜像,修改或删除会导致所有克隆虚拟机无法启动。

⚠️ 克隆的虚拟机与模板共用相同的系统配置(hostname、MAC 地址、SSH 密钥等),多台克隆可能产生冲突。建议首次启动后手动修改 hostname 和重新生成 SSH 密钥。