一、LVM理论介绍
1.1 标准分区与LVM的基本概念
标准分区(Standard Partition) 是直接创建在物理磁盘上的传统分区方式,包括主分区、扩展分区和逻辑分区。它们是静态的,一旦创建后大小就固定不变(除非使用特殊工具调整)。
逻辑卷管理(Logical Volume Manager, LVM) ,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。
1.2 标准分区与LVM的区别

1.3 标准分区与LVM的架构对比
- 标准分区架构
bash
物理磁盘 → 分区表(MBR/GPT) → 主分区/扩展分区 → 文件系统
MBR分区表最多支持4个主分区(或3个主分区+1个扩展分区),而GPT分区表则突破了这一限制,同时支持更大的磁盘容量。
- LVM架构
bash
物理磁盘 → 物理卷(PV) → 卷组(VG) → 逻辑卷(LV) → 文件系统
1.4 LVM基本概念
- PV (Physical Volume):物理卷
物理卷是LVM的基本存储单元。它可以是一个完整的物理磁盘或磁盘分区。物理卷是LVM中用于创建卷组的基础元素。 - VG (Volume Group):卷组
卷组是由一个或多个物理卷组成的存储池。卷组将物理卷的存储空间整合在一起,为逻辑卷的创建提供统一的存储资源。卷组可以动态地添加或移除物理卷,以调整其存储容量。一个卷组中至少要包括一个物理卷。 - LV (Logical Volume):逻辑卷
逻辑卷是从卷组中分配出来的存储空间。它类似于传统分区,但具有更大的灵活性。逻辑卷可以动态地调整大小,而不会影响其中的数据。逻辑卷可以用于创建和管理文件系统,从而方便地扩展或缩小存储空间。多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。 - PE (Physical Extent):物理扩展
物理扩展是卷组内的最小分配单元。每个物理卷在被加入卷组时都会被划分成若干个大小相等的PE。
逻辑卷也是由这些PE组成的。PE使得LVM可以灵活地管理和分配存储空间。
PE的大小是可配置的,默认为4MB。PE的大小一旦确定将不能改变,同一个卷组中的所有物理卷的PE的大小是一致的。
LVM最多可以创建出65534个PE,因此LVM最大的VG卷组是256G。
1.5 LVM原理图

1.6 LVM常用的部署命令

二、LVM创建
2.1 服务器新增两块磁盘
服务器新添加两块磁盘后,Linux系统并不能直接识别到,因为连接存储设备的SCSI总线需要重新扫描,才能识别到这些新的存储设备。
bash
# 查看主机总线号
ls /sys/class/scsi_host/
# 重新扫描SCSI总线来添加设备
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
# 查看新添加的磁盘
lsblk

2.2 安装lvm相关软件包
bash
yum install lvm2 lvm2-libs -y
2.3 创建物理卷
powershell
# 创建PV
pvcreate /dev/sdb /dev/sdc
# 查看PV信息
pvdisplay
pvs
pvscan
2.4 创建卷组
powershell
# 创建VG(默认PE大小为4MB)
vgcreate vg_data /dev/sdb /dev/sdc
# 指定PE大小
vgcreate -s 16M vg_data /dev/sdb1
# 查看VG信息
vgdisplay
vgs
2.5 创建逻辑卷

powershell
# 创建第一个LV,容量为5G
lvcreate -L 5G -n lv_data1 vg_data
# 创建第二个LV,-l 指定PE个数,一个PE默认为4MB
lvcreate -l 200 -n lv_data2 vg_data
# 创建第三个LV,将剩余的全部的100%空间分给它
lvcreate -l 100%FREE -n lv_data3 vg_data
# 查看LV信息
lvdisplay
lvs

2.6 创建文件系统
powershell
# xfs文件系统
mkfs.xfs /dev/vg_data/lv_data1
mkfs.xfs /dev/vg_data/lv_data2
mkfs.xfs /dev/vg_data/lv_data3
# ext4文件系统
mkfs.ext4 /dev/vg_data/lv_data1
2.7 挂载逻辑卷
powershell
# 创建挂载点
mkdir {/data1,/data2,/data3}
# 手动挂载
mount /dev/vg_data/lv_data1 /data1
mount /dev/vg_data/lv_data2 /data2
mount /dev/vg_data/lv_data3 /data3
# 开机自动挂载
echo "/dev/vg_data/lv_data1 /data1 xfs defaults 0 0 " >> /etc/fstab
echo "/dev/vg_data/lv_data2 /data2 xfs defaults 0 0 " >> /etc/fstab
echo "/dev/vg_data/lv_data3 /data3 xfs defaults 0 0 " >> /etc/fstab
mount -a
⚠️ /dev/vg_data/lv_data1 和 /dev/mapper/vg_data-lv_data1 属于软链接关系,两者指向同一 LVM 逻辑卷设备,仅访问路径形式不同。
三、LVM扩容
3.1 扩展VG
- 新增加一块磁盘/dev/sdc
powershell
# 1. 创建PV
pvcreate /dev/sdc
# 2. 扩展VG
vgextend vg_data /dev/sdc
# 3. 查看扩展后的VG
vgdisplay vg_data
3.2 扩展LV
powershell
# 扩展 LV 大小(增加10G)
lvextend -L+10G /dev/vg_data/lv_data1
# 或指定LV大小
lvextend -L 30G /dev/vg_data/lv_data2
3.3 扩展文件系统
powershell
# 对于 XFS
xfs_growfs /dev/vg_data/lv_data1
# 对于 ext4
resize2fs /dev/vg_data/lv_data1
⚠️XFS文件系统原生不支持「在线缩容」,也无官方缩容工具(仅支持扩容),直接缩容会导致文件系统损坏!若必须缩容,需通过「备份数据 → 卸载并删除文件系统 → 缩容逻辑卷 → 重建 XFS 文件系统 → 恢复数据」的流程实现。