本指南旨在制作一个体积精简、账户纯净,且具备自动感知硬盘大小自动扩容能力的母带模板。


第一阶段:虚拟机环境准备

  1. 新建 VM:在 PVE 中创建一个新虚拟机(如 ID 9001)。
  2. 硬件配置
  • CPU:类别选择 host(为了算力最大化)。
  • 磁盘:建议初始给 16GB
  • 网络:确保可以访问外网。
  1. 系统安装:安装 Ubuntu 22.04 Desktop,建议分区选 LVM 模式。

第二阶段:内部环境打磨 (关键)

  1. 安装核心工具
sudo apt update && sudo apt install -y cloud-init cloud-guest-utils qemu-guest-agent cloud-initramfs-growroot
  1. 配置 Cloud-Init
    sudo nano /etc/cloud/cloud.cfg 确认包含 - growpart- resizefs
  2. 预装工具:根据需求安装 docker.iogit 等。

第三阶段:封箱前的“洗白”与置零

  1. 清理状态
sudo cloud-init clean --logs
history -c && history -w
  1. 物理置零 (瘦身核心)
    将磁盘剩余空间填满零,以便后续压缩算法能识别并剔除这些空块。
sudo dd if=/dev/zero of=/zero.txt bs=1M
sudo rm /zero.txt
sudo shutdown -h now

第四阶段:镜像导出与瘦身压缩 (重要补充)

此阶段在 PVE 宿主机的 Shell 终端执行。

  1. 定位源磁盘文件
    找到 VM 9001 的磁盘路径(通常在 /dev/pve/vm-9001-disk-0)。
  2. 导出并极致压缩
    使用 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 中。

  1. 创建新 VM 壳子(例如 ID 9002):
# 创建一个没有硬盘的虚拟机
qm create 9002 --name Ubuntu-Gold-Template --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
  1. 导入压缩后的磁盘
# 将刚才瘦身成功的 qcow2 导入进 9002
qm importdisk 9002 /var/lib/vz/template/iso/ubuntu-gold-master.qcow2 local-lvm
  1. 关联磁盘并设为引导
    在 Web 界面将新导入的 Unused Disk 双击添加,并在 Options -> Boot Order 中设为首选。

第六阶段:转换为模板

回到 PVE Web 界面:

  1. 添加 Cloud-Init 设备
  • 在 VM 9002 的 硬件 -> 添加 -> Cloud-Init Drive
  1. 配置显示器
  • 为了兼容性,建议将“显示”改为 VirtIO-GPU 或开启 Serial Terminal
  1. 最终转换
  • 右键点击 VM 9002 -> 转换为模板 (Convert to Template)

💡 为什么这样做?

  • 逻辑闭环:如果不经过第四、五阶段,你的模板本质上还是那个“16GB 的大块头”。
  • 存储效率:通过 qcow2 -c 压缩后,你不仅节省了宿主机空间,以后克隆新机器的速度也会因为物理读取量减小而大幅提升。