7.2 LVM(逻辑卷管理器)

前面学习的硬盘设备管理技术虽然能够有效地提高硬盘设备的读写速度以及数据的安全性,但是在硬盘分好区或者部署为 RAID 磁盘阵列之后,再想修改硬盘分区大小就不容易了。换句话说,当用户想要随着实际需求的变化调整硬盘分区的大小时,会受到硬盘 “灵活性”的限制。这时就需要用到另外一项非常普及的硬盘设备资源管理技术了—LVM(逻辑卷管理器)。LVM 可以允许用户对硬盘资源进行动态调整。

逻辑卷管理器是 Linux 系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而 LVM 技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的低层架构和布局,就可以实现对硬盘分区的动态调整。LVM 的技术架构如图 7-7 所示。

为了容易理解,举一个吃货的例子。比如小明家里想吃馒头但是面粉不够了,于是妈妈从隔壁老王家、老李家、老张家分别借来一些面粉,准备蒸馒头吃。首先需要把这些面粉(物理卷[PVPhysical Volume])揉成一个大面团(卷组[VGVolume Group]),然后再把这个大团面分割成一个个小馒头(逻辑卷[LVLogical Volume]),而且每个小馒头的重量必须是每勺面粉(基本单元[PEPhysical Extent])的倍数。

物理卷处于 LVM 中的最底层,可以将其理解为物理硬盘、硬盘分区或者 RAID 磁盘阵列,这都可以。卷组建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。这就是 LVM 的核心理念。

目录

7.2.1 部署逻辑卷

第1步:让新添加的两块硬盘设备支持 LVM 技术。 

第2步:把两块硬盘设备加入到 myvg1 卷组中,然后查看卷组的状态。

第3步:切割出一个 30GB 逻辑卷设备。

第4步:把生成好的逻辑卷进行格式化,然后挂载使用。 

第5步:查看挂载状态,并写入到配置文件,使其永久生效。 

7.2.2 扩容逻辑卷

第1步:卸载设备和挂载点的关联。逻辑卷扩展。

第2步:检查硬盘完整性,并重置硬盘容量。

第3步:重新挂载硬盘设备并查看挂载状态。

7.2.3 缩小逻辑卷

第1步:文件系统卸载掉、检查文件系统的完整性。

第2步:把逻辑卷 mylv1 的容量减小到 20 G。

 第3步:重新挂载文件系统并查看系统状态。

7.2.4 逻辑卷快照

第1步: 首先查看卷组的信息。

第2步:使用 -s 参数生成一个快照卷,使用-L 参数指定切割的大小。

第2步:在挂载的目录中创建文件,然后再查看快照卷的状态。

第3步:校验 SNAP 快照卷效果,要对逻辑卷进行快照还原操作。

第4步:快照卷会被自动删除掉。

7.2.5 删除逻辑卷

第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。

第2步:删除逻辑卷设备,路径要填写绝对路径,需要输入 y 来确认操作。

第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。

第4步:删除物理卷设备。


7.2.1 部署逻辑卷

一般而言,在生产环境中无法精确地评估每个硬盘分区在日后的使用情况,因此会导致原先分配的硬盘分区不够用。比如,伴随着业务量的增加,用于存放交易记录的数据库目录的体积也随之增加;因为分析并记录用户的行为从而导致日志目录的体积不断变大,这些都会导致原有的硬盘分区在使用上捉襟见肘。而且,还存在对较大的硬盘分区进行精简缩容的情况。
这种情况可以通过部署 LVM 来解决上述问题。部署 LVM 时,需要逐个配置物理卷、卷组和逻辑卷。常用的部署命令如表 7-2 所示。
为了避免多个实验之间相互发生冲突,请大家自行将虚拟机还原到初始状态,并在虚拟机中添加两块新硬盘设备,然后开机,如图 7-8 所示。在虚拟机中添加两块新硬盘设备的目的,是为了更好地演示 LVM 理念中用户无需关心底层物理硬盘设备的特性。我们先对这两块新硬盘进行创建物理卷的操作,可以将该操作简单理解成让硬盘设备支持 LVM 技术,或者理解成是把硬盘设备加入到 LVM 技术可用的硬件资源池中,然后对这两块硬盘进行卷组合并,卷组的名称可以由用户来自定义。接下来,根据需求把合并后的卷组切割出一个约为 150MB 的逻辑卷设备,最后把这个逻辑卷设备格式化成 EXT4 文件系统后挂载使用。在下文中,将对每一个步骤再作一些简单的描述。

