问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

一文全解:LVM(逻辑卷管理器)

创作时间:
作者:
@小白创作中心

一文全解:LVM(逻辑卷管理器)

引用
1
来源
1.
https://www.cnblogs.com/kuangdaoyizhimei/p/18319074

LVM(逻辑卷管理器)是Linux系统中常用的硬盘设备资源管理技术,主要用于解决磁盘动态扩容或缩容的问题。本文将详细介绍LVM的基本概念和实战操作,帮助读者更好地理解和使用LVM。

一、逻辑卷管理器基本概念

LVM涉及以下几个核心概念:

  • PV(Physical Volume):物理卷,可以是一个硬盘,也可以是一个RAID磁盘阵列。
  • VG(Volume Group):卷组,由多个物理卷组成。
  • LV(Logical Volume):逻辑卷,基于卷组分配管理磁盘资源。
  • PE(Physical Extent):基本单元,是LVM能管理分配的最小单位,所有分配的空间都必须是PE的整数倍。

物理卷(PV)组成卷组(VG),逻辑卷(LV)基于卷组(VG)分配管理基本单元(PE)。这种结构允许逻辑卷跨多个物理硬盘,对外直接使用逻辑卷即可,无需关心其底层的物理存储架构。

二、逻辑卷管理实战

LVM的部署需要依次配置物理卷、卷组和逻辑卷。以下是常用的管理命令:

功能
物理卷管理
卷组管理
逻辑卷管理
扫描
pvscan
vgscan
lvscan
创建
pvcreate
vgcreate
lvcreate
显示
pvdisplay
vgdisplay
lvdisplay
删除
pvremove
vgremove
lvremove
扩容
-
vgextend
lvextend
缩容
-
vgreduce
lvreduce

1. 物理卷和卷组创建

假设我们有一台VMware虚拟机,新增了两块20G的硬盘(sdb和sdc)。

第一步:让两块硬盘支持LVM技术

pvcreate /dev/sdb /dev/sdc

第二步:将两块硬盘设备加入到storage卷组

vgcreate storage /dev/sdb /dev/sdc

第三步:查看卷组状态

vgdisplay

从输出中可以看到,卷组创建完成后,PE相关的参数就已经确定好了,大小是4MB,40G的空间一共划分出了10238个PE等待LVM划分逻辑卷使用。

2. 逻辑卷创建

第一步:创建逻辑卷

我们现在从storage卷组中切割出来一块201M的逻辑卷设备。切割方式有两种:

  • 按照大小切割,使用参数-L,比如-L 150M表示的是切割出来150MB大小的逻辑卷;
  • 以基本单元的个数为单位,使用参数-l,每个基本单元的默认大小是4MB,比如-l 37,就可以生成37*4MB=148MB大小的逻辑卷。

比较方便的肯定是根据大小进行切割:

lvcreate -n kdyzm_lv -L 201 storage

创建是成功了,但是可以看到它提示了个信息:Rounding up size to full physical extent 204.00 MiB。这个意思就是四舍五入创建了204MB的逻辑卷设备。为什么呢,我们明明创建的是201MB大小,它擅自给改成了204MB?答案是我们创建的大小必须是PE(Physical Extent,基本单元)的整数倍,PE大小是4MB,所以就给修正成了204MB。

Linux 系统会把 LVM 中的逻辑卷设备存放在/dev 设备目录中(实际上就是个快捷方式),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。

第二步:格式化和挂载

如果使用了逻辑卷管理器,不建议使用xfs文件系统,据说xfs和lvm的兼容性并不好。所以接下来使用ext4来格式化硬盘。

当然为了挂载重启后不失效,需要将挂载信息写入到 /etc/fstab 文件中,此处不赘述。

3. 逻辑卷扩容

使用逻辑卷最大的用处就是可以为它动态扩容:卷组由若干块硬盘组成,用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。

逻辑卷扩容的步骤:取消挂载->逻辑卷扩容->检查硬盘完整性->重置设备在系统中的容量->重新挂载硬盘设备

第一步:取消挂载

扩容前请一定要记得卸载设备和挂载点的关联:

umount /kdyzm_lv

第二步:逻辑卷扩容

将逻辑卷/dev/storage/kdyzm_lv的容量从204.00 MB扩容到300MB

lvextend -L 300M /dev/storage/kdyzm_lv

同时,它也提示了“Size of logical volume storage/kdyzm_lv changed from 204.00 MiB (51 extents) to 300.00 MiB (75 extents).”,这个逻辑卷原来的容量是204M(51个基本单元),现在扩容到了300M(75个基本单元)。

第三步:检查硬盘完整性

确认目录结构、内容和文件内容没有丢失。一般情况下没有报错,均为正常情况。

e2fsck -f /dev/storage/kdyzm_lv

第四步:重置设备在系统中的容量

刚刚是对 LV(逻辑卷)设备进行了扩容操作,但系统内核还没有同步到这部分新修改的信息,需要手动进行同步。

resize2fs /dev/storage/kdyzm_lv

第五步:重新挂载硬盘

mount /dev/storage/kdyzm_lv /kdyzm_lv

需要注意的是这里显示的容量是287M,而非300M,要比我们当初设计的扩容容量小一些,这个原因是硬件厂商的制造标准是1M=1000KB,1KB=1000B;在计算机系系统中则是1M=1024KB,1KB=1024B。因此硬盘容量会有些“缩水”,300M的硬盘最终会被识别为 300MB1000K1000B/1024B/1024K=286.1022MB ,大概的算法就是这么算的。

4. 缩小逻辑卷

缩容操作数据丢失的风险会比较大,所以Linux系统规定,为了保证数据安全,在对LVM逻辑卷进行缩容操作之前,必须先检查文件系统的完整性。完整的缩容步骤如下:取消挂载->检查文件系统完整性->通知系统内核即将缩容->逻辑卷缩容

第一步:取消挂载

umount /kdyzm_lv

第二步:检查文件系统的完整性。

上面说过,检查文件系统完整性是Linux系统强制要求的,如果跳过这一步骤,就会有如下提示要求必须先运行命令e2fsck -f /dev/storage/kdyzm_lv,那就按照要求,先运行该命令

e2fsck -f /dev/storage/kdyzm_lv

第三步:通知系统内核将逻辑卷容量缩小到100M

resize2fs /dev/storage/kdyzm_lv 100M

运行该命令没有报错,说明内核通过计算觉得缩容不会有问题,所以批准了缩容操作。

第四步:逻辑卷缩容

通过lvreduce命令将逻辑卷的容量缩小到100M

lvreduce -L 100M /dev/storage/kdyzm_lv

运行完命令,它还会提示下该命令有风险,要对执行命令进行二次确认,输入y即可。

第五步:重新挂载系统

这样就完成了缩容。

5. 删除逻辑卷

删除逻辑卷,需要依次删除逻辑卷、卷组、物理卷设备,顺序不可颠倒。

第一步:取消挂载

删除/etc/fstab文件中记录的挂载信息,取消挂载关联。

umount /kdyzm_lv

由于没有写/etc/fstab文件,所以这里不需要删除相关信息。

第二步:删除逻辑卷

lvremove /dev/storage/kdyzm_lv

注意这里需要二次确认。

第三步:删除卷组

vgremove storage

这里只需要写卷组名称,因为我们当初创建卷组的时候也是这么创建的。

第四步:删除物理卷

pvremove /dev/sdb /dev/sdc
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号