PVE 踩坑笔记:LVM-Thin 池还有大量空闲空间,新建磁盘却提示磁盘空间不足
一、故障表现
- 存储是本地 LVM-Thin,Web 界面显示存储可用空间充足
- 执行新增硬盘、调整磁盘大小、创建快照时报错:no space left on device
lvs查看 thinpool 的 data 空闲还有很多,但 metadata 使用率接近 100%- 删除虚拟机、删除快照、fstrim 释放空洞后,data 空间上涨,报错依旧
- 宿主机本身系统盘空间充足,不是根分区满导致的
典型特征:数据池空间富余,元数据池先被打满,LVM-Thin 元数据用来记录块分配映射表,用完之后哪怕还有数据空间,也无法分配新块。
二、原理简单说明
LVM-Thin 分为两块独立空间:
- data 数据区:存放虚拟机磁盘真实数据,也就是 Web 界面展示的存储容量;
- metadata 元数据区:记录精简盘块映射、空洞标记、分配信息,是一张 “地址对照表”。
每新建一块磁盘、写入新块、打快照,都需要占用元数据。元数据池是单独划分的,默认容量偏小。很多部署脚本、安装向导自动创建 thinpool 时,metadata 只分配很小一部分。 一旦 metadata 写满,LVM 无法新增块映射,直接报空间不足,和 data 区还有多少空闲无关。
三、排查顺序
- 先查看 thinpool 详细状态(重点看 Metadata 使用率)
lvs -a -o +devices
重点观察 Meta% 这一列,如果接近 100% 基本就是这个问题。
- 查看 thinpool 详细信息
thin_dump /dev/pve/thinpool
- 区分是元数据满,还是真正的数据空间满
# 查看data和metadata占用
thin_check /dev/pve/thinpool
- 检查是否存在大量孤立快照、废弃卷
# 列出thin池里所有精简卷
lvs | grep thin
四、分场景修复方案
⚠️ 重要提醒:操作 LVM 前做好备份,扩容元数据属于高危操作,业务尽量停机维护窗口执行。
场景 1:Metadata 空间耗尽(本次故障最常见)
thinpool 元数据卷空间不足,需要给 metadata 扩容。 前提:卷组 VG(一般是 pve)还有剩余 PE 空间。
- 先暂停业务,关闭所有该存储上的虚拟机和容器
- 停用 thinpool
lvchange -an /dev/pve/thinpool
- 扩容元数据 LV(示例增加 4G,按需修改)
lvextend -L +4G /dev/pve/thinpool_tmeta
- 重新激活 thinpool
lvchange -ay /dev/pve/thinpool
- 再次用 lvs 确认 Meta% 下降,然后开机业务、测试新建磁盘
如果 VG 已经没有空闲空间,需要先给 VG 扩容(加硬盘、扩容 PV),再扩容 metadata。
场景 2:大量快照 + 频繁写入,元数据快速膨胀
快照会额外占用元数据,每一次快照都会新增映射记录。大量长期不清理的快照,会持续消耗 metadata。
处理:
- 清理无用旧快照(优先删除);
- 业务虚拟机不要保留过多快照,快照只做临时备份;
- 数据库、高写入业务,评估减少快照频率。
场景 3:精简磁盘疯狂随机写,元数据持续快速增长
高随机写入的业务(MySQL、Redis、日志服务),块频繁分配释放,元数据开销远大于普通业务。 方案:
- 高 IO 数据库虚拟机,改用厚置磁盘,不再走 thin 精简分配;
- 定期在虚拟机内执行 fstrim,回收空洞,减少映射条目。 Linux 虚拟机内:
fstrim -av
Windows 开启 TRIM 磁盘优化。
场景 4:thinpool 存在损坏块 / 元数据不一致
thin_check 检测报错,元数据损坏,也会拒绝分配空间,提示 no space。
thin_check --clear-needs-check-flag /dev/pve/thinpool
如果检测出损坏,优先从备份恢复,不建议强行修复。
场景 5:卷组 PV 碎片化,有空闲 PE 但连续空间不足
VG 显示有 free PE,但都是零散碎片,无法分配连续块用于 metadata 扩容。 这种情况只能新增磁盘扩展 PV,或者迁移数据重建 thin 池。
五、验证修复
扩容完成,虚拟机开机后,执行:
lvs
Meta% 回落,回到正常区间,再在 PVE 页面测试新增磁盘、快照、磁盘扩容,不再报空间不足即为修复完成。
六、高频踩坑点
- 只看 Web 面板的存储可用容量(只展示 data 区),完全忽略 metadata 独立空间;
- 新建 thinpool 时直接用默认脚本,metadata 分配过小,前期够用,业务跑一段时间后突然爆;
- 发现报错第一时间删虚拟机,data 空间释放了,metadata 占用不会自动下降,故障依旧;
- 不停机直接操作 thinpool 元数据扩容,极易造成 thin 池损坏、虚拟机磁盘丢失;
- 把 TRIM 当成万能解药:TRIM 只能回收 data 空洞,对已经占用的元数据释放效果有限。
七、排坑总结
- LVM-Thin 报空间不足,第一步先看
lvs的 Meta%,不要只看 Web 页面容量; - 元数据和数据区独立,元数据优先耗尽是精简存储独有的坑;
- 生产新建 thinpool,建议手动给 metadata 分配充足空间,不要依赖默认自动配置;
- 快照是元数据消耗大户,生产环境快照要及时清理;
- 高写入数据库业务,谨慎使用精简盘,优先厚置盘规避元数据爆满、性能抖动问题。
- 点赞
- 收藏
- 关注作者
评论(0)