1458 字
7 分钟
Debian 13 极简虚拟机模板优化指南

本文记录了从通用物理机内核切换至 linux-image-cloud-amd64,并逐步剥离冗余桌面组件、系统服务及存储阻塞的完整流程。目标是将虚拟机冷启动时间压制在 3 秒内,常驻内存(RAM)降至 270MB 左右,作为 PVE 批量克隆母盘使用。

阶段一:内核层切换至 Cloud 优化内核#

Debian 默认内核包含海量物理外设驱动(声卡、Wi-Fi、蓝牙、图形 DRM),初始化繁重且常驻开销高。Cloud 内核仅保留虚拟化总线(VirtIO 系列),体积极小且启动迅速。

1. 安装云内核并更新引导#

Terminal window
# 更新软件源并安装云内核及配套头文件
sudo apt update
sudo apt install -y linux-image-cloud-amd64 linux-headers-cloud-amd64
# 重启进入云内核
sudo reboot

2. 验证当前生效内核#

重启后验证内核版本,确认带有 -cloud-amd64:

Terminal window
uname -r

3. 清理旧通用内核与头文件#

删除系统预装的通用物理机内核(注意保留带有 cloud 的条目),释放 /boot 分区与磁盘空间:

Terminal window
# 查看当前安装的旧内核具体版本
dpkg -l 'linux-image-*' 'linux-headers-*'
# 精准清除旧版本物理机内核(以 6.12 实际版本为例)
sudo apt purge -y linux-image-6.12.111+deb13-amd64 linux-image-6.12.101+deb13-amd64 \
linux-headers-6.12.111+deb13-amd64 linux-headers-6.12.101+deb13-amd64
# 或使用一键命令清理除 cloud 以外的所有 amd64 官方内核
dpkg -l 'linux-*' | awk '$1=="ii" {print $2}' | grep -E 'amd64$' | grep -v 'cloud' | xargs -r sudo apt purge -y
# 触发依赖清理并刷新 GRUB 引导
sudo apt autoremove --purge -y
sudo update-grub

阶段二:运行目标与 initramfs 精简#

1. 切换为纯无头运行目标(关闭图形服务)#

如果安装时勾选了桌面环境,即使不启动图形界面,部分 display-manager 仍会常驻占用资源:

Terminal window
# 切换默认启动目标为多用户命令行模式
sudo systemctl set-default multi-user.target

2. 裁剪 initramfs 镜像体积#

默认配置会将所有已知驱动打包入内存盘。修改为仅打包当前虚拟机依赖的硬件模块:

Terminal window
# 将 MODULES=most 改为 MODULES=dep
sudo sed -i 's/MODULES=most/MODULES=dep/g' /etc/initramfs-tools/initramfs.conf
# 重新生成 initramfs 并更新引导
sudo update-initramfs -u
sudo update-grub

阶段三:清理无用服务与桌面残留组件#

针对 systemd-analyze blame 暴露出的耗时大户及虚拟机不需要的硬件服务进行拔除。

1. 彻底卸载冗余软件包#

Terminal window
# 卸载打印服务(CUPS)
sudo apt purge -y cups cups-daemon cups-browsed
# 卸载 Wi-Fi 客户端组件(纯有线/虚拟网络无需该服务)
sudo apt purge -y wpasupplicant
# 卸载蓝牙及音频残留
sudo apt purge -y bluez pulseaudio pipewire-audio-client-libraries 2>/dev/null || true
# 自动清理孤立依赖
sudo apt autoremove --purge -y

2. 停用并屏蔽(Mask)无效的系统服务#

Terminal window
# 屏蔽 LVM 监控服务(单盘或无 LVM 快照需求时严重拖慢开机)
sudo systemctl mask lvm2-monitor.service
# 停用硬件传感器与 mDNS 局域网服务发现
sudo systemctl disable --now lm-sensors.service 2>/dev/null || true
sudo systemctl mask avahi-daemon.service avahi-daemon.socket
# 停用控制台物理键盘映射(纯 SSH 环境不需要)
sudo systemctl disable keyboard-setup.service 2>/dev/null || true
# 停用调制解调器与网络等待放行
sudo systemctl disable --now ModemManager.service 2>/dev/null || true
sudo systemctl disable NetworkManager-wait-online.service 2>/dev/null || true
sudo systemctl disable systemd-networkd-wait-online.service 2>/dev/null || true
# 屏蔽 ext4 磁盘扫描检查
sudo systemctl mask e2scrub_reap.service 2>/dev/null || true

