什么是内存气球?
内存气球(Memory Ballooning)是KVM虚拟化的一项技术,能让虚拟机动态按需使用物理内存:
- 虚拟机空闲的时候,自动把不用的内存释放给宿主飞牛NAS
- 虚拟机需要更多内存的时候,再动态申请
- 物理内存不浪费,真正做到大家按需分配
适用场景
- 飞牛fnOS NAS 上开Windows/Linux虚拟机
- 虚拟机不是一直占满内存,大部分时间空闲
- 希望把空闲内存腾出来给NAS用(跑Docker、共享、转码等)
配置步骤
1. 查看现有虚拟机列表
virsh list --all
输出示例:
Id Name State
---------------------------
- wtbt71lx shut off
找到你要配置的虚拟机名称,本文以 wtbt71lx 为例。
2. 检查是否已开启内存气球
virsh dumpxml 你的虚拟机名 | grep -i balloon
如果输出有:
<memballoon model='virtio'>
</memballoon>
说明已经开启,跳过这步。如果没有输出,需要编辑虚拟机配置添加:
virsh edit 你的虚拟机名
在 <devices> 段落内添加:
<memballoon model='virtio'/>
保存退出(vi按 Esc 然后 :wq)。
3. 设置动态内存范围
语法:
# 设置最大内存(单位:KB,8GB = 8388608 KB)
virsh setmaxmem 你的虚拟机名 最大内存KB --config
# 设置启动/最小内存(单位:KB,1GB = 1048576 KB)
virsh setmem 你的虚拟机名 最小内存KB --config
常用换算: | GB | KB | |----|-----| | 1G | 1048576 | | 2G | 2097152 | | 4G | 4194304 | | 8G | 8388608 | | 16G | 16777216 |
示例:给Windows设置最小1GB,最大8GB:
virsh setmaxmem wtbt71lx 8388608 --config
virsh setmem wtbt71lx 1048576 --config
4. 虚拟机内安装驱动
Linux 虚拟机
大部分发行版内核已经自带 virtio_balloon 驱动,验证:
lsmod | grep virtio
看到 virtio_balloon 就可以了,不用额外装。
Windows 虚拟机
需要手动安装virtio驱动:
- 在飞牛宿主下载驱动ISO:
cd /tmp
wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
- 挂载ISO到虚拟机,编辑配置添加光盘:
virsh edit wtbt71lx
在 <devices> 内添加:
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/tmp/virtio-win.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
</disk>
- 启动虚拟机,手动安装驱动
- 打开设备管理器,找到带**感叹号的"PCI内存气球设备"
- 右键 → 更新驱动 → 浏览到光盘
X:\balloon\w10\amd64 (对应你的系统版本)
- 下一步自动安装完成,重启生效
不要用完整的 virtio-win-guest-tools.exe 一键安装,容易报错,手动装inf更稳定。
5. 启动虚拟机,验证生效
virsh start 你的虚拟机名
在飞牛宿主查看当前分配情况:
virsh domstats 你的虚拟机名 --balloon
输出示例:
Domain: 'wtbt71lx'
balloon.current=1349632 # 当前分配:约1.3GB
balloon.maximum=8388608 # 最大:8GB
balloon.rss=1470724 # 实际占用物理内存:约1.4GB
再看飞牛宿主可用内存:
free -h
能看到空闲内存比之前(固定分配8GB)多出好几个GB,说明配置生效了!
效果展示
配置前(固定8GB全占满):
Mem: 15Gi 10Gi 2.1Gi ...
配置后(动态1-8GB,实际只用1.4GB):
Mem: 15Gi 3.4Gi 3.1Gi ...
^^^^^ 只用了3.4G,省出6.5G给NAS用!
总结
| 参数 |
作用 |
setmaxmem |
虚拟机最大能用到多少内存(上限) |
setmem |
虚拟机启动/默认分配多少内存(下限) |
| 内存气球 |
自动在上下限之间动态调整,按需分配 |
设置完成后,你的飞牛NAS就能聪明地利用物理内存了,虚拟机和NAS都不耽误!
测试平台:飞牛fnOS 1.x,KVM虚拟化,Windows 10 虚拟机