侧边栏壁纸
博主头像
liveJQ博主等级

沒有乐趣,何来开始

  • 累计撰写 190 篇文章
  • 累计创建 70 个标签
  • 累计收到 2 条评论

Virtualizor 添加自定义模版

liveJQ
2025-07-01 / 0 评论 / 0 点赞 / 5 阅读 / 3,127 字

直接使用官方云镜像

现在常用的发行版基本都会提供 cloud image 下载,获取到的镜像可用于基于 KVM 架构的虚拟化平台。

wget https://old.kali.org/cloud-images/kali-2025.2/kali-linux-2025.2-cloud-genericcloud-amd64.tar.xz && tar -xf kali-linux-2025.2-cloud-genericcloud-amd64.tar.xz

可以看到解压出来的 RAW 格式体积有 12GB 非常大,这种大小适合那些直接安装系统使用的,不需要再手动扩容了。但是对于我们这种使用云架构的系统来说,有点浪费存储空间了,实际上里面真实有效的数据其实是很小的,清除无效数据后作为系统模板放置起来,安装系统的时候再调整到实际需要的大小即可。

精简镜像

virt-sparsify 压缩(推荐)

安装 virt-sparsify

apt install libguestfs-tools -y

virt-sparsify 会自动清理 RAW 镜像里的无用空间,然后再转换为 qcow2 可伸缩的格式。

root@ubuntu:/var/virtualizor/kvm# virt-sparsify --compress --convert qcow2 disk.raw disk.qcow2
[   0.1] Create overlay file in /tmp to protect source disk
[   0.1] Examine source disk
 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[  45.4] Fill free space in /dev/sda1 with zero
 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[ 636.1] Fill free space in /dev/sda15 with zero
 100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ --:--
[ 645.7] Copy to destination and make sparse
[ 858.4] Sparsify operation completed with no errors.
virt-sparsify: Before deleting the old disk, carefully check that the 
target disk boots and works correctly.

qemu-img 压缩

不使用工具的话,可以先手动填充零,再用 qemu-img 直接压缩。

挂载镜像

guestmount -a disk.raw -i /mnt

将镜像空闲空间置零

dd if=/dev/zero of=/mnt/zero.fill bs=1M || true
sync
rm -f /mnt/zero.fill
sync
guestunmount /mnt

最后再转换成 qcow2 格式(转换过程会忽略置零块,从而使转换后的镜像体积变小)

qemu-img convert -c -O qcow2 disk.raw disk.qcow2

制作镜像模版

如果实在找不到官网提供的镜像,其实也可以自己制作,只需要像往常一样先使用官方提供的 ISO 镜像安装好系统。

这里以 ubuntu 20.04 举例:

  1. 安装前建议分配最小的存储空间即可,例如:我这里分配 5G 作为系统盘。
  2. 安装过程需要注意,网络选择DHCP,创建一个所有镜像通用的普通用户(具有 sudo 权限)作为保底。
  3. 安装好之后可以登录进去清除下日志缓存临时文件什么的,虽然作用不大。还有最重要的一点,需要删除掉安装时自动生成的唯一标识,避免引起一些不必要的冲突。最后将空闲空间全部置零。

清理日志和缓存

apt clean && apt autoremove -y   # Ubuntu/Debian
yum clean all                    # CentOS
rm -rf /var/log/*                # 清空日志
rm -rf /tmp/*                    # 清空临时文件
> /etc/machine-id		 # 清空系统唯一标识符
> /var/lib/dbus/machine-id       # 清空系统唯一标识符
history -c                       # 清空 shell 历史

如果不清理 machine-id 会有什么影响?
所有用这个模板开的 VPS 拥有相同 machine-id,这会导致系统认为它们是同一台机器。可能引发的问题:
日志/监控混乱:journald、syslog、Prometheus 之类工具,可能会认为多个 VPS 是同一个来源。
DBus 冲突:某些依赖 machine-id 的应用(比如桌面环境、systemd 组件)可能出问题。
网络管理异常:NetworkManager、systemd-networkd 可能用 machine-id 生成接口 UUID 标识。
集群/认证冲突:Kubernetes、Ceph 等分布式系统里,节点 ID 可能重复。
换句话说:单机环境可能没感觉,但一旦涉及到集群、监控、认证,问题就会显现。

置零空闲空间

  • Linux 系统
dd if=/dev/zero of=/EMPTY bs=1M
sync
rm -f /EMPTY
  • Windows 系统
sdelete -z C:

做完以上操作后关机,然后在从节点(Slave)找到对应的虚拟系统文件。我这里的虚拟系统文件都存储在/home/vms目录下,以 raw 的格式。

使用 virt-sparsify 压缩

root@hk-slave-a:/home/vms# virt-sparsify --compress --convert qcow2 v1001-dV2a0i3aODAhHKMJ-K3m6QlF6o9HxDQte.raw ubuntu-20.04_x86_64.qcow2

最终得到了 1.1G 的系统模版。

添加模版

有时候制作的模版找不到对应的系统,就需要自己“添加发行版”,自己定义名字、说明、还有 64x64 的 LOGO 图标。

获取到的镜像(img/qcow2)文件放置到指定位置(/var/virtualizor/kvm)后,在 Virtualizor Master 控制面板点击“媒体>添加模版”。

这里需要注意文件名,它会自动添加系统模版名字作为开头,所以此前放置的自定义镜像也需要按这个要求命名,它才能在 kvm 目录里面找到对应的文件。例如:这里是 ubuntu-20.04_x86_64.qcow2 。

0

评论区