cloud-init 是专为云环境中虚拟机的初始化而开发的工具,可以依据模板文件对虚拟机进行配置用户及密码,设置主机名,配置网络,扩容分区等功能。
cloud-image 是专为云服务器编译的镜像,需要 cloud-init 或其他初始化工具初始化后正常使用。有了cloud-init 和cloud-image,我们可以很轻易地在 PVE 上批量克隆设置Linux虚拟机。
cloud images下载地址
下载不下来请使用科学上网
centos: http://cloud.centos.org/centos/ ubuntu: http://cloud-images.ubuntu.com/releases/ debian: https://cloud.debian.org/images/cloud/OpenStack/ fedora: https://alt.fedoraproject.org/cloud/ rehat7: https://access.redhat.com/downloads/content/69/ver=/rhel---7/x86_64/product-downloads opensuse: https://software.opensuse.org/distributions/leap#JeOS-ports
本文以 ubuntu 22.04 LTS 和 PVE 8.3.0 为例。
创建虚拟机
下载 ubuntu cloud-image
ubuntu 官网提供了多个版本的 cloud image 镜像,可依照要求选择下载。
https://cloud-images.ubuntu.com/releases/
以 ubuntu 22.04 LTS 为例,进入对应的文件夹,找到最下方的“release/”:
下载文件名为“ubuntu-22.04-server-cloudimg-amd64.img”的镜像:
最为推荐img格式的镜像,导入很简单。
将镜像导入 PVE 中
按照下图的步骤打开上传界面,选择本地下载好的img并且上传。 上传完毕后,查看是否成功上传。
创建虚拟机并导入镜像
打开 PVE 的 web 界面,创建虚拟机,“操作系统”中,选择“不使用任何介质”,客户机操作系统的类别选择 Linux,版本选择 6.x – 2.6 Kernel
“系统”中,显卡和 SCSI 控制器保持默认,机型选择“q35”,BIOS 选择“OVMF (UEFI)”,勾选添加 EFI 磁盘和预注册密钥。可以选择勾选 Qemu 代理(虚拟机中安装相应软件后可以在 PVE web段的虚拟机详情中查看 IP 地址)。
磁盘无须自定,待会儿要删掉。
CPU 和 内存 按照个人需求进行更改。网络保持默认即可。
创建完毕后,打开虚拟机的“硬件”选项,分离并移除硬盘:
回到 ssh 中,执行以下命令将 cloud image 导入到虚拟机中。
qm importdisk <vmid> /var/lib/vz/template/iso/ubuntu-22.04-server-cloudimg-amd64.img local其中,vmid是创建虚拟机后的 虚拟机 ID,可在 PVE web端的侧边栏中看到。
ubuntu-22.04-server-cloudimg-amd64.img**为镜像文件名,可能需要更改。
local是存储池,根据你存储硬盘文件的分区而定,此处默认local。
导入成功后应该能看到回显:
transferred 1.0 GiB of 1.0 GiB (99.20%)transferred 1.0 GiB of 1.0 GiB (100.00%)transferred 1.0 GiB of 1.0 GiB (100.00%)unused0: successfully imported disk 'local:123/vm-123-disk-5.raw'此时回到虚拟机的硬件菜单,可以看到一个新的硬盘:
选中,单击上方的“编辑”,将“总线”更改为SATA或**,之后点击“添加”:
此时会有一个“硬盘0 (SATA)”,再次选中,选择上方的“磁盘操作”—“调整大小”:
在此可以输入增量大小:
添加一个“Cloud-init”设备:

这里的总线协议不需要修改,保持默认即可。只需要选择你的存放硬盘的目录即可。
之后点击左边栏的“Cloud-Init”,在这里可以编辑用户及密码,ssh公钥和 IP 地址了,编辑完成后,要点击上方的“重生成镜像”。
建议大家生成一个ssh公钥连接ssh,cloud image 默认禁止以密码连接 ssh。
完成后,点击左边的“选项”—“引导顺序”,勾选“sata0”并拖到第一位:
然后就可以启动系统了!
如果不想将此转换成模板的话,教程到此就结束了。
想要转换成模板便于以后多开的小伙伴们,可以继续往下看。
克隆虚拟机
转换模板
测试一下没有问题的话,关闭虚拟机。
执行下述步骤前,请先确保选择正确的虚拟机,此操作无法挽回。
点击右上角的“更多”—“转换成模板”:
此时概要会变成下图这样:
左边栏的图标也发生变化:
这时,刚刚的虚拟机变成为了“模板”。
我们可以克隆该虚拟机来创建多个 ubuntu 系统。
克隆虚拟机
点击右上角的“更多”—“克隆”:
根据个人需要选择“链接克隆”或“完整克隆”。其中,“完整克隆”可以更改目标存储池。
链接克隆 与 完整克隆 的区别 链接克隆的性能可能比完整克隆的低。完整克隆则是一个完全独立的虚拟机,其性能与克隆的虚拟机相同,但是克隆时间长。我本人是一直用“完整克隆”的。
以下是链接克隆与完整克隆的详细介绍:
-
磁盘底层机制 链接克隆:基于qcow2格式的”写时复制”技术,仅生成增量磁盘文件(通常为10MB的meta数据文件),实际数据块仍指向母模板磁盘。相当于在母模板上叠加一个透明差分层。 完整克隆:执行深拷贝生成独立磁盘镜像,如将qcow2转换为raw格式,完全复制母盘所有数据块。
-
性能差异根源
链接克隆I/O路径:请求 -> 增量盘 -> 未修改部分回查母模板 -> 合并数据返回
完整克隆I/O路径:请求 -> 独立磁盘直读
- 模板管理策略
当母模板版本升级时:
链接克隆需逐个重建绑定 完整克隆可继续运行,但无法自动获得模板更新
- 适用场景建议 链接克隆:快速创建临时测试环境(平均创建速度提升90倍) 完整克隆:生产环境部署、需要长期运行的业务系统 附加技术点:在Proxmox中,即使删除母模板,通过qemu-img commit命令可将链接克隆转为独立磁盘(需停机操作)。
本篇完
本文遵守 CC BY-NC-SA 4.0 协议,转载请注明出处。 作者: Mapleleaf
Github: https://github.com/mapleawaa