3. 限制 systemd-journald 内存日志占用#

避免日志缓存无限吃满物理内存:

Terminal window
sudo sed -i 's/^#SystemMaxUse=/SystemMaxUse=100M/' /etc/systemd/journald.conf
sudo sed -i 's/^#RuntimeMaxUse=/RuntimeMaxUse=30M/' /etc/systemd/journald.conf
sudo systemctl restart systemd-journald

阶段四:存储挂载与启动临界链(Critical Chain)调优#

根据 systemd-analyze critical-chain 分析,开机核心阻塞点通常在等待磁盘 UUID 和同步挂载分区。

1. 解除 /boot/efi 开机串行阻塞#

在 /etc/fstab 中为 EFI 分区追加 noauto,x-systemd.automount 选项,使其改为访问时按需挂载,不再在开机阶段阻塞 local-fs.target。

编辑 /etc/fstab:

# 修改前
UUID=A904-3FF4 /boot/efi vfat umask=0077 0 1
# 修改后(追加 noauto,x-systemd.automount,pass 设为 2)
UUID=A904-3FF4 /boot/efi vfat umask=0077,noauto,x-systemd.automount 0 2

2. 处理 Swap 分区阻塞#

systemd 会通过 GPT 分区类型自动发现机制(systemd-gpt-auto-generator)强行探测并挂载 Swap。若在 PVE 宿主机内存充裕或计划使用 ZRAM,可彻底屏蔽 Swap 的开机同步等待:

Terminal window
# 注释 fstab 中的 swap 条目
sudo sed -i '/swap/s/^/#/' /etc/fstab
# 彻底屏蔽 systemd 的 swap 目标以阻止自动生成器挂载
sudo systemctl mask swap.target
sudo swapoff -a
# 重新加载 systemd 配置
sudo systemctl daemon-reload

阶段五:PVE 宿主机硬件配合优化建议#

系统内调优后,剩下的 0.6s 等待主要受限于硬件模拟层(如 dev-sdaX.device 的枚举)。若要进一步压榨,可在 PVE 硬件控制台调整以下项:

  1. 磁盘总线切换:

    • SCSI 控制器选用 VirtIO SCSI single
    • 硬盘开启 IO Thread 与 Discard
    • 或者直接将总线改为 VirtIO Block (vda)
  2. 移除无用外设:

    • 移除虚拟光驱(/dev/sr0)
    • 在”显示”中取消勾选 Use tablet for pointer(移除虚拟 USB 平板触控,减少 HID 总线遍历)
  3. 添加硬件熵池:

    • 硬件列表添加 VirtIO RNG(解决 systemd-random-seed 启动时因熵池不足等待 500ms 的问题)

阶段六:优化前后效果对比#

监测指标优化前(通用内核 + 默认配置)优化后(Cloud 内核 + 精简配置)变化幅度
内核引导耗时 (kernel)2.228s1.284s ~ 1.310s⚡ 耗时减少 ~42%
用户态耗时 (userspace)1.843s1.630s ~ 1.740s⚡ 耗时减少 ~10%
总启动时间 (Startup)4.072s2.926s ~ 3.052s🚀 整体压进 3 秒内
开机常驻内存 (used)354 MiB276 MiB💾 省下近 80 MiB 内存
最大阻塞单项耗时703ms (lvm2-monitor)289ms (dev-sda2 硬件探测)彻底消除长尾卡顿

总结#

通过以上六个阶段的系统性优化,成功将 Debian 13 虚拟机从默认 4 秒启动时间和 354MB 内存占用,优化至 3 秒内启动和 276MB 内存占用。这个极简模板非常适合作为 PVE 环境下的批量克隆母盘,为后续部署各类服务提供高效的基础环境。

Debian 13 极简虚拟机模板优化指南
https://iiii.fun/posts/linux/debian13-cloud-kernel-optimization/
作者
庆灵
发布于
2026-10-03
许可协议
CC BY-NC-SA 4.0