前言💡小白运维痛点直击
有没有小伙伴踩过这些存储大坑?
传统固定分区存在致命缺陷,而LVM 逻辑卷管理就是企业运维标准解决方案!
本篇全程小白友好,先讲运维实际用途、完整实验思路,所有命令逐行带详细注释、输出结果完整保留,搭配大量对比表格、警示文本框,零基础也能跟着实操落地。
一、为什么要用 LVM?传统分区 VS LVM 逻辑卷对比
🎯生产运维实际作用
传统分区缺陷
⚠️固定分区致命短板
LVM 逻辑卷优势
✅LVM 核心优势
传统分区 vs LVM 对比表
| 扩容限制 | 分区后方必须有空余空间,无法跨硬盘 | 可新增硬盘加入存储池,无限扩容 |
| 多硬盘合并 | 不支持,单文件系统只能存一块盘 | 多 PV 合并 VG,统一分配空间 |
| 在线扩容 | 多数场景需要停机 | XFS 支持不停机在线扩容 |
| 数据快照 | 无原生快照功能 | 支持创建读写快照,快速回滚 |
| 磁盘冗余 | 不支持 | 内置 raid1/raid5 逻辑卷 |
| 运维灵活性 | 极差,前期规划失误后期无解 | 极高,业务扩容零停机 |
二、LVM 三大核心概念通俗拆解
三层结构逻辑(PV→VG→LV)
三层概念通俗表格
| PV | Physical Volume 物理卷 | 一块块单独硬盘原材料 | /dev/sdb /dev/sdc |
| VG | Volume Group 卷组 | 材料堆,把所有硬盘合并成大仓库 | vg 名称 webapp、dbapp |
| LV | Logical Volume 逻辑卷 | 从仓库划出独立分区,存放业务数据 | /dev/webapp/webapp01 |
LVM 完整操作总流程
三、实验环境准备
实验环境说明
虚拟机新增 3 块 20G 空闲硬盘,设备名称:/dev/sdb/dev/sdc/dev/sdd
# lsblk列出三块硬盘,{b..d}批量匹配sdb sdc sdd
# lsblk:查看块设备树形工具
# /dev/sd{b..d} shell批量简写,一次性查看三块硬盘
[root@centos7 ~]# lsblk /dev/sd{b..d}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
输出解读:三块硬盘均为 20G 本地磁盘,无分区、无挂载,可全部用于 LVM 实验
四、LVM 基础创建全套实操(PV/VG/LV 创建、格式化挂载)
4.1 创建物理卷 PV
pvcreate:将裸硬盘 / 分区初始化为 LVM 物理卷,写入 LVM 标识,才能加入卷组
# 单块硬盘创建PV
# pvcreate:初始化物理卷;/dev/sdb 目标裸硬盘
[root@centos7 ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
# 批量多块硬盘创建PV,{c,d}匹配sdc、sdd两块硬盘
[root@centos7 ~]# pvcreate /dev/sd{c,d}
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
查看所有物理卷 pvs
pvs:精简输出 PV 列表,快速查看 PV 归属 VG、剩余空闲空间
[root@centos7 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 — 20.00g 20.00g
/dev/sdc lvm2 — 20.00g 20.00g
/dev/sdd lvm2 — 20.00g 20.00g
输出字段解释表格
| PV | 物理卷设备名 |
| VG | 所属卷组,空白代表未加入任何 VG |
| Fmt | 格式 lvm2(CentOS7 默认 LVM 格式) |
| Attr | 属性,— 代表未加入卷组 |
| PSize | 硬盘总容量 |
| PFree | 硬盘剩余空闲空间 |
查看单块 PV 详细信息 pvdisplay
pvdisplay:打印 PV 完整底层参数、UUID、PE 块信息
# pvdisplay:查看详细PV信息;/dev/sdb 指定设备
[root@centos7 ~]# pvdisplay /dev/sdb
"/dev/sdb" is a new physical volume of "20.00 GiB"
— NEW Physical volume —
PV Name /dev/sdb
VG Name
PV Size 20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID MBHW0w-OkJL-CasO-PYRR-sduS-U2m5-zdkQ5d
关键字段解释:
PE:物理最小存储单元,创建 VG 时指定,默认 4M;未加入 VG 则 PE Size 为 0
4.2 创建卷组 VG
vgcreate:将 1 个或多个 PV 合并为统一存储池(卷组)
示例 1:单硬盘创建 VG webapp(业务网站存储池)
# vgcreate 卷组名 物理卷设备
# webapp:自定义卷组名称;/dev/sdb 作为底层PV
[root@centos7 ~]# vgcreate webapp /dev/sdb
Volume group "webapp" successfully created
示例 2:两块硬盘合并创建 dbapp 数据库存储池
# /dev/sd{c,d} 两块20G硬盘合并成40G存储池dbapp
[root@centos7 ~]# vgcreate dbapp /dev/sd{c,d}
Volume group "dbapp" successfully created
查看 VG 列表 vgs
vgs:精简展示所有卷组 PV 数量、LV 数量、总容量、空闲容量
[root@centos7 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb webapp lvm2 a– <20.00g <20.00g
/dev/sdc dbapp lvm2 a– <20.00g <20.00g
/dev/sdd dbapp lvm2 a– <20.00g <20.00g
[root@centos7 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
dbapp 2 0 0 wz–n- 39.99g 39.99g
webapp 1 0 0 wz–n- <20.00g <20.00g
vgs 字段说明表
| VG | 卷组名称 |
| #PV | 该卷组包含几块物理硬盘 |
| #LV | 已创建逻辑卷数量 |
| VSize | 卷组总容量 |
| VFree | 卷组剩余空闲空间 |
查看 VG 详细信息 vgdisplay
# vgdisplay 卷组名,输出PE大小、总PE、空闲PE
[root@centos7 ~]# vgdisplay dbapp
— Volume group —
VG Name dbapp
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 39.99 GiB
PE Size 4.00 MiB # PE最小存储块,默认4M
Total PE 10238
Alloc PE / Size 0 / 0
Free PE / Size 10238 / 39.99 GiB
VG UUID kjY26m-D0ax-WmMq-fMJv-1Tnb-imqh-GOAWkG
4.3 创建逻辑卷 LV
lvcreate:从 VG 空闲空间划分逻辑卷
参数说明文本框
lvcreate 核心参数
-n:指定逻辑卷名称
-L:指定逻辑卷总容量(支持 G/M)
末尾参数:卷组名称
示例 1:webapp 卷组创建 5G 网站逻辑卷 webapp01
# -n webapp01 逻辑卷名称;-L 5G 分配5G空间;webapp 来源卷组
[root@centos7 ~]# lvcreate -n webapp01 -L 5G webapp
Logical volume "webapp01" created.
示例 2:dbapp 双硬盘卷组创建 25G 跨盘数据库卷 data01
# 两块20G硬盘合并池,划出25G逻辑卷,自动跨两块硬盘存储
[root@centos7 ~]# lvcreate -n data01 -L 25G dbapp
Logical volume "data01" created.
查看逻辑卷 lvs
[root@centos7 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data01 dbapp -wi-a—– 25.00g
webapp01 webapp -wi-a—– 5.00g
逻辑卷三种访问路径说明
# 三种等价设备路径,全部指向同一个逻辑卷
[root@centos7 ~]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01
lrwxrwxrwx 1 root root 7 6月 17 18:26 /dev/dbapp/data01 –> ../dm-4
lrwxrwxrwx 1 root root 7 6月 17 18:26 /dev/mapper/dbapp-data01 –> ../dm-4
lvdisplay 查看 LV 完整信息
[root@centos7 ~]# lvdisplay /dev/dbapp/data01
— Logical volume —
LV Path /dev/dbapp/data01
LV Name data01
VG Name dbapp
LV UUID W8UafB-A7RJ-dBjM-bsA2-8Obc-p8gE-bMZgmm
LV Write Access read/write
LV Creation host, time centos7.linux.com, 2022-12-26 11:42:40 +0800
LV Status available
# open 0
LV Size 25.00 GiB
Current LE 6400
Segments 2 # 2个物理段,代表跨两块硬盘存储
Allocation inherit
Read ahead sectors auto
– currently set to 8192
Block device 253:4
Segments=2:代表该 25G 逻辑卷同时占用 sdc、sdd 两块硬盘,完美实现跨盘存储
验证 PV 空间占用
[root@centos7 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb webapp lvm2 a– <20.00g <15.00g
/dev/sdc dbapp lvm2 a– <20.00g 0 # sdc全部用完
/dev/sdd dbapp lvm2 a– <20.00g 14.99g # sdd剩余15G
lsblk 树形查看跨盘结构
[root@centos7 ~]# lsblk /dev/sd{b..d}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─webapp-webapp01 253:3 0 5G 0 lvm
sdc 8:32 0 20G 0 disk
└─dbapp-data01 253:4 0 25G 0 lvm
sdd 8:48 0 20G 0 disk
└─dbapp-data01 253:4 0 25G 0 lvm
清晰看到 data01 横跨 sdc、sdd 两块物理磁盘
4.4 格式化逻辑卷并挂载
# mkfs.xfs:将逻辑卷格式化为XFS文件系统(CentOS7默认,仅支持扩容)
[root@centos7 ~]# mkfs.xfs /dev/webapp/webapp01
# mount:挂载逻辑卷到网站根目录
# /usr/share/nginx/html Nginx网页存放目录
[root@centos7 ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html
持久化开机自动挂载:修改 /etc/fstab 写入 LV 的 UUID,服务器重启自动挂载
4.5 LVM 全套清理(实验复原)
完整销毁流程:卸载 → 删除 LV → 删除 VG → 删除 PV
# umount 卸载挂载点,不卸载无法删除LV
[root@centos7 ~]# umount /dev/webapp/webapp01
# lvremove 删除逻辑卷,交互输入y确认删除
[root@centos7 ~]# lvremove /dev/webapp/webapp01 /dev/dbapp/data01
Do you really want to remove active logical volume webapp/webapp01? [y/n]: y
Logical volume "webapp01" successfully removed
Do you really want to remove active logical volume dbapp/data01? [y/n]: y
Logical volume "data01" successfully removed
# vgremove 删除卷组
[root@centos7 ~]# vgremove webapp dbapp
Volume group "webapp" successfully removed
Volume group "dbapp" successfully removed
# pvremove 擦除硬盘LVM标识,恢复普通裸硬盘
[root@centos7 ~]# pvremove /dev/sd{b..d}
Labels on physical volume "/dev/sdb" successfully wiped.
Labels on physical volume "/dev/sdc" successfully wiped.
Labels on physical volume "/dev/sdd" successfully wiped.
五、卷组 VG 扩容与缩减实操
5.1 扩容卷组 vgextend
业务增长,VG 空间不足,新增硬盘加入存储池
# 先创建单盘VG webapp
[root@centos7 ~]# pvcreate /dev/sdb
[root@centos7 ~]# vgcreate webapp /dev/sdb
[root@centos7 ~]# lvcreate -n webapp01 -L 10G webapp
# vgextend:将sdc、sdd两块硬盘加入webapp卷组,扩容VG总容量
[root@centos7 ~]# vgextend webapp /dev/sd{c,d}
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
Volume group "webapp" successfully extended
5.2 缩减卷组 vgreduce
核心前置⚠️警示文本
⚠️缩减 VG 前提:要移除的 PV 上无任何数据占用,否则命令直接报错
若 PV 存有数据,必须先用 pvmove 把数据迁移到同 VG 其他硬盘,再剔除 PV
完整缩容流程
# 查看PV占用状态
[root@centos7 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb webapp lvm2 a– <20.00g <10.00g # 有数据占用,无法直接剔除
/dev/sdc webapp lvm2 a– <20.00g <20.00g
/dev/sdd webapp lvm2 a– <20.00g <20.00g
# pvmove /dev/sdb:把sdb上全部数据迁移到VG内其他空闲硬盘
[root@centos7 ~]# pvmove /dev/sdb
# 指定目标硬盘迁移:pvmove /dev/sdb /dev/sdd
[root@centos7 ~]# pvmove /dev/sdb /dev/sdd
/dev/sdb: Moved: 0.51%
/dev/sdb: Moved: 100.00%
# 迁移完成,sdb无数据,执行vgreduce移除PV
[root@centos7 ~]# vgreduce webapp /dev/sdb
Removed "/dev/sdb" from volume group "webapp"
# 验证sdb已脱离卷组
[root@centos7 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 — 20.00g 20.00g
/dev/sdc webapp lvm2 a– <20.00g <20.00g
/dev/sdd webapp lvm2 a– <20.00g <10.00g
六、逻辑卷 LV 扩容、缩容
6.1 扩容逻辑卷 lvextend
方式 1:增加指定容量(+2G 代表扩容 2G)
# -L +2G 在原有基础上加2G空间
[root@centos7 ~]# lvextend -L +2G /dev/webapp/webapp01
Size of logical volume webapp/webapp01 changed from 10.00 GiB (2560 extents) to 12.00 GiB (3072 extents).
Logical volume webapp/webapp01 successfully resized.
[root@centos7 ~]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-a—– 12.00g
6.2 缩减逻辑 lvreduce
⚠️高危提示:缩容会删除超出空间内数据,生产严禁随意执行!
# -L -2G 减少2G容量,交互输入y确认
[root@centos7 ~]# lvreduce -L -2G /dev/webapp/webapp01
WARNING: Reducing active logical volume to 10.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce webapp/webapp01? [y/n]: y
Size of logical volume webapp/webapp01 changed from 12.00 GiB (3072 extents) to 10.00 GiB (2560 extents).
Logical volume webapp/webapp01 successfully resized.
[root@centos7 ~]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-a—– 10.00g
七、文件系统扩容(XFS/EXT4 区分)
7.1 XFS 文件系统(CentOS7 默认,仅支持扩容,不可缩容)
两步扩容流程:lvextend 扩容 LV → xfs_growfs 刷新文件系统
# 1. 将LV扩容至15G
[root@centos7 ~]# lvextend -L 15G /dev/webapp/webapp01
[root@centos7 ~]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-ao—- 15.00g
# 2. xfs_growfs 在线刷新挂载点,无需卸载
[root@centos7 ~]# xfs_growfs /usr/share/nginx/html
[root@centos7 ~]# df -h /usr/share/nginx/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 15G 140M 15G 1% /usr/share/nginx/html
一键合并扩容(-r 自动同步文件系统)
# -r 参数:扩容LV同时自动刷新文件系统,简化操作
[root@centos7 ~]# lvextend -rL 20G /dev/webapp/webapp01
[root@centos7 ~]# df -h /usr/share/nginx/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 20G 176M 20G 1% /usr/share/nginx/html
7.2 EXT4 文件系统(支持扩容 + 缩容)
扩容操作
[root@centos7 ~]# lvextend -L 25G /dev/webapp/webapp01
# resize2fs 刷新ext4文件系统
[root@centos7 ~]# resize2fs /dev/webapp/webapp01
EXT4 缩容强制流程文本框
🚨EXT4 缩容四步硬性要求,顺序不能乱
# 1 卸载
[root@centos7 ~]# umount /usr/share/nginx/html
# 2 强制磁盘检测
[root@centos7 ~]# e2fsck -f /dev/webapp/webapp01
# 3 文件系统缩至10G
[root@centos7 ~]# resize2fs /dev/webapp/webapp01 10G
# 4 LV缩容
[root@centos7 ~]# lvreduce -L 10G /dev/webapp01
# 5 重新挂载验证
[root@centos7 ~]# mount /usr/share/nginx/html
八、LVM 快照(数据备份神器)
快照作用🎯
瞬间复制逻辑卷当前全部数据,用于升级、测试前备份,故障一键恢复;快照占用空间仅记录变更数据,节省存储。
创建快照命令参数
-s:snapshot 创建快照卷;-L 指定快照容量(不小于源 LV 使用空间)
# 创建webapp01快照webapp01-snap1,分配10G快照空间
[root@centos7 ~]# lvcreate -s -n webapp01-snap1 -L 10G /dev/webapp/webapp01
Logical volume "webapp01-snap1" created.
# 挂载快照查看备份数据
[root@centos7 ~]# mount /dev/webapp/webapp01-snap1 /webapp/webapp01/
九、LVM RAID1 冗余卷(单盘不坏数据)
运维场景
服务器无硬件 RAID 卡,使用 LVM 软 RAID1 实现双盘镜像,一块硬盘损坏数据不丢失
# –type raid1 创建镜像逻辑卷
[root@centos7 ~]# lvcreate –type raid1 -n webapp01 -L 15G webapp
[root@centos7 ~]# mkfs.xfs /dev/webapp/webapp01
[root@centos7 ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html/
硬盘故障修复流程
# 1 移除损坏硬盘
[root@centos7 ~]# vgreduce –removemissing webapp –force
# 2 新增硬盘加入VG
[root@centos7 ~]# vgextend webapp /dev/sdd
# 3 重建raid镜像
[root@centos7 ~]# lvconvert –repair /dev/webapp/webapp01
十、全文运维速查表格
LVM 全套命令汇总表
| 初始化硬盘为 PV | pvcreate /dev/sdb | 裸硬盘转为 LVM 物理卷 |
| 查看 PV | pvs / pvdisplay | 查看物理卷信息 |
| 创建卷组 | vgcreate vg 名 /dev/sdb | 多 PV 合并存储池 |
| 扩容 VG | vgextend vg 名 /dev/sdc | 新增硬盘加入 VG |
| 缩减 VG | pvmove + vgreduce | 迁移数据后移除 PV |
| 创建逻辑卷 | lvcreate -n 名 -L 容量 VG | 划分业务存储卷 |
| 扩容 LV | lvextend +/- 容量 设备 | 扩大逻辑卷空间 |
| XFS 刷新扩容 | xfs_growfs 挂载点 | 在线生效扩容 |
| EXT4 刷新 | resize2fs 设备 | ext 文件系统调整 |
| 创建快照 | lvcreate -s -n 快照名 | 数据瞬时备份 |
| 创建 RAID1 | lvcreate –type raid1 | 双盘数据镜像 |
| 删除 LV/VG/PV | lvremove/vgremove/pvremove | 销毁 LVM 结构 |





