本指南旨在制作一个体积精简、账户纯净,且具备自动感知硬盘大小并自动扩容能力的母带模板。
第一阶段:虚拟机环境准备
- 新建 VM:在 PVE 中创建一个新虚拟机(如 ID 9001)。
- 硬件配置:
- CPU:类别选择
host(为了算力最大化)。 - 磁盘:建议初始给 16GB。
- 网络:确保可以访问外网。
- 系统安装:安装 Ubuntu 22.04 Desktop,建议分区选 LVM 模式。
第二阶段:内部环境打磨 (关键)
- 安装核心工具:
sudo apt update && sudo apt install -y cloud-init cloud-guest-utils qemu-guest-agent cloud-initramfs-growroot
- 配置 Cloud-Init:
sudo nano /etc/cloud/cloud.cfg确认包含- growpart和- resizefs。 - 预装工具:根据需求安装
docker.io、git等。
第三阶段:封箱前的“洗白”与置零
- 清理状态:
sudo cloud-init clean --logs
history -c && history -w
- 物理置零 (瘦身核心):
将磁盘剩余空间填满零,以便后续压缩算法能识别并剔除这些空块。
sudo dd if=/dev/zero of=/zero.txt bs=1M
sudo rm /zero.txt
sudo shutdown -h now
第四阶段:镜像导出与瘦身压缩 (重要补充)
此阶段在 PVE 宿主机的 Shell 终端执行。
- 定位源磁盘文件:
找到 VM 9001 的磁盘路径(通常在/dev/pve/vm-9001-disk-0)。 - 导出并极致压缩:
使用qemu-img将原始磁盘导出为压缩版的.qcow2文件。
# 这里的 -c 参数代表压缩
qemu-img convert -f raw -O qcow2 -c /dev/pve/vm-9001-disk-0 /var/lib/vz/template/iso/ubuntu-gold-master.qcow2
此时,你在 /var/lib/vz/template/iso/ 下看到的镜像文件应该只有 4GB 左右。
第五阶段:重建“黄金模板”虚拟机
为了保证模板的纯净,我们释放这个压缩包到一个全新的 VM 中。
- 创建新 VM 壳子(例如 ID 9002):
# 创建一个没有硬盘的虚拟机
qm create 9002 --name Ubuntu-Gold-Template --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
- 导入压缩后的磁盘:
# 将刚才瘦身成功的 qcow2 导入进 9002
qm importdisk 9002 /var/lib/vz/template/iso/ubuntu-gold-master.qcow2 local-lvm
- 关联磁盘并设为引导:
在 Web 界面将新导入的Unused Disk双击添加,并在 Options -> Boot Order 中设为首选。
第六阶段:转换为模板
回到 PVE Web 界面:
- 添加 Cloud-Init 设备:
- 在 VM 9002 的 硬件 -> 添加 -> Cloud-Init Drive。
- 配置显示器:
- 为了兼容性,建议将“显示”改为
VirtIO-GPU或开启Serial Terminal。
- 最终转换:
- 右键点击 VM 9002 -> 转换为模板 (Convert to Template)。
💡 为什么这样做?
- 逻辑闭环:如果不经过第四、五阶段,你的模板本质上还是那个“16GB 的大块头”。
- 存储效率:通过
qcow2 -c压缩后,你不仅节省了宿主机空间,以后克隆新机器的速度也会因为物理读取量减小而大幅提升。
原创
PVE 镜像与 Cloud-Init 模板制作教程
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
赞赏支持
如果觉得文章对你有帮助,可以请作者喝杯咖啡 ☕
评论交流
欢迎留下你的想法