一、基础知识
1、简介
LVM(Logical Volume Manager)即逻辑卷管理器,是Linux系统下对磁盘分区进行管理的一种机制。LVM在硬盘分区和文件系统之间添加了一个逻辑层(抽象层),包括重新设定文件系统的大小。为文件系统屏蔽了下层的磁盘分区布局,提供了一个可横跨多个物理设备的抽象的卷组,用户可以在这个卷组上创建文件系统。
2、基本概念
- PV(Physical Volume,物理卷): LVM存储管理的最底层,可以是整个物理硬盘或实际物理硬盘上的分区。物理卷在加入LVM之前需要经过特殊处理,以便LVM能够识别和管理。
- VG(Volume Group,卷组): 建立在物理卷之上的一个逻辑层,它包含了一个或多个物理卷。卷组将多个物理卷组合在一起,形成一个可管理的单元,类似于非LVM系统中的物理硬盘。
- LV(Logical Volume,逻辑卷): 建立在卷组之上的一个逻辑层,它类似于非LVM系统中的硬盘分区。逻辑卷可以在其上建立文件系统,并挂载到不同的挂载点,用于存储数据。
- PE(Physical Extent,物理区域): 物理卷中可用于分配的最小存储单元。PE的大小是可配置的,默认为4MB。在建立卷组时,物理区域的大小会被指定,并且一旦确定就不能更改。同一卷组中的所有物理卷的物理区域大小必须一致。
- LE(Logical Extent,逻辑区域): 逻辑卷中可用于分配的最小存储单元。逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小,即一个LE对应一个PE。
3、实现过程
- 将设备指定为物理卷(PV)
- 在一个或者多个物理卷上创建一个卷组(VG),物理卷是用固定大小的物理区域(PE)来定义的
- 在物理卷上创建的逻辑卷(LV),是由逻辑区域(LE)组成
- 可以在逻辑卷上创建文件系统并挂载
二、pv 管理工具
LVM 的核心是 “存储虚拟化”,pv 是这一过程的第一步,为 LVM 提供 “原料”
1、创建pv
#将整块磁盘 /dev/sdb 初始化为 PV
pvcreate /dev/sdb
#将磁盘分区 /dev/sdc1 初始化为 PV
pvcreate /dev/sdc1
2、查看pv状态
#显示 PV 的基本信息(如大小、所属 VG、空闲空间等)
pvs
#显示 /dev/sdb 的元数据、PE 大小、UUID 等详细信息
pvdisplay /dev/sdb
3、删除pv
#移除 /dev/sdb 上的 LVM 标识,还原为普通存储设备
pvremove /dev/sdb
三、vg 管理工具
vg 是 LVM 的中间层,作用是将多个 pv(物理卷)“聚合” 成一个统一的 “存储池”,屏蔽底层 pv 的物理差异(如磁盘型号、大小),为上层 lv 提供 “可灵活分配的空间”。
1、创建vg
#-s 指定PE大小,数字加单位,单位为 k|K|m|M|g|G|t|T|p|P|e|E
vgcreate [-s Size ] vgname pv1 [pv2...]
#创建名为 vg_data 的 vg,将 pv /dev/sdb 和 /dev/sdc1 加入其中
vgcreate vg_data /dev/sdb /dev/sdc1
2、查看vg状态
#简洁显示所有 vg 的基本信息(名称、大小、空闲空间、pe 大小)
vgs
#显示 vg_data 的详细配置(pv 列表、pe 总数、已用/空闲 pe 数等)
vgdisplay vg_data
3、添加/移除物理卷
#将新 pv /dev/sdd 加入 vg_data,扩展 vg 总容量
vgextend vg_data /dev/sdd
#将空闲的 pv /dev/sdd 从 vg_data 中移除(需确保该 pv 无已分配 pe)
vgreduce vg_data /dev/sdd
4、删除vg
#删除 vg_data(需先删除该 vg 下所有 lv,且对应的 pv 解除绑定)
vgremove vg_data
四、lv 管理工具
lv 是 LVM 的顶层组件,是从 vg(卷组)中 “划分出的一块逻辑空间”,本质是 “虚拟的存储设备”。它可以像传统磁盘分区(如 /dev/sda1)一样被格式化、挂载,并直接供系统或应用使用。
1、创建lv
#创建逻辑卷,指定大小、pe 个数及逻辑卷名称
lvcreate {-L N[mMgGtT]|-l N} -n NAME VolumeGroup
#从 vg_data 中划分 100GB 空间,创建名为 lv_data 的 lv
lvcreate -L 100G -n lv_data vg_data
2、查看lv
#简洁显示所有 lv 的基本信息(所属 lg、大小、状态)
lvs
#显示 lv_data 的详细配置(pe 数量、映射的 pv、快照信息等)
lvdisplay /dev/vg_data/lv_data
3、扩容/缩容逻辑卷
#扩容 N 个单位大小、N 个 pe
lvextend {-L N[mMgGtT]|-l N} LV_NAME
#给 lv_data 增加 50GB
lvextend -L +50G /dev/vg_data/lv_data
#缩容 lv_data 减少20G
lvreduce -L -20G /dev/vg_data/lv_data
4、重设文件系统大小
#只支持 ext 系列文件系统
resize2fs lvname
#只支持 xfs 文件系统
xfs_growfs /mountpoint
5、删除lv
#删除 lv_data(需先卸载 lv,确保无数据依赖)
lvremove /dev/vg_data/lv_data
五、创建实践
1、准备工作
增加5块20G的磁盘文件,并进行分区。(分区操作是必须得)
echo -e 'n\np\n\n\n\nw' | fdisk /dev/sdb
echo -e 'n\np\n\n\n\nw' | fdisk /dev/sdc
echo -e 'n\np\n\n\n\nw' | fdisk /dev/sdd
echo -e 'n\np\n\n\n\nw' | fdisk /dev/sde
echo -e 'n\np\n\n\n\nw' | fdisk /dev/sdf
2、创建pv
查看系统默认pv及详细信息
将两个物理磁盘分区,创建两个pv
pvcreate /dev/sdb1 /dev/sdc1
查看当前 pv 信息
查看 /dev/sdb1 和 /dev/sdc1 的详情信息,没有执行vg动作的时候,PE Size 为0
3、创建vg
查看系统默认vg及详细信息
将两个物理卷,创建一个vg
vgcreate -s 16M testvg /dev/sdb1 /dev/sdc1
查看当前的 vg 信息
、
查看 testvg 的详细信息,此时可以看到 PE Size 是刚才指定的大小
4、创建lv
查看系统默认的lv及详细信息
从 testvg 中创建 lv1,大小为 100个PE
lvcreate -l 100 -n lv1 testvg
创建lv2,大小为5G
lvcreate -L 5G -n lv2 testvg
创建lv3,大小为剩下可用PE数量的 20%
lvcreate -l 20%free -n lv3 testvg
创建lv4,大小为指定vg的10%
lvcreate -l 10%VG -n lv4 testvg
查看当前 lv 信息
查看 testvg 的详情信息
5、应用 lv
创建挂载目录
mkdir -p /mount/lvm
格式化 lv
mkfs.ext4 /dev/testvg/lv1
挂载 lv 环境
mount /dev/testvg/lv1 /mount/lvm/
测试
六、管理实践
1、扩展pv
查看当前 pv 和 vg 信息
向 testvg 里面增加新的pv
vgextend testvg /dev/sdd1
检测 pv 效果,pv 个数增加,vg 容量增加
2、扩展lv
查看当前lv信息及挂载点容量
扩展 lv 的大小,增加1G
lvextend -L +1G /dev/testvg/lv1
刷新文件系统
resize2fs /dev/testvg/lv1
查看 lv 效果,可以看到容量已经增加1G
将所有剩余空间全部扩容,会自动刷新文件系统
查看 lv效果,可以看到空间增加到44G
3、缩容 lv
取消挂载
umount /dev/testvg/lv1
检测文件系统(必须)
e2fsck -f /dev/testvg/lv1
缩容文件系统到指定大小 3G
resize2fs /dev/testvg/lv1 3G
缩容 lv 到 3G
lvreduce -L 3G /dev/testvg/lv1
重新挂载
mount /dev/testvg/lv1 /mount/lvm
检测效果,可看到容量已经缩减至指定大小 3G
七、删除实践
1、删除lv
取消挂载
umount /mount/lvm
删除逻辑卷
lvremove /dev/testvg/lv1
查看效果
2、删除vg
删除卷组,可批量删除 lv
vgremove testvg
检测效果
3、删除pv
删除物理卷
pvremove /dev/sdb1 /dev/sdc1 /dev/sdd1
查看效果