如果你刚接触 LVM,别怕——把它想象成 “存储乐高”
硬盘是散装的积木,LVM 能让你随时把它们拼在一起、切出任意大小的空间,还能不停机扩容。

一、先搞懂 3 个核心部件(配乐高类比)

部件全称乐高类比作用
PV物理卷单块积木把一块硬盘或分区变成 LVM 可用的“原材料”
VG卷组积木池(大箱子)把多块 PV 积木扔进一个大箱子,变成共享仓库
LV逻辑卷从箱子里取出的积木块从 VG 仓库里划分出一块空间,格式化后就能挂载使用

它们的层级关系:
物理硬盘 → PV → VG → LV → 格式化(ext4/xfs) → 挂载到目录

一个具体例子:

硬盘 /dev/sda  +  硬盘 /dev/sdb
       ↓                  ↓
    PV(/dev/sda)      PV(/dev/sdb)
       └──────┬──────────┘
              ↓
          VG (名为 myvg)
       ┌──────┴──────┐
       ↓             ↓
   LV(root)      LV(home)
   10GB           20GB
       ↓             ↓
  格式化ext4     格式化xfs
       ↓             ↓
   挂载到 /       挂载到 /home

关键理解:

  • 不能直接使用 PV 存文件,它只是半成品。
  • VG 只是一个“容量池”,不直接占用空间,空间存在 PV 里。
  • LV 才是你最终能读写文件的“虚拟分区”。

二、新手必须掌握的查询命令(看一眼就懂)

1. 查看所有硬盘和分区(包括新加的硬盘)

lsblk       # 树形显示,LVM 卷会用 lvm 标记

示例输出:

NAME          MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda             8:0    0    40G  0 disk
├─sda1          8:1    0     1G  0 part /boot
└─sda2          8:2    0    39G  0 part
  └─vg0-root   253:0    0    30G  0 lvm  /
sdb             8:16   0    20G  0 disk        ← 新加的硬盘,还没有使用

2. 查看 PV、VG、LV 的简洁信息(最常用)

pvs        # 列出所有物理卷
vgs        # 列出所有卷组(重点看 VFree 空闲空间)
lvs        # 列出所有逻辑卷

3. 查看详细信息(调试时用)

pvdisplay
vgdisplay
lvdisplay

4. 查看文件系统类型和挂载点

df -hT     # 显示所有挂载的文件系统及其类型(ext4/xfs)
💡 习惯养成:任何操作前,先执行 vgs 看 VG 有无空闲空间;执行 df -hT 看目标 LV 的文件系统类型。

三、扩容(重点:不停机,在线完成)

扩容分为两种情况:

  • 情况A:VG 里还有空闲空间 → 直接扩 LV 和文件系统(最简单)。
  • 情况B:VG 空间不够了 → 先加新硬盘 → 扩展 VG → 再扩 LV(本文重点)。

情况A:VG 已有空闲空间(直接扩容)

示例:把 /dev/myvg/data 从 10G 扩大到 15G。

# 1. 确认当前 VG 有空闲空间
vgs
# 输出示例: VG   #PV #LV #SN Attr   VSize   VFree
#            myvg   2   2   0 wz--n- 29.99g  5.00g   ← 空闲 5GB,足够

# 2. 扩展逻辑卷(增加 5GB)
lvextend -L +5G /dev/myvg/data

# 3. 扩展文件系统(关键!很多人忘记这步)
#    先检查文件系统类型
df -hT /dev/myvg/data
# 如果是 ext4:
resize2fs /dev/myvg/data
# 如果是 xfs:
xfs_growfs /mount/point      # 注意:xfs 后面必须跟挂载点,如 /mnt/data

# 4. 验证
df -h /dev/myvg/data

情况B:新加一块硬盘来扩容(详细步骤)

场景:原来的 VG myvg 已经满了(VFree 为 0),你给虚拟机/物理机加了一块 20GB 的新硬盘 /dev/sdb

步骤1:确认新硬盘被系统识别

lsblk
# 你应该能看到 sdb,大小 20G,没有分区,没有挂载点