第1步:让新添加的两块硬盘设备支持 LVM 技术。 

pvcreate /dev/sdb /dev/sdc

第2步:把两块硬盘设备加入到 myvg1 卷组中,然后查看卷组的状态。

vgcreate myvg1 /dev/sdb /dev/sdc

vgdisplay

第3步:切割出一个 30GB 逻辑卷设备。

lvcreate -n mylv1 -L 30G myvg1

这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L 。例如,使用 -L 150M 生成一个大小为 150MB 的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l 。每个基本单元的大小默认为 4MB 。例如,使用-l 10 可以生成一个大小为 10×4MB=148MB 的逻辑卷。-n参数 ​  

第4步:把生成好的逻辑卷进行格式化,然后挂载使用。 

格式化: mkfs.ext4 /dev/myvg1/mylv1

[root@localhost ~]# mkfs.ext4 /dev/myvg1/mylv1
[root@localhost ~]# mkdir /0903
[root@localhost ~]# mount /dev/myvg1/mylv1 /0903/
[root@localhost ~]# df -Th
....省略部分信息
/dev/mapper/myvg1-mylv1 ext4       30G   45M   28G   1% /0903

第5步:查看挂载状态,并写入到配置文件,使其永久生效。 

[root@localhost ~]# df -Th
......省略部分信息
/dev/mapper/rhel-root   xfs        27G  2.9G   24G  11% /
/dev/mapper/myvg1-mylv1 ext4       30G   45M   28G   1% /0903
[root@localhost ~]# echo "/dev/myvg1/mylv1 /0903 ext4 defaults 0 0" >> /etc/fstab
[root@localhost ~]# cat /etc/fstab
......省略部分信息
/dev/mapper/rhel-swap   swap                    swap    defaults        0 0
/dev/myvg1/mylv1 /0903 ext4 defaults 0 0

7.2.2 扩容逻辑卷

在前面的实验中,卷组是由两块硬盘设备共同组成的。用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。 扩展前请一定要记得卸载设备和挂载点的关联。

第1步:卸载设备和挂载点的关联。逻辑卷扩展

卸载设备:umount /dev/myvg1/mylv1

扩展命令格式: lvextend -L +1G /dev/myvg1/mylv1

[root@localhost ~]# umount /dev/myvg1/mylv1
[root@localhost ~]# lvextend -L +1G /dev/myvg1/mylv1
  Extending logical volume mylv1 to 31.98 GiB
  Logical volume mylv1 successfully resized

第2步:检查硬盘完整性,并重置硬盘容量。

检查硬盘完整性命令:e2fsck -f /dev/myvg1/mylv1

重置硬盘容量:resize2fs /dev/myvg1/mylv1

[root@localhost ~]# e2fsck -f /dev/myvg1/mylv1
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg1/mylv1: 11/1966080 files (0.0% non-contiguous), 167453/7864320 blocks
[root@localhost ~]# resize2fs /dev/myvg1/mylv1
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg1/mylv1 to 8382464 (4k) blocks.
The filesystem on /dev/myvg1/mylv1 is now 8382464 blocks long.

第3步:重新挂载硬盘设备并查看挂载状态。

[root@localhost ~]# mount -a
[root@localhost ~]# df -Th
......省略部分信息
/dev/mapper/rhel-root   xfs        27G  2.9G   24G  11% /
devtmpfs                devtmpfs  1.9G     0  1.9G   0% /dev
/dev/mapper/myvg1-mylv1 ext4       32G   49M   30G   1% /0903

7.2.3 缩小逻辑卷

相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外 Linux 系统规定,在对 LVM 逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证我们的数据安全)。 在执行缩容操作前记得先把文件系统卸载掉。

第1步:文件系统卸载掉、检查文件系统的完整性。

卸载设备: umount /0903/
检查系统: e2fsck -f /dev/myvg1/mylv1

[root@localhost ~]# umount /0903/
[root@localhost ~]# e2fsck -f /dev/myvg1/mylv1
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg1/mylv1: 11/2097152 files (0.0% non-contiguous), 176706/8382464 blocks

第2步:把逻辑卷 mylv1 的容量减小到 20 G

