本文主要合并两则 KVM 运维碎片:在宿主机上查看/处理虚拟机磁盘镜像,以及通过 Virtio memory balloon 调整虚拟机可见内存。操作涉及离线镜像与热调整,生产环境请先确认业务窗口与备份。
背景说明
日常排障时经常需要:
- 在虚拟机关机或确认安全后,在宿主机检查 qcow2/raw 镜像分区
- 在开启 balloon 的虚拟机上,动态下调/观察内存占用
相关进阶(CPU 绑核、qcow2 扩容)见 drafts/review 中已改写文。
磁盘镜像查看(离线)
典型场景:镜像落在宿主机目录(示例路径请替换):
cd /path/to/vms
ls -lh *.img
使用 fdisk / parted 查看分区表(只读观察优先,写操作前务必备份):
fdisk -l /path/to/vm.img
# 或
fdisk /path/to/vm.img # 交互查看 p 打印分区,勿轻易 w
更稳妥的挂载方式通常是 qemu-nbd 或 guestmount(视发行版工具而定):
modprobe nbd max_part=8
qemu-nbd --connect=/dev/nbd0 /path/to/vm.qcow2
fdisk -l /dev/nbd0
# 用完后
qemu-nbd --disconnect /dev/nbd0
注意:
- 正在运行的虚拟机对应镜像禁止多头写。
- 属主常为
qemu/libvirt-qemu,权限不足时用合适用户或 ACL。 - 生产改分区前先快照或冷拷贝。
内存气球(balloon)
客户机需具备 Virtio balloon 设备,例如:
lspci | grep -i balloon
free -m
宿主机用 virsh + QEMU monitor 查看/调整(域名与命令以环境为准):
virsh qemu-monitor-command <domain> --hmp --cmd info balloon
# 将气球目标设为约 8G(单位依 QEMU 版本,常见为 MB)
virsh qemu-monitor-command <domain> --hmp --cmd balloon 8192
virsh qemu-monitor-command <domain> --hmp --cmd info balloon
再在客户机执行 free -m,确认 total 是否下降。
行为边界(待结合版本验证):
- 下调通常依赖客户机 balloon 驱动配合回收。
- 上调可能受 libvirt 当前
maxMemory/ XML 上限限制,未必能超过启动时上限。 - 仅 balloon 不能替代 长期容量规划;对延迟敏感业务要评估回收抖动。
测试验证
| 场景 | 验证 |
|---|---|
| 镜像检查 | fdisk -l / nbd 断开后虚拟机仍可正常启动 |
| balloon 下调 | 宿主机 info balloon 与客户机 free -m 一致变小 |
| balloon 上调 | 未超 XML 上限时客户机 total 回升;超限则记录实际行为 |
注意事项
- 示例中的主机名、镜像名、IP 均已脱敏,请替换为本机路径与域名。
- 与 CPU pin、磁盘扩容文档配合阅读,避免只调内存掩盖超卖问题。