当前位置: 首页 > 科技观察

介绍一种可以让Linux中的存储具有弹性容量的方法

时间:2023-03-18 15:38:04 科技观察

我们在使用Linux的时候,有时候会发现系统盘不够用。要是系统盘或者其他盘能灵活点就好了。即当需要更多空间时,可以动态扩展,不需要时,可以缩小。一种方式是通过SAN存储,因为存储系统天然具有可伸缩的功能特性。但是SAN存储需要独立的设备,价格也高,不太现实。其实在Linux中,我们可以通过软件来实现,这也是Linux强大的地方。今天我们就来介绍一下LVM在这方面的整体架构。Linux中实现动态扩缩容的软件叫做LVM,全称LogicalVolumeManager,即逻辑卷管理。LVM不仅可以实现动态扩缩容,还可以实现其他特性,如条带卷、镜像卷等。LVM的整体架构如图所示。从上图可以看出,LVM包含三个基本概念,即物理卷(PV)、卷组(VG)和逻辑卷(LV)。下面分别介绍这三个概念。物理卷(PhysicalVolume)一个物理卷对应一个块设备,可以是整个磁盘也可以是磁盘分区。物理卷由pvcreate创建,本质上是将一些元数据写入块设备。卷组(VolumeGroup)卷组是多个物理卷的集合。我们在创建卷组时,需要指定包含的物理卷。至此,一个物理卷的资源池才真正搭建起来。后面创建逻辑卷时,将从这个资源池中分配资源。逻辑卷(LogicalVolume)逻辑卷本身就是块设备,是用户看到的部分。我们可以将逻辑卷理解为一块硬盘。但是一个逻辑卷实际上是由几个底层物理卷组成的。但是一个逻辑卷并不会使用物理卷的全部空间,通常是部分空间。LVM的操作在上一篇文章中,我们介绍了LVM的基本概念和架构,接下来我们就来实际操作一下。如下图所示,每个概念对应一个操作命令,即pvcreate、vgcreate和lvcreate。这些是创建的命令,从它们的名字也很容易理解。让我们看看如何自下而上地创建所需的资源。比如我们要创建一个1G的逻辑卷。要创建一个PV,第一步就是创建一个PV,也就是准备物理资源。在本文中,我们假设有两个物理磁盘并在整个磁盘上创建物理卷,而不是在分区上。除了创建命令外,还有查询命令,包括pvdisplay和pvs,分别显示详细信息和汇总信息。创建VG并完成PV创建后,我们就可以创建卷组了。卷组创建命令如下。vgcreatevg-01/dev/sdb/dev/sdc创建完成后,可以查看信息:CreateLV最后,我们就可以创建逻辑卷了。假设我们这里创建一个线性逻辑卷,大小为1GB。具体命令如下。lvcreate-L1G-nlv_linearvg-01Logicalvolume"lv_linear"created可以通过lvdispaly命令查看详细信息。除了线性卷,我们还可以创建条带卷。关于什么是线性卷,什么是条带卷,本文不做解释。后面介绍LVM原理的时候会详细介绍。#lvcreate-L1G-i2-I64-nlv_stripevg-01Logicalvolume"lv_stripe"created创建完成后,可以照常查看详细信息。LV创建成功后,我们就可以把它当作硬盘来使用了,使用方法和普通硬盘没什么区别。扩容操作有了前面的知识,我们回归正题,如何扩容?其实比较简单。我们之前创建的VG大小是35G,而LV只使用了1GB的空间。因此,我们可以直接扩展LV容量。比如我们增加10GB的容量,就可以执行下面的命令。lvextend-L+10G/dev/vg_01/lv_linear是不是很简单!如果上面已经有文件系统,执行下面的命令即可。还有一个resize2fs/dev/vg_01/lv_linear的情况是VG的容量用完了。没关系,我们可以在VG中添加一个新的硬盘,然后执行上面介绍的命令。今天的内容就介绍到这里。相信大家对于如何实现容量灵活的存储都有一个清晰的认识。后续我们会逐步深入,介绍LVM的实现原理,并结合内核代码介绍其代码实现。