检查是否可以缩容到20G:resize2fs /dev/myvg1/mylv0 20G
lv缩容命令使用格式:lvreduce -L 20G /dev/myvg1/mylv0
 

[root@localhost ~]# resize2fs /dev/myvg1/mylv0 20G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg1/mylv0 to 5242880 (4k) blocks.
The filesystem on /dev/myvg1/mylv0 is now 5242880 blocks long.
[root@localhost ~]# lvreduce -L 20G /dev/myvg1/mylv0
  WARNING: Reducing active logical volume to 20.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv0? [y/n]: y
  Reducing logical volume mylv0 to 20.00 GiB
  Logical volume mylv0 successfully resized

 第3步:重新挂载文件系统并查看系统状态。

[root@localhost ~]# mount /dev/myvg1/mylv0 /0903/
[root@localhost ~]# df -Th
/dev/sda1               xfs       497M  119M  379M  24% /boot
/dev/sr0                iso9660   3.5G  3.5G     0 100% /run/media/zhangxu/RHEL-7.0
/dev/mapper/myvg1-mylv0 ext4       20G   45M   19G   1% /0903

7.2.4 逻辑卷快照

LVM 还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM 的快照卷功能有两个特点:
此处为保证实验我的mylv0已降为10G。

第1步: 首先查看卷组的信息。

通过卷组的输出信息可以清晰看到,卷组中已经使用了 10G 的容量,空闲容量还有29.99G。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件。

第2步使用 -s 参数生成一个快照卷,使用-L 参数指定切割的大小。

另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作。

创建格式:lvcreate -n lvbackup -L 10G -s /dev/myvg1/mylv0  最后是lv的绝对路径

[root@localhost ~]# lvcreate -n mylv0backup -L 10G -s /dev/myvg1/mylv0
  Logical volume "mylv0backup" created
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/myvg1/mylv0
  LV Name                mylv0
  VG Name                myvg1
  LV UUID                pt2uuj-XMFE-lANK-cKI1-2Sna-iHN2-aNmQGG
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-09-03 16:52:21 +0800
  LV snapshot status     source of
                         mylv0backup [active]
  LV Status              available
  # open                 1
  LV Size                10.00 GiB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/myvg1/mylv0backup
  LV Name                mylv0backup
  VG Name                myvg1
  LV UUID                h9aryU-wia6-2EPZ-mI8V-aKOq-qg2Z-fMdJk9
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-09-03 17:30:25 +0800
  LV snapshot status     active destination for mylv0
  LV Status              available
  # open                 0
  LV Size                10.00 GiB
  Current LE             2560
  COW-table size         10.00 GiB
  COW-table LE           2560
  Allocated to snapshot  0.00%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

  --- Logical volume ---

第2步:在挂载的目录中创建文件,然后再查看快照卷的状态。

   可以发现存储空间占的用量上升了。

[root@localhost 0903]# dd if=/dev/zero  of=/0903/test  bs=100MB count=10
[root@localhost 0903]# lvdisplay
   --- Logical volume ---
  LV Path                /dev/myvg1/mylv0backup
  LV Name                mylv0backup
  VG Name                myvg1
  LV UUID                h9aryU-wia6-2EPZ-mI8V-aKOq-qg2Z-fMdJk9
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-09-03 17:30:25 +0800
  LV snapshot status     active destination for mylv0
  LV Status              available
  # open                 0
  LV Size                10.00 GiB
  Current LE             2560
  COW-table size         10.00 GiB
  COW-table LE           2560
  Allocated to snapshot  9.35%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

第3步:校验 SNAP 快照卷效果,要对逻辑卷进行快照还原操作。

在此之前记得先卸载掉逻辑卷设备与目录的挂载。 

第4步:快照卷会被自动删除掉。

并且刚刚在逻辑卷设备被执行快照操作后再创建出来的 100MB 的垃圾文件也被清除了


7.2.5 删除逻辑卷

当生产环境中想要重新部署 LVM 或者不再需要使用 LVM 时,则需要执行 LVM 的删除操作。为此,需要 提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。

第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。

第2步:删除逻辑卷设备,路径要填写绝对路径,需要输入 y 来确认操作。

第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。

第4步:删除物理卷设备。

在上述操作执行完毕之后,再执行 lvdisplayvgdisplaypvdisplay 命令来查看 LVM 的信息时就不会再看到信息了(前提是上述步骤的操作是正确的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值