BEACON LOCKED // 已锁定信标

# 虚拟化

KVM 虚拟机、链式克隆、内存去重等虚拟化技术实践

5 段信号带此信标
[LOG-01]

无法开启OVS的情况下使用原生Linux Bridge网络实现创建虚拟机

文章对比 Linux Bridge 与 OVS,并以飞牛NAS(Debian 12)为例演示嵌套 VM 桥接。Linux Bridge 内核原生、简单稳定、性能与资源开销好,适合家庭/小型实验室、KVM 生产和嵌套测试,但功能单一,缺少 SDN、Overlay、QoS 和监控。OVS 支持 OpenFlow、流表、VXLAN/GRE、QoS、sFlow 等,适合 OpenStack、SDN 与跨主机 Overlay,但部署复杂、性能有损耗、排障和学习成本高。通过 NetworkManager 创建 br0、绑定物理网卡,配置 libvirt 桥接网络并为 VM 添加 virtio 网卡,可让其直接获得局域网 IP,读者可按场景选型并完成配置。
[LOG-02]

飞牛qcow2磁盘空间不回收问题解决

文章介绍为虚拟机开启磁盘空间回收(TRIM/UNMAP),以释放宿主机存储。先在宿主机运行 sudo virsh list 确认虚拟机已启动,再用 sudo virsh edit 替换虚拟机名称,在 <driver .../> 行添加 discard='unmap',保存后重启。Linux 虚拟机执行 sudo fstrim -av,可回收所有已挂载且支持 TRIM 文件系统的空闲空间;Windows 需安装 virtio 驱动,在“碎片整理和优化驱动器”中确认媒体类型后点击优化。若仍不回收空间,应检查并删除快照后重试。Linux 和 Windows 都会定时释放空间,Linux 可用 systemctl status fstrim.timer 确认服务,Windows 默认每天自动运行。
[LOG-03]

开启KSM内存去重技术,大幅度降低多个虚拟机内存实际占用宿主机

KSM是Linux内核内存去重技术,适合虚拟化场景,多台虚拟机运行同一系统时,内存占用可接近单台虚拟机多一点。它依赖扫描合并相同内存,代价是CPU开销随内存增大而上升。只有克隆,尤其链式克隆的虚拟机合并效果突出,实测12G内存可降至约2G。开启可临时将run设为1,并调整扫描强度、间隔、跨NUMA、zero page和smart_scan等参数;若内存未降,可用更激进参数。永久开启可创建调优脚本和systemd服务,开机自动执行,启动虚拟机后约10秒内存明显下降。
[LOG-04]

虚拟机共享宿主机文件夹,仅限Linux

FnOS 等 KVM 环境可用 virtio-9p 将宿主机目录共享给虚拟机,无需网络配置,经 virtio 总线传输,性能优于 NFS/Samba。关键是确保 QEMU 用户对共享目录整条路径链有可执行权限;关机后用 virsh 注入 filesystem 设备,指定宿主机 source 目录与 target 标签;启动后虚拟机内加载 9p 模块,并以该标签挂载,可写 fstab 加 _netdev 自动挂载。accessmode 建议 passthrough,权限异常可换 mapped-xattr;标签须与 target 完全一致,否则报 no channels available。
[LOG-05]

链式克隆虚拟机,实现一秒开十台,每台虚拟机占用只有256K!

本文记录在飞牛NAS(FnOS)上用 qcow2 backing file 实现 KVM 虚拟机链式克隆。先创建并配置源虚拟机,Windows 需执行 sysprep 后关机;用 virsh 确认信息,复制源磁盘为模板基础镜像并设为只读 444;再用 qemu-img create -f qcow2 -F qcow2 -b 模板路径 生成克隆盘,最后在飞牛中新建虚拟机并导入 qcow2 开机。克隆创建快、节省空间,示例模板 4.5GB,克隆初始仅 256KB,适合批量部署。注意模板不可修改或删除,否则所有克隆无法启动;克隆与模板共享 hostname、MAC、SSH 密钥,首次启动应修改主机名并重新生成 SSH 密钥。