【理论+实践】Linux存储管理(二)之LVM管理—过来接我一招

前言

​ Hello,各位码友,大家好。经过我昨天的装*,不,讲解,你是否对Linux的存储管理有一定的认知了呢?今天我们将一起学习LVM,也就是Logical Volume Manager(逻辑卷管理),一起来学习一下吧。

​ 希望有所帮助。

LVM逻辑卷概述

​ 学习开始之前然爱过我们一起先做个梦,梦见有一天随着公司的业务的增加,文件系统负载就会越来越大,最后,遇到了空间不足的情况。

u=54691802,974156430&fm=26&gp=0

​ 好,现在可以梦中惊醒然后继续听我瞎白话了。

index

​ 倘若真的有一天我们遇到了空间不足的这种情况,而我们还在使用传统的分区方式进行磁盘管理,就不得不将现有的所有分区全部删除,并且重新规划新的存储解决方案。其实从一开始我们就需要一种管理机制,他能帮助我们动态的管理存储,而LVM就提供了这种功能。

​ LVM(Logical Volume Manager 逻辑卷管理)是基于内核的一种逻辑卷管理器,LVM适合于管理大存储设备,并允许用户动态调整文件系统的大小。此外,LVM的快照后功能可以帮助我们快速备份数据。LVM为我们提供了逻辑概念上的磁盘,使文件系统不再关心底层物理磁盘的概念。

使用LVM创建逻辑卷前,我们需要先了解几个概念:

  • 物理卷(Physical Volume,PV):物理卷是LVM的最底层概念,是LVM逻辑存储块,物理卷与磁盘分区是逻辑的对应关系。多个LVM物理卷可以合并或拆分,从而实现容量的扩容和缩减。LVM提供了命令工具可以将分区转换为物理卷,通过组合物理卷可以生成卷组。
  • 卷组(Volume Group,VG):卷组是LVM逻辑概念上的磁盘设备,通过将单个或者多个物理卷组合后生成卷组。卷组的大小取决于物理卷的容量以及个数。在CentOS 7系统中,对容量和个数没有限制。
  • 物理长度(Physical Extent,PE):物理长度是将物理卷组合为卷组后,所划分的最小存储单位,即逻辑意义上磁盘的最小存储单元。LVM默认PE大小为4MB。
  • 逻辑卷(Logical Volume,LV):逻辑卷就是LVM逻辑意义上的分区,我们可以指定从卷组中提取多少容量来创建逻辑卷,最后对逻辑卷格式化并挂载使用。

​ 了解了上面的概念之后接下来饿哦们要学习具体使用的命令。将普通分区转化为物理卷的命令是pvcreate,将物理卷组合为卷组的命令式vgcreate,从卷组中提取容量创建逻辑卷的命令是lvcreate。创建完成后可以分别使用pvdisplayvgdisplaylvdisplay查看效果。

1.pvcreate

描述:使用LVM对磁盘或分区进行初始化

