lvm逻辑卷扩容需先确认卷组空闲空间,再扩展逻辑卷并刷新文件系统:vgdisplay查free pe,lvextend扩lv,ext4用resize2fs、xfs用xfs_growfs(参数为挂载点)。

磁盘空间不够了,df -h 显示 /dev/mapper/vg0-lv_root 使用率 98%,但物理磁盘还有空闲?
说明你用的是 LVM,逻辑卷没扩容,但底层物理卷(PV)或卷组(VG)可能还有余量。别急着加硬盘,先查清楚“空在哪”:pvdisplay 看物理卷剩余空间,vgdisplay 看卷组是否还有未分配的 PE(Physical Extent),lvdisplay 看目标逻辑卷当前大小和是否激活。
常见错误是直接跑 lvextend 却报错 “No free extents in volume group”,其实是因为 VG 没扩容,不是 LV 不能扩。
- 如果
vgdisplay中Free PE / Size是 0,得先用pvcreate+vgextend把新物理分区加进 VG - 如果 VG 有空闲,但 LV 所在的文件系统是 xfs,
lvextend后必须跟xfs_growfs,不能用resize2fs - ext4 文件系统支持在线扩容(挂载状态下执行),xfs 也支持,但前提是内核和 xfsprogs 版本够新(RHEL/CentOS 7+、Ubuntu 16.04+ 一般没问题)
lvextend 扩容时加不加 -r 参数差别很大
-r 表示“自动调整文件系统大小”,看似省事,但实际容易出问题:它只对 ext2/3/4 和 xfs 有效,且依赖底层工具(e2fsprogs 或 xfsprogs)是否可用、版本是否匹配。生产环境建议分两步走,更可控。
- 不加
-r:执行lvextend -L +10G /dev/mapper/vg0-lv_root,只扩逻辑卷,文件系统不变 —— 安全,可回退 - 加
-r:执行lvextend -r -L +10G /dev/mapper/vg0-lv_root,自动调用resize2fs或xfs_growfs—— 快,但失败时得手动补救 - 特别注意:如果 LV 是精简配置(thin pool),
-r不生效,必须单独处理 thin LV 的元数据
扩容后 df -h 没变化?大概率是忘了刷新文件系统
LV 扩容只是把块设备变大了,文件系统不知道这事。就像给房子加了层楼,但没更新房产证,操作系统还是按老面积算。
- ext4:运行
resize2fs /dev/mapper/vg0-lv_root(可在线,无需 umount) - xfs:运行
xfs_growfs /(注意参数是挂载点,不是设备路径!写成xfs_growfs /dev/mapper/vg0-lv_root会报错 “XFS ERROR: Invalid argument”) - 如果提示 “The filesystem is already the right size”,说明文件系统已同步,检查是不是误操作了两次,或者之前已经扩过
新加的物理硬盘怎么加入已有卷组?小心 pvcreate 覆盖数据
给 LVM 加新盘不是 plug-and-play。最常踩的坑是:看到 /dev/sdb 是空盘,就直接 pvcreate /dev/sdb —— 如果这盘之前被用过、有分区表或残留 LVM 元数据,pvcreate 会清掉开头几 KB,导致数据不可逆丢失。
- 先确认目标设备干净:
fdisk -l /dev/sdb看有没有分区;pvdisplay /dev/sdb和blkid /dev/sdb*看是否已有 PV 或文件系统 - 如果有旧分区,先
fdisk /dev/sdb删除所有分区,再partprobe刷新内核分区表,最后pvcreate /dev/sdb - 加进卷组用
vgextend vg0 /dev/sdb,不是vgcreate(那是建新 VG)
真正麻烦的从来不是命令敲错,而是扩容前没确认 VG 是否真有空闲、文件系统类型是否匹配、新加磁盘是否干净。这几个点漏一个,后面就得花三倍时间救火。








