目录
[1. LVM 是什么](#1. LVM 是什么)
[2. LVM 解决的主要问题](#2. LVM 解决的主要问题)
[3. LVM 整体架构](#3. LVM 整体架构)
[4. 核心概念](#4. 核心概念)
[4.1 PV:Physical Volume,物理卷](#4.1 PV:Physical Volume,物理卷)
[4.2 VG:Volume Group,卷组](#4.2 VG:Volume Group,卷组)
[4.3 LV:Logical Volume,逻辑卷](#4.3 LV:Logical Volume,逻辑卷)
[4.4 PE:Physical Extent,物理扩展块](#4.4 PE:Physical Extent,物理扩展块)
[4.5 LE:Logical Extent,逻辑扩展块](#4.5 LE:Logical Extent,逻辑扩展块)
[5. LVM 设备命名](#5. LVM 设备命名)
[6. LVM 基本使用流程](#6. LVM 基本使用流程)
[6.1 创建分区](#6.1 创建分区)
[6.2 创建 PV](#6.2 创建 PV)
[6.3 创建 VG](#6.3 创建 VG)
[6.4 创建 LV](#6.4 创建 LV)
[6.5 格式化](#6.5 格式化)
[6.6 挂载](#6.6 挂载)
[7. LVM 扩容](#7. LVM 扩容)
[7.1 添加新 PV](#7.1 添加新 PV)
[7.2 扩展 VG](#7.2 扩展 VG)
[7.3 扩展 LV](#7.3 扩展 LV)
[7.4 扩展文件系统](#7.4 扩展文件系统)
[8. LVM 缩容](#8. LVM 缩容)
[9. LVM 删除流程](#9. LVM 删除流程)
[10. 常用查看命令](#10. 常用查看命令)
[10.1 查看 PV](#10.1 查看 PV)
[10.2 查看 VG](#10.2 查看 VG)
[10.3 查看 LV](#10.3 查看 LV)
[10.4 查看块设备](#10.4 查看块设备)
[10.5 查看 device-mapper 设备](#10.5 查看 device-mapper 设备)
[11. LVM 工作原理简述](#11. LVM 工作原理简述)
[12. LVM 写入模式](#12. LVM 写入模式)
[12.1 线性模式](#12.1 线性模式)
[12.2 条带模式](#12.2 条带模式)
[13. LVM 高级特性](#13. LVM 高级特性)
[13.1 快照 Snapshot](#13.1 快照 Snapshot)
[13.2 Thin Provisioning,精简配置](#13.2 Thin Provisioning,精简配置)
[13.3 数据迁移](#13.3 数据迁移)
[13.4 缓存加速](#13.4 缓存加速)
[13.5 镜像与 RAID](#13.5 镜像与 RAID)
[14. LVM 优点](#14. LVM 优点)
[15. LVM 缺点与风险](#15. LVM 缺点与风险)
[16. 常见运维场景](#16. 常见运维场景)
[16.1 /var/lib/docker 空间不足](#16.1 /var/lib/docker 空间不足)
[16.2 日志目录写满](#16.2 日志目录写满)
[16.3 新增磁盘扩容 VG](#16.3 新增磁盘扩容 VG)
[17. 常用命令速查表](#17. 常用命令速查表)
[18. 生产最佳实践](#18. 生产最佳实践)
[19. 一份最小实践示例](#19. 一份最小实践示例)
[20. 总结](#20. 总结)
1. LVM 是什么
LVM 全称 Logical Volume Manager,即逻辑卷管理,是 Linux 下对磁盘分区进行管理的一种机制。
它在物理磁盘和文件系统之间增加一个逻辑抽象层,使文件系统不再直接受限于物理磁盘或分区的大小,从而提升磁盘空间管理的灵活性。
传统磁盘分区的大小在创建时基本固定,后续调整代价较高;LVM 可以动态扩缩容、跨磁盘聚合空间,并支持快照等能力。
2. LVM 解决的主要问题
LVM 主要解决传统分区方案的几个痛点:
- 分区大小固定,扩容困难
传统分区扩容通常需要停机、备份、删除分区、重建分区、恢复数据。 - 单个分区无法跨物理磁盘
多块磁盘无法直接合并成一个连续的大分区。 - 磁盘空间利用率低
为了避免后续扩容,管理员可能预留大量空间,导致浪费。 - 业务需要动态存储
数据库、容器、日志目录等场景经常需要在线扩容。
3. LVM 整体架构
LVM 的典型结构如下:
文件系统 ext4 / xfs
↑
逻辑卷 LV
↑
卷组 VG
↑
物理卷 PV
↑
物理磁盘 / 分区
也可以理解为:
/dev/sdb1、/dev/sdc1
↓
PV
↓
VG
↓
LV
↓
挂载使用
LVM 通过 PV、VG、LV 三层抽象管理存储空间。
4. 核心概念
4.1 PV:Physical Volume,物理卷
PV 是 LVM 的最底层抽象。
它可以是:
整块磁盘
磁盘分区
RAID 设备
Loopback 设备
例如:
/dev/sdb
/dev/sdb1
初始化 PV 后,LVM 会在设备上写入标签和元数据信息。
常用命令:
pvcreate /dev/sdb1
pvs
pvdisplay
4.2 VG:Volume Group,卷组
VG 是由一个或多个 PV 组成的存储池。
它把多个物理卷的空间合并成一个统一的逻辑磁盘池,然后再从 VG 中划分 LV。
例如:
vgcreate datavg /dev/sdb1 /dev/sdc1
表示把 /dev/sdb1 和 /dev/sdc1 合并成名为 datavg 的卷组。
常用命令:
vgcreate datavg /dev/sdb1
vgextend datavg /dev/sdc1
vgs
vgdisplay
4.3 LV:Logical Volume,逻辑卷
LV 是从 VG 中划分出来的逻辑空间,类似传统分区。
LV 可以格式化并挂载使用:
lvcreate -L 100G -n appdata datavg
mkfs.ext4 /dev/datavg/appdata
mount /dev/datavg/appdata /data
常用命令:
lvcreate
lvextend
lvreduce
lvremove
lvs
lvdisplay
4.4 PE:Physical Extent,物理扩展块
PE 是 PV 中可用于分配的最小存储单元。
默认大小通常是:
4 MB
可以在创建 VG 时指定 PE 大小。
4.5 LE:Logical Extent,逻辑扩展块
LE 是 LV 中的最小存储单元。
LE 和 PE 之间存在映射关系。LVM 通过 PE 到 LE 的映射来管理数据写入位置。
5. LVM 设备命名
LVM 逻辑卷常见路径有两种:
/dev/VG名/LV名
/dev/mapper/VG名-LV名
例如:
/dev/vg_apsara_paas/paasdata
/dev/mapper/vg_apsara_paas-paasdata
其中:
vg_apsara_paas 是 VG 名
paasdata 是 LV 名
lsblk 中看到的:
vg_apsara_paas-paasdata
通常是 device-mapper 设备名,格式为:
VG名-LV名
6. LVM 基本使用流程
一个典型的 LVM 创建流程如下:
磁盘分区
↓
修改分区类型为 LVM
↓
创建 PV
↓
创建 VG
↓
创建 LV
↓
格式化文件系统
↓
挂载使用
6.1 创建分区
可以使用:
fdisk /dev/sdb
或:
parted /dev/sdb
如果使用 MBR 分区表,通常需要将分区类型修改为 Linux LVM,类型 ID 常为 8e。
6.2 创建 PV
pvcreate /dev/sdb1
查看:
pvs
pvdisplay
6.3 创建 VG
vgcreate datavg /dev/sdb1
查看:
vgs
vgdisplay
6.4 创建 LV
创建 100G 的逻辑卷:
lvcreate -L 100G -n appdata datavg
使用 VG 全部剩余空间:
lvcreate -l 100%FREE -n appdata datavg
查看:
lvs
lvdisplay
6.5 格式化
ext4:
mkfs.ext4 /dev/datavg/appdata
XFS:
mkfs.xfs /dev/datavg/appdata
6.6 挂载
mkdir /data
mount /dev/datavg/appdata /data
查看挂载:
df -h
mount | grep appdata
7. LVM 扩容
LVM 扩容通常分为三步:
扩展 VG
扩展 LV
扩展文件系统
7.1 添加新 PV
pvcreate /dev/sdc1
7.2 扩展 VG
vgextend datavg /dev/sdc1
7.3 扩展 LV
增加 50G:
lvextend -L +50G /dev/datavg/appdata
使用 VG 所有剩余空间:
lvextend -l +100%FREE /dev/datavg/appdata
7.4 扩展文件系统
如果是 ext4:
resize2fs /dev/datavg/appdata
如果是 XFS:
xfs_growfs /data
XFS 文件系统扩容时使用挂载点,而不是设备名。
8. LVM 缩容
LVM 缩容风险较高,生产环境建议谨慎操作。
一般流程:
卸载文件系统
检查文件系统
缩小文件系统
缩小 LV
例如 ext4:
umount /data
e2fsck -f /dev/datavg/appdata
resize2fs /dev/datavg/appdata 50G
lvreduce -L 50G /dev/datavg/appdata
mount /data
注意:
XFS 通常不支持在线或离线缩容。
如果要缩小 XFS,通常需要备份数据、删除 LV、重建 LV、恢复数据。
9. LVM 删除流程
删除 LVM 一般按照相反顺序进行:
卸载 LV
删除 LV
删除 VG
删除 PV
示例:
umount /data
lvremove /dev/datavg/appdata
vgremove datavg
pvremove /dev/sdb1
如果 VG 中还有 LV,需要先删除 LV。
10. 常用查看命令
10.1 查看 PV
pvs
pvdisplay
输出示例:
PV VG Fmt Attr PSize PFree
/dev/sdb1 datavg lvm2 a-- 100.00g 20.00g
10.2 查看 VG
vgs
vgdisplay
输出示例:
VG #PV #LV #SN Attr VSize VFree
datavg 1 1 0 wz--n- 100.00g 20.00g
字段含义:
|-------|---------|
| 字段 | 含义 |
| VG | 卷组名 |
| #PV | PV 数量 |
| #LV | LV 数量 |
| #SN | 快照数量 |
| VSize | VG 总大小 |
| VFree | VG 剩余空间 |
10.3 查看 LV
lvs
lvdisplay
输出示例:
LV VG Attr LSize
appdata datavg -wi-ao---- 80.00g
常见属性含义:
|----|--------------|
| 属性 | 含义 |
| w | 可写 |
| a | active,已激活 |
| o | open,已打开或已挂载 |
10.4 查看块设备
lsblk
查看 LVM 相关设备:
lsblk | grep datavg
10.5 查看 device-mapper 设备
dmsetup ls
查看映射关系:
ls -l /dev/mapper/
11. LVM 工作原理简述
LVM 在每个 PV 头部维护元数据,其中包括 VG 布局、PV 信息、LV 信息以及 PE 到 LE 的映射关系。
当上层文件系统写入 LV 时,LVM 会根据映射关系把数据写入对应的 PE。
这种映射机制使 LVM 可以动态调整逻辑卷大小,而不必直接移动整个分区。
12. LVM 写入模式
LVM 常见写入模式包括:
12.1 线性模式
数据先写满一个 PV,再写下一个 PV。
这是默认模式。
优点:
结构相对简单
单个 PV 故障时,其他 PV 上的数据仍可能保留
12.2 条带模式
数据分散写入多个 PV,类似 RAID 0。
优点:
可能提升顺序读写性能
缺点:
可靠性较低
任一成员设备故障都可能导致数据不可用
13. LVM 高级特性
13.1 快照 Snapshot
LVM 支持基于写时复制 Copy-on-Write 的快照机制,可以快速创建一致性副本。
常用于:
备份
测试环境克隆
数据回滚
示例:
lvcreate -s -L 10G -n appdata_snap /dev/datavg/appdata
13.2 Thin Provisioning,精简配置
LVM 支持精简配置,允许逻辑卷的名义容量超过实际物理容量,按需分配空间。
适用于:
虚拟机磁盘
容器存储
多租户环境
13.3 数据迁移
可以使用 pvmove 在线将数据从一个 PV 迁移到另一个 PV。
示例:
pvmove /dev/sdb1 /dev/sdc1
迁移完成后可从 VG 中移除旧 PV:
vgreduce datavg /dev/sdb1
13.4 缓存加速
LVM 可以使用 SSD 作为 HDD 的缓存层,加速热点数据访问。
13.5 镜像与 RAID
LVM 支持镜像等方式提高数据冗余能力。
常见用途:
关键数据冗余
提高可用性
14. LVM 优点
LVM 的主要优点包括:
- 动态扩容
可以在系统运行状态下扩展逻辑卷和文件系统。 - 跨磁盘聚合
多块磁盘可以合并成一个大存储池。 - 灵活分配
可按需创建不同大小的 LV。 - 便于迁移
可通过pvmove迁移底层磁盘数据。 - 支持快照
适合备份和测试。 - 提高磁盘利用率
避免传统分区预留空间造成的浪费。
15. LVM 缺点与风险
LVM 虽然灵活,但也有注意事项:
- 增加抽象层
故障排查比传统分区更复杂。 - 缩容风险高
尤其是 XFS 通常不支持缩容。 - 元数据损坏影响较大
PV/VG/LVM metadata 损坏可能导致 LV 无法识别。 - 条带模式可靠性较低
类似 RAID 0,没有冗余。 - 生产操作需谨慎
扩容相对安全,缩容和删除操作建议先备份。
16. 常见运维场景
16.1 /var/lib/docker 空间不足
查看挂载:
df -h /var/lib/docker
查看 LV:
lvs
扩容 LV:
lvextend -L +100G /dev/vg_apsara_paas/paasdata
扩展文件系统:
ext4:
resize2fs /dev/vg_apsara_paas/paasdata
XFS:
xfs_growfs /var/lib/docker
16.2 日志目录写满
可以将日志目录单独挂载到独立 LV,例如:
/var/lib/docker/logs
这样可以避免日志占满主数据盘。
16.3 新增磁盘扩容 VG
pvcreate /dev/sdc1
vgextend vg_apsara_paas /dev/sdc1
lvextend -l +100%FREE /dev/vg_apsara_paas/paasdata
resize2fs /dev/vg_apsara_paas/paasdata
如果是 XFS:
xfs_growfs /var/lib/docker
17. 常用命令速查表
|---------|----------------------------------------|
| 操作 | 命令 |
| 创建 PV | pvcreate /dev/sdb1 |
| 查看 PV | pvs / pvdisplay |
| 创建 VG | vgcreate datavg /dev/sdb1 |
| 查看 VG | vgs / vgdisplay |
| 扩展 VG | vgextend datavg /dev/sdc1 |
| 创建 LV | lvcreate -L 100G -n appdata datavg |
| 查看 LV | lvs / lvdisplay |
| 扩展 LV | lvextend -L +50G /dev/datavg/appdata |
| 扩展 ext4 | resize2fs /dev/datavg/appdata |
| 扩展 XFS | xfs_growfs /挂载点 |
| 删除 LV | lvremove /dev/datavg/appdata |
| 删除 VG | vgremove datavg |
| 删除 PV | pvremove /dev/sdb1 |
| 查看块设备 | lsblk |
| 查看映射 | dmsetup ls |
18. 生产最佳实践
-
重要操作前备份数据
rsync -avh /data/ /backup/data/
-
优先使用扩容,谨慎缩容
-
日志目录和数据目录分离
/data
/logs -
VG 预留一定空闲空间
便于后续扩容和快照使用。 -
使用稳定设备名
生产环境建议使用:/dev/mapper/VG-LV
UUID -
fstab 中建议使用 UUID
blkid
-
定期检查 LVM 状态
pvs
vgs
lvs
df -h -
不要随意执行
pvremove、vgremove、lvremove
19. 一份最小实践示例
假设新增磁盘 /dev/sdb,需要创建 LVM 并挂载到 /data。
pvcreate /dev/sdb1
vgcreate datavg /dev/sdb1
lvcreate -l 100%FREE -n appdata datavg
mkfs.ext4 /dev/datavg/appdata
mkdir /data
mount /dev/datavg/appdata /data
df -h /data
写入开机挂载:
blkid /dev/datavg/appdata
编辑:
vi /etc/fstab
示例:
UUID=xxxx-xxxx /data ext4 defaults 0 0
20. 总结
LVM 的核心价值是把物理磁盘抽象成可动态管理的存储池。
最核心的三个对象是:
PV:物理卷
VG:卷组
LV:逻辑卷
最常见的使用路径是:
pvcreate → vgcreate → lvcreate → mkfs → mount
最常见的运维操作是:
vgextend → lvextend → resize2fs / xfs_growfs
对于生产环境,LVM 扩容通常比较安全,但缩容、删除、迁移等操作需要谨慎,建议操作前确认文件系统类型、挂载状态和数据备份。