用法:`pvcreate [选项] 物理卷 [物理卷…]

举个栗子:

[root@localhost ~]# pvcreate /dev/sdc4 /dev/sde
[root@localhost ~]# pvcreate /dev/sdb{1,2,3}

2.vgcreate

描述:创建卷组

用法:vgcreate [选项] 卷组名称 物理设备路径 [物理设备路径...]

举个栗子:

[root@localhost ~]# vgcreate test_vg1 /dev/sdb5 /dev/sdb6
[root@localhost ~]# vgcreate test_vg2 -s 16M /dev/sdc5 /devsdc6		#-s参数用来指定PE大小为16MB

3.lvcreate

描述:从卷中提取存储空间,创建逻辑卷

用法:lvcreate [选项] 卷组名称或路径 [物理卷或路径]

选项:

-l:指定使用多少个卷组中的PE创建逻辑卷。PE的容量在创建卷组时已经指定。

-L:直接指定逻辑卷的容量大小,单位可以是b(B)、s(S)、k(K)、m(M)、g(G)、t(T)、(P)、或e(E)。

-n:指定逻辑卷名称

举个栗子:

[root@localhost ~]# lvcreate -L 2G test_lv1 test_vg1			#从test_vg1卷组中提取2GB容量,创建名称为test_lv1的逻辑卷
[root@localhost ~]# lvcreate -l 200 -n test_lv2 test_vg2			#使用200个PE创建逻辑卷
[root@localhost ~]# lvcreate -L 2G -n test_lv1 test_vg1 /dev/sdb6	#指定使用test_vg1卷组中的/dev/sdb6这个物理卷的空间,创建名称为test_lv1的逻辑卷

创建LVM分区实例

​ 这里我们使用sdb这块20G的硬盘创建4个10G的分区,并使用者四个分区创建一个 名称为test_vg的卷组,最后从该卷组中创建出两个大小为12G的逻辑卷,名称为test_web、test_data。

1.使用fdisk创建分区

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xed17ef3b 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-167772159,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-167772159,默认为 167772159):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
分区号 (2-4,默认 2):2
起始 扇区 (20973568-167772159,默认为 20973568):
将使用默认值 20973568
Last 扇区, +扇区 or +size{K,M,G} (20973568-167772159,默认为 167772159):+10G
分区 2 已设置为 Linux 类型,大小设为 10 GiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
分区号 (3,4,默认 3):3
起始 扇区 (41945088-167772159,默认为 41945088):
将使用默认值 41945088
Last 扇区, +扇区 or +size{K,M,G} (41945088-167772159,默认为 167772159):+10G
分区 3 已设置为 Linux 类型,大小设为 10 GiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): e
已选择分区 4
起始 扇区 (62916608-167772159,默认为 62916608):
将使用默认值 62916608
Last 扇区, +扇区 or +size{K,M,G} (62916608-167772159,默认为 167772159):
将使用默认值 167772159
分区 4 已设置为 Extended 类型,大小设为 50 GiB
命令(输入 m 获取帮助):t
分区号 (1-5,默认 5):1			#指定分区编号
Hex 代码(输入 L 列出所有代码):8e	  #修改分区标签为LVM
已将分区“Linux”的类型更改为“Linux LVM”

命令(输入 m 获取帮助):t
分区号 (1-5,默认 5):2
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”

命令(输入 m 获取帮助):t
分区号 (1-5,默认 5):3
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”

命令(输入 m 获取帮助):t
分区号 (1-5,默认 5):4
Hex 代码(输入 L 列出所有代码):8e

You cannot change a partition into an extended one or vice versa.
Delete it first.

分区 4 的类型未更改:Extended

命令(输入 m 获取帮助):t
分区号 (1-5,默认 5):5
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):p

磁盘 /dev/sdb:85.9 GB, 85899345920 字节,167772160 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xd3d742b7

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   8e  Linux LVM
/dev/sdb2        20973568    41945087    10485760   8e  Linux LVM
/dev/sdb3        41945088    62916607    10485760   8e  Linux LVM
/dev/sdb4        62916608   167772159    52427776    5  Extended
/dev/sdb5        62918656    83890175    10485760   8e  Linux LVM
命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# partprobe /dev/sdb

2.使用pvcreate创建物理卷并使用pvdisplay查看结果

[root@localhost ~]# pvcreate /dev/sdv{1,2,3,5}
[root@localhost ~]# pvdisplay
 --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               qov2Ie-tBfU-g0bm-e2fE-xEUb-SO5X-N4WSYF

3.使用vgcreate创建卷组并使用vgdisplay查看结果

[root@localhost ~]# vgcreate test_vg /dev/sdb{1,2,3,5}
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               test_vg
  System ID             
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               39.98 GiB
  PE Size               4.00 MiB
  Total PE              10236
  Alloc PE / Size       3072 / 12.00 GiB
  Free  PE / Size       7164 / 27.98 GiB
  VG UUID               Uqz4de-BOnt-ud44-I0FX-27wV-5ivj-AiBnTl

4.使用lvcreate创建逻辑卷并使用lvdisplay查看结果

[root@localhost ~]# lvcreate -n test_web -L 12G test_vg
[root@localhost ~]# lvcreate -n test_data -l 3072 test_vg
[root@localhost ~]# lvdisplay
 --- Logical volume ---
  LV Path                /dev/test_vg/test_web
  LV Name                test_web
  VG Name                test_vg
  LV UUID                Tsg84q-GqJD-Qjq2-KxT4-2nF9-mQhX-KPTgqe
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-04-09 09:57:08 +0800
  LV Status              available
  # open                 0
  LV Size                12.00 GiB
  Current LE             3072
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

5.格式化并挂载

[root@localhost ~]# mkfs.xfs /dev/test_vg/test_web
[root@localhost ~]# mkfs.xfs /dev/test_vg/test_data
[root@localhost ~]# mkdir -p /test/{web,data}
[root@localhost ~]# cat >> /etc/fstab <<EOF
> /dev/test_vg/test_data /test/data xfs defaults 0 0
> /dev/test_vg/test_web /test/web xfs defaults 0 0
> EOF
[root@localhost ~]# mount -a
[root@localhost ~]# df -h	#查看文件系统挂载状态

修改LVM分区容量

​ 随着时间的推移,又出现了新的问题。逻辑卷test_data现有的存储空间已经不能满足企业大业务的需要,我们需要将存储容量增大至24GB时,LVM随时可以帮助我们动态调整文件系统的大小。由于test_vg这个卷组还有足够的剩余空间可以划分给逻辑卷,所以我们可以直接使用lvextend命令调整逻辑卷大小。但这个命令仅调整逻辑卷大小,使用该命令调整完逻辑卷大小后,还需要使用xfs_growfs命令更新文件系统的大小,具体方法如下:

[root@localhost ~]# lvextend -L +12G /dev/test_vg/test_data		#扩容逻辑卷
[root@localhost ~]# lvs		#查看逻辑卷已经扩容完成
[root@localhost ~]# df -h	#查看文件系统没有变化
[root@localhost ~]# xfs_growfs /dev/test_vg/test_data		#调整文件系统大小
[root@localhost ~]# df -h		#调整后查看文件系统大小,有变化

​ 此外,当我们的卷组没有足够的空间划分给逻辑卷时,LVM的卷组也是可以动态调整容量大小的,这时需要使用fdisk创建一个新的分区,并使用pvcreate命令转换为物理卷格式,接着通过vgextend将新的物理卷追加至现有的卷组空间中,最后使用lvextend调整逻辑卷的容量。接下来我们再次扩展逻辑卷test_data的存储空间至36GB。

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 6
起始 扇区 (83892224-167772159,默认为 83892224):
将使用默认值 83892224
Last 扇区, +扇区 or +size{K,M,G} (83892224-167772159,默认为 167772159):
将使用默认值 167772159
分区 6 已设置为 Linux 类型,大小设为 40 GiB

命令(输入 m 获取帮助):t
分区号 (1-6,默认 6):6
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
[root@localhost ~]# partprobe /dev/sdb
[root@localhost ~]# pvcreate /dev/sdb6
[root@localhost ~]# vgextend test_vg /dev/sdb6
[root@localhost ~]# vgdisplay test_vg
  --- Volume group ---
  VG Name               test_vg
  System ID             
  Format                lvm2
  Metadata Areas        5
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                5
  Act PV                5
  VG Size               79.98 GiB
  PE Size               4.00 MiB
  Total PE              20475
  Alloc PE / Size       9216 / 36.00 GiB
  Free  PE / Size       11259 / 43.98 GiB
  VG UUID               Uqz4de-BOnt-ud44-I0FX-27wV-5ivj-AiBnTl
[root@localhost ~]# lvextend -L 36G /dev/test_vg/test_data		#将逻辑卷扩展至36GB
[root@localhost ~]# xfs_growfs /dev/test_vg/test_data
[root@localhost ~]# df -h

注意:

在企业级实际生产环境中,为文件系统调整大小前一定要做好数据备份的工作。切记切记。

删除LVM分区

​ 当我们不再需要逻辑卷分区的时候,可以使用LVM命令轻松删除掉之前创建的物理卷、卷组和逻辑卷。删除的顺序应该与创建时的顺序相反,也就是卸载文件系统、删除逻辑卷、删除卷组、删除物理卷这样的顺序。卸载文件系统的时候需要注意,如果有必要,应该更新/etc/fstab文件。

[root@localhost ~]# umount /dev/test_vg/test_data
[root@localhost ~]# umount /dev/test_vg/test_web
[root@localhost ~]# lvremove /dev/test_vg/test_data
Do you really want to remove active logical volume test_vg/test_data? [y/n]: y
  Logical volume "test_data" successfully removed
[root@localhost ~]# lvremove /dev/test_vg/test_web
Do you really want to remove active logical volume test_vg/test_web? [y/n]: y
  Logical volume "test_web" successfully removed
[root@localhost ~]# vgremove test_vg
  Volume group "test_vg" successfully removed
[root@localhost ~]# pvremove /dev/sdb{1,2,3,5,6}
  Labels on physical volume "/dev/sdb1" successfully wiped.
  Labels on physical volume "/dev/sdb2" successfully wiped.
  Labels on physical volume "/dev/sdb3" successfully wiped.
  Labels on physical volume "/dev/sdb5" successfully wiped.
  Labels on physical volume "/dev/sdb6" successfully wiped.

u=847440895,1262914975&fm=26&gp=0

(哈哈,原来在博文中用表情包这么爽!!!)


本次分享就到这里,你学废了吗?动动你那技术大佬的小手,点个【一键三连】支持一下呗,感激不尽。

希望有所帮助。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

7旅病娘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值