其他分享
首页 > 其他分享> > LVM详解

LVM详解

作者:互联网

在我们的实际生产使用中,我们是无法准确的估计磁盘大小情况的。有可能我们现在规划了500G磁盘,但是两三年之后发现不够用了。那我们怎么办呢?不管是换更大的盘还是换别的,都会影响我们的生产环境。那么有没有别的更好的办法呢?

LVM可以很好的解决这一个问题。LVM可以在线动态扩展磁盘。

LVM:Logical Volume Manager(逻辑卷管理)。Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。

总之一句话,LVM就是为了解决磁盘分区动态调整。

LVM一共分为四层,如下图所示。

最底层是pp层,pp: physical partition。物理分区。这一层是我们的物理磁盘设备,它可以是裸设备(未格式化的磁盘)、也可以是分区(sdb2,sda1等)、也可以是LUN。这里我们假设有3个500G的裸设备。

往上一层是pv层,pv: physical volume。物理卷。这一层我们把pp中的每一个物理设备都做成一个物理卷。pv的最小单元是pe,pe默认大小是4M,相当于把500G的磁盘空间分成一个一个4M的空间作为存储单元。

在往上一层是VG层,vg: volume grou。卷组。卷组的作用相当于是池化资源,即把底层的所有物理资源集合在一起,形成一个大池子。这个池子中包含所有PV中的PE。这里我们的卷组有1500G资源。

最上边一层是LV层,LV:logic volume。 逻辑卷。逻辑卷就相当于我们的逻辑分区,是给到人具体使用的。比如我们有一个业务需要200G的空间,那么我们就从VG中划分出来一个200G 的逻辑卷(lv)给它使用。

 

如果有一天在划分lv时发现vg中的资源不够用了,那么很简单,我们只需要在pp层添加物理设备,在映射成pv,在加入到VG中,那么VG就又有资源了。

那么我们在创建LVM的时候具体怎么操作呢?

首先我们给虚拟机加一个新的20G的磁盘,fdisk -l 查看磁盘情况,我们可以看到20G的磁盘sdb已经有了,如下图所示:

 

然后我们需要对sdb进行分区。执行 fdisk /dev/sdb命令,创建1个5G的分区,可以看到如下图示所示:

 

 然后我们在按p,看当前的分区列表,发现sdb1分区已经存在了,如下图所示

 

但是如果我们想要使用LVM,那么我们必须使用LVM分区,但是我们在上图看到,sdb1这个分区的id是83,它是一个默认的标准分区。所以我们需要先把这个分区改成lvm分区。所以我们需要输入 t ,能更改分区ID。LVM对应的ID号是8e,所以这个时候我们要输入8e,这个分区就改成了lvm分区,如下图所示:

 

 以此方法我们创建出连个lvm分区,分别是sdb1和sdb2,保存并退出。如下图所示:

 

 

 

到这一步我们就把PP准备好了,我们准备了两个分区。

下一步我们就要创建PV。执行命令:pvcreate 分区。这里我们执行命令:pvcreate /dev/sdb1 /dev/sdb2 。把这两个分区同时创建成pv,如下图所示:

 

 我们可以使用 pvs 命令或者 pvdisplay命令来查看当前PV,如下图所示:

 

  

下一步我们就要创建VG了。

我们执行命令: vgcreate 卷组名 pv设备。卷组名是我们要给这个卷组起的名字,pv设备是我们要将哪些PV添加到这个VG中。这里我们输入命令: vgcreate vg0 /dev/sdb1 /dev/sdb2 。将sdb1和sdb2这两个pv加入到卷组vg0中。 然后我们可以执行  vgdisplay 命令或者 vgs 查看当前都有哪些vg。 如下图所示:

 

 

最后我们就要创建LV了。

执行命令: lvcreate -L +大小 -n 名字 vg名。这里L指我们划分的LV的大小,如果我们要划分100M的LV,那么这里就是 -L +100M; -n 指lv的名字,比如 -n lv3指这个lv的名字是lv3。最后的VG名是指我们从哪个VG中划分LV。这里我们执行命令: lvcreate -L +500M -n lv1 vg0 。它是指从卷组vg0中创建一个名字为lv1的500M的lv。然后这个逻辑卷就创建好了。我们也可以通过命令lvs 或者 命令 lvdisplay来查看当前的lv 。

 

 LV创建好之后,还不能直接使用。它现在只是一个逻辑分区,也是一个分区。所以我么要先将他格式化创建文件系统。执行命令:mkfs.xfs /dev/vg0/lv1 。如下图所示:

 

 

最后一步我们需要将lv挂载到对应的目录下边。这里执行命令: mount /dev/vg0/lv1/ /lvdir/。 将他挂载到lvdir这个文件夹下。如下图所示:

 

 

当然,和物理分区一样,这里的挂载也分为一次性挂载和永久性挂载。

我们可以再把这个写入到  /etc/fstab文件中,进行永久性挂载。

  

我们使用LV的最主要目的是为了之后扩容方便,如果lv没空间了可以在线扩展。如下图所示。那么怎么扩展LV呢?

 

我们需要执行命令: lvextend -L +500M /dev/vg0/lv1 。这个命令中+500M是我们要给这个LV增加的大小,后边是对应的lv。执行后,这个lv从500M变成了1000M,如下图所示:

 

这个时候我们执行 df -Th命令,发现它竟然还是500M,竟然没有刷新,如下图所示,这是为什么呢?

 

因为我们需要刷新一下。执行命令:xfs_growfs  挂载目录          这里我们执行:xfs_growfs /lvgir/ ,可以看到如下所示:

 

 相当于通过这个命令,把这个文件系统刷新了一次,我么在执行df -Th,可以看到它已经变成了1000M了。

 

 

 那么如果我们的VG里边资源不够了怎么办呢?怎么扩充我们的VG呢。我们需要将新的PV加到VG中去。执行命令:vgextend 卷组 新PV。意思是把新的PV加入到卷组中去,以此来扩容VG。这里我们创建一个新的分区,然后做成PV,在执行命令:vgextend vg0 /dev/sdb3。

 

 

 

 

 

  

 

标签:lv,VG,分区,LV,所示,详解,LVM,我们
来源: https://www.cnblogs.com/yunjisuanchengzhanglu/p/16082719.html