步骤2:将新硬盘初始化为 PV(物理卷)

# 方式一:使用整个硬盘(推荐新手,简单)
pvcreate /dev/sdb

# 方式二:先分区再创建 PV(用于需要多个分区时,新手先跳过)
# fdisk /dev/sdb 创建一个分区 /dev/sdb1,然后 pvcreate /dev/sdb1

执行后可以用 pvs 查看,应该能看到新的 PV /dev/sdb

步骤3:把新 PV 加入现有的 VG

vgextend myvg /dev/sdb
# 执行后,myvg 的 VFree 就会增加 20GB(可用 vgs 确认)

步骤4:扩展逻辑卷(比如想给 /dev/myvg/data 增加 15GB)

lvextend -L +15G /dev/myvg/data
# 或者直接指定最终大小: lvextend -L 35G /dev/myvg/data

步骤5:扩展文件系统(与情况A相同)

# 查看文件系统类型
df -hT /dev/myvg/data

# ext4:
resize2fs /dev/myvg/data

# xfs:
xfs_growfs /mount/point   # 替换为实际挂载点

步骤6:验证

df -h /dev/myvg/data        # 容量已经增加
lsblk                       # 查看关联关系
🎉 至此,新硬盘的容量已经无缝加入并使用,全程不需要重启,不需要卸载目录。

四、缩容(高风险,慎入)

⚠️ 缩容很容易造成数据损坏,除非你非常清楚后果,否则不要在生产环境操作。
xfs 文件系统完全不能缩容! 以下仅适用于 ext4。

完整缩容步骤(以从 15G 缩回 10G 为例)

# 0. 备份数据!!!(这是救命稻草)
rsync -av /mnt/data/ /backup/data/

# 1. 卸载逻辑卷(缩容必须卸载)
umount /mnt/data

# 2. 强制检查文件系统(必须做,否则可能损坏)
e2fsck -f /dev/myvg/data

# 3. 先缩小文件系统到目标大小(10G)
resize2fs /dev/myvg/data 10G

# 4. 再缩小逻辑卷到相同大小(顺序不可颠倒)
lvreduce -L 10G /dev/myvg/data

# 5. 重新挂载并检查
mount /dev/myvg/data /mnt/data
df -h /mnt/data

为什么顺序不能错?

  • 如果先缩 LV,文件系统不知道尾部空间已被收回,再去读写就可能截断数据 → 文件系统损坏。
  • 所以必须 先通知文件系统缩小(resize2fs),再缩小 LV。

五、新手最容易踩的 5 个坑(避坑指南)

现象解决办法
只扩 LV,忘了扩文件系统lvextend 成功了,df 看容量没变执行 resize2fsxfs_growfs
xfs 缩容执行 lvreduce 后文件系统崩溃牢记:xfs 不能缩容,只能扩
新加的硬盘没创建 PV 就直接 vgextendvgextend 报错“设备不是物理卷”pvcreate /dev/sdb
缩容前不备份、不 e2fsck数据丢失严格按照备份→卸载→e2fsck→resize2fs→lvreduce
用错 xfs_growfs 参数报错“is not a mounted mount point”参数必须是挂载点(如 /mnt/data),不是设备路径

六、总结(一张图记住 LVM)

新硬盘               旧硬盘
  ↓                    ↓
pvcreate → PV ──→ PV ←─ pvcreate
              ↓  ↓
           vgextend
              ↓
             VG
              ↓
         lvcreate / lvextend
              ↓
             LV
              ↓
    mkfs.ext4 / mkfs.xfs
              ↓
           mount 挂载
              ↓
          日常使用

日常运维口诀:

  • 查空间:vgslvsdf -hT
  • 扩空间:加硬盘 → pvcreatevgextendlvextendresize2fsxfs_growfs
  • 缩空间:除非必要,否则别碰;ext4 可缩,xfs 不行,且必须备份+卸载+检查。

希望这份指南能帮你彻底搞懂 LVM。如果有任何步骤卡住,执行 man lvm 或留言交流!

最后修改:2026 年 04 月 14 日
如果觉得我的文章对你有用,请随意赞赏