LVM需手动构建PV→VG→LV三层结构,系统默认不启用;确认方法包括检查lsblk中/dev/mapper/或vg_name-lv_name条目、运行pvdisplay/vgdisplay/lvdisplay命令、df -hT /查看Source是否为/dev/mapper/或/dev/vg_name/lv_name。

lvm 不是开箱即用的工具,它需要你主动构建三层结构:PV → VG → LV。默认安装的 Linux 系统(如 CentOS、RHEL、Ubuntu Server)不会自动启用 LVM,除非你在安装时明确选择“手动分区”并勾选 LVM 选项;系统运行后也不会自动创建任何 PV/VG/LV。
怎么确认当前系统是否已启用 LVM
别猜,直接查。LVM 的存在痕迹全在设备路径和命令输出里:
-
lsblk输出中若出现形如vg_name-lv_name或挂载点路径为/dev/mapper/vg_name-lv_name的条目,基本可判定用了 LVM - 运行
pvdisplay—— 若返回 “No physical volume found” 就说明没建 PV;有输出则说明至少有一个 PV 存在 - 运行
vgdisplay和lvdisplay,任一为空都意味着该层未就绪(比如有 PV 但没建 VG,或 VG 有空间但没划 LV) - 看根文件系统:执行
df -hT /,如果 Type 是xfs或ext4,但 Source 是/dev/mapper/centos-root或/dev/vg00/lv_root这类形式,就是 LVM
注意:fdisk -l 或 lsblk -f 看到的 /dev/sda2 类型为 8e Linux LVM,只表示该分区“可用于 LVM”,不等于它已被 pvcreate 初始化过。
新建 PV/VG/LV 的最小可行操作链
假设你有一块空盘 /dev/sdb,想建一个 15G 的逻辑卷挂载到 /data:
- 先分区(可选但推荐):
fdisk /dev/sdb→ 新建主分区 → 把类型设为8e→ 写入;最终得到/dev/sdb1 - 初始化物理卷:
pvcreate /dev/sdb1(不是/dev/sdb,除非你确定要整盘用) - 创建卷组:
vgcreate vg_data /dev/sdb1(名字不能含下划线或数字开头,vg_data安全) - 创建逻辑卷:
lvcreate -L 15G -n lv_data vg_data(大小单位支持G/M,-n指定 LV 名) - 格式化并挂载:
mkfs.xfs /dev/vg_data/lv_data→mkdir /data→mount /dev/vg_data/lv_data /data
关键点:LV 设备路径是 /dev/<vg_name>/<lv_name>,不是 /dev/mapper/...(后者是符号链接,由 udev 自动创建,但脚本里优先用前者)。
扩展 LV 时最常踩的三个坑
扩容不是只跑一条 lvextend 就完事。漏掉任意一环,df -h 就看不到新空间:
-
VG 没剩余空间:执行
vgdisplay vg_data看Free PE / Size。为 0?得先vgextend vg_data /dev/sdc1加新 PV -
LV 扩了,文件系统没跟上:xfs 用
xfs_growfs /mount/point(必须是挂载点路径,不是设备路径);ext4 用resize2fs /dev/vg_data/lv_data(接受设备路径) -
误对未挂载 LV 操作文件系统:比如
xfs_growfs要求目标已挂载;resize2fs可对未挂载设备操作,但若正在使用中会报错,需先umount
典型错误现象:lvextend -L +5G /dev/vg_data/lv_data 成功,lsblk 显示 LV 大小已变,但 df -h /data 仍是老大小——八成卡在文件系统层。
删除 LV 前必须做三件事
删错可能直接导致数据不可逆丢失,尤其当 LV 正被挂载或有活跃进程访问时:
- 先卸载:
umount /data;失败就用lsof +D /data或fuser -v /data查占用进程 - 停用 LV:
lvchange -an /dev/vg_data/lv_data(-an表示 deactive,避免内核缓存干扰) - 再删除:
lvremove /dev/vg_data/lv_data;会二次确认,输y才真正删
注意:lvremove 不清空磁盘数据,只是删掉 LVM 元数据。若之后重建同名 LV,旧数据可能残留并造成文件系统损坏。真要彻底擦除,删完再 dd if=/dev/zero of=/dev/vg_data/lv_data bs=1M count=100。
LVM 的灵活性全靠这三层解耦支撑,但每一层都带约束:PV 一旦加入 VG 就不能直接拆出(得先 pvmove 迁走数据),VG 名不能改(只能导出/导入),LV 名在 VG 内必须唯一。动手前,pvdisplay、vgdisplay、lvdisplay 多看两眼,比重装系统快得多。

















