逻辑卷管理器LVM的原理及扩缩容

发布于:2025-09-10 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、基础知识

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

查看效果


网站公告

今日签到

点亮在社区的每一天
去签到