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

2023年 7月 25日 36.6k 0

我们在使用Linux的时候,有的时候会发现系统盘不够用的情况。如果系统盘或者其它盘能够做到弹性就好了。也就是需要更多空间的时候可以动态扩容,而不需要的时候可以缩容。

有一种方法就是通过SAN存储,因为存储系统天然具有扩容和缩容的功能特性。但是SAN存储需要一个独立的设备,而且价格也很高,不太现实。其实在Linux中我们可以通过软件实现,这就是Linux强大的地方。今天我们就介绍一下这方面的内容

LVM的整体架构

在Linux实现动态扩容和缩容特性的软件称为LVM,其全称是Logical Volume Manager,也就是逻辑卷管理。LVM不仅仅可以实现动态扩容和缩容,还可以实现其它一些特性,比如条带化卷,镜像卷等等。LVM的整体架构如图所示。

通过上图可以看到,LVM包含3个基本的概念,分别是Physical Volume(PV),Volume Group(VG)和Logical Volume (LV)。我们分别介绍一下这个三个概念。

物理卷(Physical Volume)

物理卷对应着一个块设备,可以是整个磁盘,或者是磁盘分区。物理卷通过pvcreate创建,本质上是想块设备写入一些元数据。

卷组(Volume Group)

卷组是多个物理卷的集合,当我们创建一个卷组的时候需要指定包含的物理卷。此时,实际上是构建了一个物理卷的资源池。当后面创建逻辑卷的时候会从该资源池分配资源。

逻辑卷(Logical Volume)

逻辑卷本身是一个块设备,是用户看到的部分,我们可以将逻辑卷理解为一个硬盘。但是逻辑卷实际上是由底层的若干个物理卷构成。但是一个逻辑卷并非使用物理卷的所有空间,通常是部分空间。

LVM的操作

前文我们对LVM的基本概念和架构进行了介绍,接下来我们就实际操作一下。具体如下图所示,每个概念对应着一个操作命令,分别是pvcreate,vgcreate和lvcreate。这些是创建的命令,从名称上也可以很容易地明白其作用。

我们从下往上看看如何创建需要的资源,比如我们要创建一个1G的逻辑卷。

创建PV

首先是要创建PV,也就是准备物理的资源。在本文中我们假设有两个物理磁盘,并且在整个磁盘上创建物理卷,而不是在分区上。

除了创建命令外,还有查询命令,具体包括pvdisplay和pvs,分别显示详细信息和概要信息。

创建VG

完成PV的创建后,我们就可以创建卷组了。卷组的创建命令如下所示。

vgcreate vg-01 /dev/sdb /dev/sdc

创建完成后可以看一下信息:

创建LV

最后,我们就可以创建逻辑卷了。假设我们这里创建一个线性的逻辑卷,大小为1GB,具体命令如下所示。

lvcreate -L 1G -n lv_linear vg-01
Logical volume "lv_linear" created

通过lvdispaly命令可以看一下详细信息。

除了线性卷之外,我们还可以创建条带卷。关于具体什么是线性卷,什么是条带卷,本文不做解释,我们后面在介绍LVM的原理的时候再详细介绍。

# lvcreate -L 1G -i2 -I64 -n lv_stripe vg-01

Logical volume "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的实现原理,并结合内核代码介绍其代码实现。

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论