
Debian 13 Minimal SolusVM v1 KVM 模板制作完整教程
本文介绍如何制作一个适用于 SolusVM v1.29.x 的 Debian 13 amd64 Minimal KVM 模板,包含系统安装、磁盘分区、网络配置、SSH 登录、模板清理、QCOW2 压缩、SolusVM 参数设置、上传和故障排查。
推荐最终结构:Debian 13 Minimal、Generation 2、Virtio 磁盘、MBR 分区表、Legacy BIOS、ext4 根分区、独立 Swap 分区。
一、最终模板参数
| 项目 | 推荐值 |
|---|---|
| 系统 | Debian 13 amd64 Minimal |
| 虚拟化 | KVM |
| Generation | 2 |
| 磁盘驱动 | virtio |
| 启动模式 | Legacy BIOS / SeaBIOS |
| 分区表 | MBR / msdos |
| 根分区 | /dev/vda1 |
| Swap 分区 | /dev/vda2 |
| Partition # to Resize | 1 |
| Swap Partition # | 2 |
| 模板文件名 | linux-debian-13-x86_64-minimal-gen2-v1.gz |
二、为什么推荐 MBR 和 Legacy BIOS
SolusVM v1 的 Generation 2 模板最适合标准 Linux 分区。为了避免安装后出现“Boot failed: not a bootable disk”,建议第一次制作 Debian 13 模板时使用 MBR 和 Legacy BIOS。
不建议首次制作时使用以下结构:
- UEFI-only
- GPT + EFI-only
- LVM
- RAID
- 加密磁盘
- Extended Partition
- Logical Partition
- Btrfs 或 ZFS
推荐的磁盘结构如下:
磁盘:/dev/vda
/dev/vda1 ext4 /
/dev/vda2 swap
如果使用 GPT 并包含 EFI 分区,根分区可能变成第 2 个分区,Swap 变成第 3 个分区,SolusVM 参数也必须改为 2 和 3。为了降低兼容问题,推荐使用 MBR。
三、创建制作模板的临时虚拟机
建议创建一台专门用于制作模板的临时 KVM 虚拟机。
| 项目 | 推荐值 |
|---|---|
| CPU | 1 vCPU |
| 内存 | 1 GB 或以上 |
| 磁盘 | 建议 8 GB 或 10 GB |
| 磁盘驱动 | virtio |
| 网卡 | virtio |
| 启动模式 | Legacy BIOS |
| 系统 ISO | Debian 13 amd64 netinst |
6 GB 可以安装 Debian 13 Minimal,但如果后续执行系统升级、安装内核或安装大量软件,剩余空间可能不足。推荐使用 8 GB 或以上磁盘。
重要:模板的虚拟容量不能大于新虚拟机的磁盘容量。如果模板虚拟容量为 8 GB,新虚拟机只能分配 6 GB,则安装可能失败或无法启动。
四、安装 Debian 13 Minimal
- 使用 Debian 13 amd64 安装 ISO 启动。
- 确认使用 Legacy BIOS 模式启动安装程序。
- 选择手动分区。
- 不要选择 LVM、RAID 或加密磁盘。
- 创建 MBR/msdos 分区表。
- 创建 ext4 根分区和 Swap 分区。
- 将 GRUB 安装到整个磁盘。
推荐分区:
| 分区 | 用途 | 文件系统 |
|---|---|---|
| /dev/vda1 | / | ext4 |
| /dev/vda2 | Swap | swap |
如果使用 8 GB 磁盘,可以分配:
/dev/vda1 约 7 GB ext4 /
/dev/vda2 512 MB swap
安装 GRUB 时选择:
/dev/vda
不要选择:
/dev/vda1
五、安装完成后的基础检查
登录临时虚拟机后执行:
cat /etc/os-release
cat /etc/debian_version
uname -a
lsblk -f
findmnt /
swapon --show
df -h
应确认:
- 系统为 Debian 13。
- 根分区是 ext4。
- Swap 已启用。
- 磁盘设备为 vda 或经过确认的实际设备名。
- 根分区没有使用 LVM。
六、安装模板所需软件
apt-get update
apt-get install -y \
openssh-server \
sudo \
ca-certificates \
curl \
wget \
vim-tiny \
less \
iproute2 \
iputils-ping \
dnsutils \
net-tools \
ifupdown \
isc-dhcp-client \
bash-completion \
rsync \
qemu-guest-agent
启用 SSH:
systemctl enable ssh
systemctl restart ssh
systemctl status ssh --no-pager
如果宿主机支持 QEMU Guest Agent,可以启用:
systemctl enable --now qemu-guest-agent
七、配置 Debian 13 软件源
首先确认系统代号:
. /etc/os-release
echo "$VERSION_CODENAME"
Debian 13 通常使用 trixie 代号。可以创建 Debian 13 的软件源配置:
cat >/etc/apt/sources.list.d/debian.sources <<'EOF'
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie trixie-updates
Components: main contrib non-free non-free-firmware
Types: deb
URIs: http://security.debian.org/debian-security
Suites: trixie-security
Components: main contrib non-free non-free-firmware
EOF
删除旧的软件源文件:
rm -f /etc/apt/sources.list
重新生成软件索引:
rm -rf /var/lib/apt/lists/*
mkdir -p /var/lib/apt/lists/partial
apt-get update
必须确保执行结果没有以下错误:
- 404 Not Found
- GPG error
- Splitting up failed
- Temporary failure resolving
- Failed to fetch
如果出现 “Splitting up ... failed”,通常是磁盘空间不足,而不是软件源地址错误。检查:
df -h
df -i
清理 APT 缓存:
apt-get clean
rm -rf /var/lib/apt/lists/*
mkdir -p /var/lib/apt/lists/partial
apt-get update
八、配置 root 远程 SSH 登录
如果希望新虚拟机可以使用 Xshell 通过 root 密码登录,需要安装 SSH,并允许 root 密码认证。
设置临时 root 密码:
passwd root
创建 SSH 配置:
cat >/etc/ssh/sshd_config.d/99-solusvm-template.conf <<'EOF'
PermitRootLogin yes
PasswordAuthentication yes
KbdInteractiveAuthentication no
UsePAM yes
EOF
检查 SSH 配置是否正确:
sshd -t
重新启动 SSH:
systemctl restart ssh
systemctl enable ssh
确认最终配置:
sshd -T | grep -E 'permitrootlogin|passwordauthentication'
应看到:
permitrootlogin yes
passwordauthentication yes
模板制作前删除旧的 SSH 主机密钥:
rm -f /etc/ssh/ssh_host_*
新虚拟机第一次启动后,系统会重新生成 SSH 主机密钥。这样每台虚拟机都拥有独立的 SSH 指纹。
九、网络配置要求
模板中不要保留制作虚拟机的静态 IP、MAC 地址、网关和 DNS。新虚拟机的网络参数应该由 SolusVM 重新分配。
检查当前网络:
ip link
ip addr
ip route
cat /etc/resolv.conf
删除可能残留的旧网卡规则:
rm -f /etc/udev/rules.d/70-persistent-net.rules
不要同时启用多个网络管理器。以下组件不要重复管理同一块网卡:
- NetworkManager
- ifupdown
- systemd-networkd
- cloud-init 网络模块
在 SolusVM 模板设置中应启用:
Configure Networking: 勾选
新虚拟机启动后检查:
ip addr
ip route
ping -c 4 网关地址
ping -c 4 软件源域名
十、Hostname 和机器身份清理
模板不能保留制作虚拟机的唯一机器身份。
设置临时主机名:
hostnamectl set-hostname debian13-template
检查:
cat /etc/hostname
cat /etc/hosts
hostnamectl
清理 machine-id:
truncate -s 0 /etc/machine-id
rm -f /var/lib/dbus/machine-id
如果系统需要符号链接:
ln -s /etc/machine-id /var/lib/dbus/machine-id 2>/dev/null || true
十一、清理敏感信息、日志和临时文件
模板中不能保留密码、密钥、测试历史或生产环境信息。
rm -f /root/.bash_history
find /home -maxdepth 2 -name .bash_history -type f -delete
rm -f /root/.ssh/authorized_keys
rm -f /etc/ssh/ssh_host_*
rm -f /etc/machine-id
rm -f /var/lib/dbus/machine-id
清理日志:
journalctl --rotate || true
journalctl --vacuum-time=1s || true
find /var/log -type f -exec truncate -s 0 {} \;
清理临时文件:
find /tmp -mindepth 1 -maxdepth 1 -exec rm -rf {} +
find /var/tmp -mindepth 1 -maxdepth 1 -exec rm -rf {} +
清理 APT 缓存:
apt-get clean
rm -rf /var/lib/apt/lists/*
mkdir -p /var/lib/apt/lists/partial
不要删除以下目录:
- /var/lib/dpkg
- /etc/passwd
- /etc/shadow
- /boot
- /etc
- 整个 /var/lib
十二、检查 fstab
查看当前 fstab:
cat /etc/fstab
对于 Virtio 磁盘,推荐确认根分区和 Swap 对应关系:
/dev/vda1 / ext4 defaults,noatime 0 1
/dev/vda2 none swap sw 0 0
如果系统实际使用 sda,则应改成:
/dev/sda1 / ext4 defaults,noatime 0 1
/dev/sda2 none swap sw 0 0
确认设备名:
lsblk
测试 fstab:
mount -a
swapon -a
swapon --show
如果 mount 或 swapon 报错,不能继续制作模板。
十三、检查和安装 GRUB
针对 MBR/Legacy BIOS 模板,执行:
apt-get install -y grub-pc grub-pc-bin
确认磁盘设备:
lsblk
如果磁盘是 /dev/vda:
grub-install --target=i386-pc /dev/vda
update-grub
如果磁盘是 /dev/sda:
grub-install --target=i386-pc /dev/sda
update-grub
必须安装到整个磁盘,不要安装到分区:
正确:/dev/vda
错误:/dev/vda1
十四、制作前最终检查
cat /etc/os-release
uname -r
lsblk -f
findmnt /
swapon --show
ip addr
ip route
df -h
free -h
systemctl is-enabled ssh
sshd -t
apt-get update
确认以下项目全部正常:
- Debian 13 版本正确。
- 根分区为 ext4。
- Swap 已启用。
- SSH 服务正常。
- 网络有默认路由。
- APT 更新无错误。
- 没有源虚拟机静态 IP。
- 没有敏感信息。
- 磁盘没有 100% 满。
- GRUB 安装到了整个磁盘。
检查完成后关闭虚拟机:
sync
poweroff
不要在虚拟机运行状态下直接读取磁盘制作模板。
十五、使用 SolusVM 官方脚本制作
在宿主机上确认虚拟机已经关机,然后执行预扫描:
/scripts/kvmtemplate \
--mode=prescan \
--vmid=kvm9568 \
--generation=2
如果输出类似:
/dev/vda1 filesystem ext4
/dev/vda2 filesystem swap
则 SolusVM 参数为:
Partition # to Resize: 1
Swap Partition #: 2
执行模板准备:
/scripts/kvmtemplate \
--mode=prepare \
--vmid=kvm9568 \
--generation=2
准备过程可能会清理 SSH 主机密钥、旧 MAC 地址和部分网络规则。执行完成后,仍应人工检查 fstab、Hostname、网络和日志。
制作模板:
mkdir -p /home/solusvm/template-tmp
/scripts/kvmtemplate \
--mode=package \
--vmid=kvm9568 \
--generation=2 \
--tmpdir=/home/solusvm/template-tmp
脚本通常会输出一个临时模板文件,例如:
/home/solusvm/kvm/template/template-xxxxxxxx.gz
将它改名:
mv \
/home/solusvm/kvm/template/template-xxxxxxxx.gz \
/home/solusvm/kvm/template/linux-debian-13-x86_64-minimal-gen2-v1.gz
十六、手动 virt-sparsify 制作方式
如果要求不创建备份、不创建快照,并且直接从现有虚拟机磁盘生成模板,可以使用手动方式。
假设源磁盘为:
/dev/media/kvm9568_img
先确认虚拟机已经关机:
pgrep -af '[k]vm9568'
没有 QEMU 进程输出后再继续。
检查源磁盘:
file -sL /dev/media/kvm9568_img
fdisk -l /dev/media/kvm9568_img
qemu-img info /dev/media/kvm9568_img
制作压缩 QCOW2 模板:
mkdir -p /home/solusvm/kvm/template
mkdir -p /home/solusvm/template-tmp
TMPDIR=/home/solusvm/template-tmp \
virt-sparsify \
-v \
--format raw \
--convert qcow2 \
--compress \
-o compat=0.10 \
/dev/media/kvm9568_img \
/home/solusvm/kvm/template/.linux-debian-13-x86_64-minimal-gen2-v1.gz.tmp
检查模板:
qemu-img check --force-share \
/home/solusvm/kvm/template/.linux-debian-13-x86_64-minimal-gen2-v1.gz.tmp
设置权限:
chown qemu:qemu \
/home/solusvm/kvm/template/.linux-debian-13-x86_64-minimal-gen2-v1.gz.tmp
chmod 0644 \
/home/solusvm/kvm/template/.linux-debian-13-x86_64-minimal-gen2-v1.gz.tmp
正式替换:
mv -f \
/home/solusvm/kvm/template/.linux-debian-13-x86_64-minimal-gen2-v1.gz.tmp \
/home/solusvm/kvm/template/linux-debian-13-x86_64-minimal-gen2-v1.gz
十七、模板格式验证
file /home/solusvm/kvm/template/linux-debian-13-x86_64-minimal-gen2-v1.gz
qemu-img info \
/home/solusvm/kvm/template/linux-debian-13-x86_64-minimal-gen2-v1.gz
qemu-img check --force-share \
/home/solusvm/kvm/template/linux-debian-13-x86_64-minimal-gen2-v1.gz
正确结果应类似:
QEMU QCOW Image
file format: qcow2
virtual size: 6.0G
disk size: 小于虚拟容量
No errors were found on the image.
注意:不要用以下命令判断 SolusVM 模板是否正确:
gzip -t linux-debian-13-x86_64-minimal-gen2-v1.gz
SolusVM v1 的模板文件虽然使用 .gz 后缀,但实际内容通常是启用了压缩簇的 QCOW2 镜像。
十八、SolusVM 面板参数
| 字段 | 推荐值 |
|---|---|
| Template Name | Debian 13 64bit Minimal |
| Description | Debian 13 amd64 Minimal KVM Template |
| Generation | 2 |
| Template | linux-debian-13-x86_64-minimal-gen2-v1.gz |
| Status | Active |
| Arch | x86_64 |
| Disk Driver | virtio |
| Change Root/Admin Password | 勾选 |
| Configure Networking | 勾选 |
| No sparse copying | 不勾选 |
| Partition # to Resize | 1 |
| Swap Partition # | 2 |
| CPU Model | default |
| CPU Match | default |
| CPU Topology | 不启用 |
十九、模板文件上传验证
上传前先计算源文件 SHA-256:
sha256sum \
/home/solusvm/kvm/template/linux-debian-13-x86_64-minimal-gen2-v1.gz
上传到目标服务器时,建议先使用临时文件名:
linux-debian-13-x86_64-minimal-gen2-v1.gz.part
上传完成后,在目标服务器执行:
stat -c '%s' linux-debian-13-x86_64-minimal-gen2-v1.gz.part
sha256sum linux-debian-13-x86_64-minimal-gen2-v1.gz.part
qemu-img check --force-share linux-debian-13-x86_64-minimal-gen2-v1.gz.part
确认文件大小、SHA-256 和镜像检查全部正确后,再改名:
mv -f \
linux-debian-13-x86_64-minimal-gen2-v1.gz.part \
linux-debian-13-x86_64-minimal-gen2-v1.gz
二十、第一次安装测试
模板制作完成后,不要立即批量使用。建议先创建一台测试虚拟机。
| 测试项目 | 要求 |
|---|---|
| Generation | 2 |
| Disk Driver | virtio |
| 磁盘容量 | 不小于模板虚拟容量 |
| Resize Partition | 1 |
| Swap Partition | 2 |
| Change Password | 勾选 |
| Configure Networking | 勾选 |
测试虚拟机启动后执行:
cat /etc/os-release
hostnamectl
lsblk -f
df -h
swapon --show
ip addr
ip route
systemctl status ssh --no-pager
apt-get update
然后测试:
- VNC 控制台。
- root SSH 密码登录。
- IPv4 地址。
- IPv6 地址。
- DNS 解析。
- 默认路由。
- APT 更新。
- 关机和重启。
- 重启后网络是否自动恢复。
- 磁盘和 Swap 是否正常。
二十一、常见故障
1. Boot failed: not a bootable disk
- 新虚拟机磁盘小于模板虚拟容量。
- 模板使用了 UEFI,但虚拟机使用 SeaBIOS。
- 模板使用 GPT/EFI-only,但没有正确配置 EFI。
- GRUB 安装到了分区而不是整个磁盘。
- Partition # to Resize 填错。
- 模板文件传输不完整。
- 模板不是有效 QCOW2。
检查:
qemu-img info linux-debian-13-x86_64-minimal-gen2-v1.gz
qemu-img check --force-share linux-debian-13-x86_64-minimal-gen2-v1.gz
2. VNC 连接失败
Debian Minimal 默认没有桌面环境,VNC 正常时应该显示文本控制台,不是图形桌面。
如果显示 1008、WebSocket 失败或 Failed to connect,检查:
pgrep -af kvm9568
virsh list --all
virsh dumpxml kvm9568 | grep -E 'graphics|video|disk|boot'
VNC 连接失败通常属于 QEMU、SolusVM 节点、WebSocket 代理或虚拟机启动问题,不代表 Debian 必须安装桌面环境。
3. 虚拟机没有网络
ip link
ip addr
ip route
cat /etc/resolv.conf
systemctl status networking --no-pager
systemctl status NetworkManager --no-pager
重点检查:
- 是否保留了旧 MAC 地址规则。
- 是否写死了源虚拟机 IP。
- SolusVM 是否勾选 Configure Networking。
- 虚拟机网卡名称是否发生变化。
- 是否同时运行多个网络管理器。
- 是否有默认路由。
4. APT 出现 404
检查系统是否误用了 Debian 11、Debian 12 或其他版本的软件源:
grep -R . /etc/apt/sources.list /etc/apt/sources.list.d/
Debian 13 应使用 trixie、trixie-updates 和 trixie-security,不要复制旧版本模板的软件源。
5. APT 出现 Splitting up failed
首先检查磁盘空间:
df -h
df -i
如果根分区已经 100% 满:
apt-get clean
rm -rf /var/lib/apt/lists/*
mkdir -p /var/lib/apt/lists/partial
apt-get update
如果磁盘只有 4 GB 或更小,建议扩容,而不是反复清理缓存。
二十二、最终发布前检查清单
- 系统版本为 Debian 13。
- 架构为 x86_64。
- 使用 Generation 2。
- 磁盘驱动为 virtio。
- 磁盘使用 MBR/Legacy BIOS。
- 根分区为第 1 分区。
- Swap 为第 2 分区。
- GRUB 安装在整个磁盘。
- root 可以通过 SSH 密码登录。
- SSH host key 已清理。
- machine-id 已清理。
- 旧网卡规则已清理。
- 源虚拟机静态 IP 已清理。
- APT 更新没有报错。
- 没有遗留密码、密钥和日志。
- 虚拟机已经关机。
- 模板文件是 QCOW2 格式。
- QCOW2 压缩已启用。
- qemu-img check 无错误。
- 上传后的 SHA-256 与源文件一致。
- 新虚拟机磁盘容量不小于模板虚拟容量。
- 已经完成至少一台测试虚拟机安装。
二十三、推荐的最终配置摘要
系统:
Debian 13 amd64 Minimal
启动:
Legacy BIOS / SeaBIOS
分区:
/dev/vda1 ext4 /
/dev/vda2 swap
SolusVM:
Generation = 2
Disk Driver = virtio
Partition # to Resize = 1
Swap Partition # = 2
Configure Networking = enabled
Change Root/Admin Password = enabled
模板制作:
virt-sparsify
--convert qcow2
--compress
-o compat=0.10
模板文件:
linux-debian-13-x86_64-minimal-gen2-v1.gz
只要按照“MBR + BIOS + ext4 根分区 + Swap 分区 + GRUB 安装到整个磁盘 + Generation 2 + virt-sparsify 压缩”这套组合制作,Debian 13 模板在 SolusVM v1 中的兼容性和稳定性最高。
```