LVM基础

Posted Linuxbugs(卡西莫多伯伯)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVM基础相关的知识,希望对你有一定的参考价值。

什么是LVM

LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和 分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组 (volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logicalvolumes),并进一步在逻辑卷组上创建文件系统。    

管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:"development"和"sales",而不是使用物理磁盘名"sda"和"sdb"。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的 文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。

如何管理磁盘

如果使用逻辑卷管理磁盘,需要如下的步骤:

  1. 将磁盘设置成为物理卷,一个磁盘可以是物理卷,一个分区可以是物理卷,RAID也可以是物理卷
  2. 将物理卷组成卷组,这就相当于把底层的磁盘无论是分区还是RAID还是单个磁盘,进行组合,让我们看起来他就像是一块盘一样。
  3. 接下来,我们可以在卷组中分出一部分逻辑卷,格式化,挂载,使用。

实验操作

接下来我们通过实验来说明如何通过逻辑卷来管理我们的磁盘,实现在不关机的情况下,对磁盘的容量进行增加或减少。

    我们先介绍命令,在实现各种操作:

物理卷PV管理

创建物理卷

    命令:pvcreate

        -y:自动yes

        -u:通过UUID创建

    一般我们可以直接创建,及pvcreate /dev/sdv

查看物理卷:

    pvs :显示简略信息,可以跟设备,也可以不跟

    pvdisplay:显示详细信息

卷组vg管理

创建卷组

    命令:vgcreate

    格式:vgcreate [option] volumeGroup physicalDevicePath [+]

    参数:

        -s:设置物理卷上PE的大小

-l:卷组上允许创建的最大逻辑卷数

-p:卷组中允许添加的最大物理卷数

查看卷组

    vgs:查看卷组的大概信息

    vgdisplay:查看卷组的详细信息

    如:vgs /dev/vg0

管理卷组

    vgextend:卷组扩展

    vgreduce:卷组缩减

    如:vgextend /dev/vg0 /dev/sdb /dev/sdc

    vgreduce /dev/vg0 /dev/sdb /dev/sdd

删除卷组

    先删除物理卷pvmove

    再删除卷组vgmove

逻辑卷lv管理

创建逻辑卷

    命令:lvcreate

    格式:

        lvcreate –L [MGT] –n lv_name VolumeGroup

        lvcreate –l 60%VG –n lv_name VolumeGroup

        lvcreate –l 100%FREE –n lv_name VolumeGroup

查看逻辑卷

    lvs:查看lv大概信息

    lvdisplay:查看lv详细信息

逻辑卷管理

    lvextend:逻辑卷扩展

    lvreduce:逻辑卷缩减

删除逻辑卷

    lvremove:删除逻辑卷

    例如:

lvremove /dev/vg0/lv0

上面的命令并不是我们需要的所有命令,还有一部分的明林我们在实验过程中在来介绍。接下来我们进行几个实验,包括基本的逻辑卷的创建挂载,扩展逻辑卷,减少逻辑卷,将某块硬盘从LVM中剥离,将LVM迁移。

实验一 基本逻辑卷的创建挂载

在创建可用的逻辑卷之前,我们需要几块硬盘,我的是实验硬盘是一个RAID5的一个分区(50G)一个独立硬盘(50G)

第一步:

    创建物理卷,在我们创建物理卷之前,如果我们使用的是一个分区,我们需要将其转换成Linux LVM,方式如下:

接下来创建物理卷:

    pvcreate /dev/md0p1

    pvcreate /dev/sdg

物理卷创建完成后,我们可以看一个物理卷的详细信息:以/dev/sdg为例:

物理卷创建完成后我们将这两个物理卷合并成一个卷组:

    命令:vgcreate -s 8M –n /dev/vg0 /dev/md0p1 /dev/sdg

接下来,我们查看一下卷组的详细信息:

    命令:vgdisplay

接下来,我们从卷组里要创建一个逻辑卷,让后分区挂载,使用。

    命令:lvcreate –L 60G –n /dev/vg0/lv0 /dev/vg0

            mke2fs –t ext4 /dev/vg0/lv0

我们查看一下:

前面的步骤我们都完成了,接下来,我们将这个创建完文件系统的逻辑卷挂载到目录下看看:

这时候我们已经算是完成了,可以尽情的使用我们刚刚挂载的文件系统的(LVM创建)的。但是,我们发现了一个问题,我们创建的明明是/dev/vg0/lv0,

为啥挂载上之后变成了/dev/mapper/vg0-lv0呢?很奇怪,我们查看一下这个逻辑卷到底是咋回事:

我们发现,无论是/dev/vg0/lv0,还是/dev/mapper/vg0-lv0,都只是一个链接文件,最终连接的都是一个dm-0的设备,因为在实际中,LVM只是一个管理工具,最终都是在管理/dev/dm-X设备。

dm: device mapper: 将一个或多个底层块设备组织成一个逻辑设备的模块

实验二 扩展逻辑卷

有时候我们的分区会不够用,特别是作为一个数据盘的时候,如果是一个普通的硬盘直接分区,我们如果想扩展分区大小,我们必须先停掉业务,卸载分区,让后拷贝数据,新建分区大小,但是如果我们是在用LVM管理我们的硬盘的话,我们可以直接在不停机的状态下直接将我们使用的分区进行扩展,接下来,我们就来看一下如何操作的。

首先,我们看一下我们的卷组VG还有没有可用的空间:

我们可以看到,卷组还有40G的可用空间,所以我们可以使用卷组剩余的空间直接扩展:

    命令:lvextend –l +100%FREE /dev/vg0/lv0

虽然我们已经将逻辑卷扩展了,但是我们可以发现分区的实际大小并没有变化,这是由于我们虽然已经扩容,但是扩容的这部分并没有文件系统,我们需要给剩余的空间进行格式化,创建文件系统,接下来我们讲一个命令:resize2fs

resize2fs命令被用来增大或者收缩未加载的"ext2/ext3"文件系统的大小。如果文件系统是处于mount状态下,那么它只能做到扩容,前提条件是内核支持在线resize。

所以,我们可以使用这个命令对我们的分区进行在线扩容,而不必卸载文件系统。

如:resize2fs /dev/vg0/lv0

扩容成功。

可是有时候,我们的卷组VG并没有多余的空间,此时我们在查看是否有多余的物理卷,如果没有多余的物理卷,我们就需要添加硬盘,创建物理卷,添加到卷组,在从卷组对我们的分区进行扩容,我演示一遍:

我先是添加一块硬盘/dev/sdf,创建物理卷:

添加到卷组VG:

    命令:vgextend

扩展分区:

    命令:

lvextend -L +20G -r /dev/vg0/lv0

可在lvextend 时加-r 直接一步到位,先扩展逻辑卷大小后直接增加文件系统大小

扩容成功

 

 

实验四 减小逻辑卷

逻辑卷的缩减,饿哦们值作为一个演示,因为在实际的生产环境中很少有人去缩减逻辑卷。只有我们的磁盘不够用的时候我们往上天磁盘,或者我们的磁盘坏了的话我们会跟换新磁盘,要么就是数据迁移。这几种情况除了更换就是增加,几乎没有需要减小容量的情况,并且,减小逻辑卷仅是ext文件系统支持,但是作为学习,我们进行演示。

首先第一步,我们需要卸载挂载,我们就以上一个实验所创建的分区来做实验。

然后我们对文件系统进行检测,防止有坏掉的分区信息,不然那,一会我们在减去一部分逻辑卷之后会造成无法使用。还有就是我们剪掉的大小必须小于分区剩余大小。

接下来我们使用resize2fs命令重新对分区进行调整:

保留90G

接下来我们再讲去格式化的逻辑卷空间从逻辑卷中移除:

此时我们将逻辑卷分区重新挂载在目录下,就可以继续使用了。

 

实验五 将某块硬盘从LVM中剥离

本次实验我使用的是两块50G的硬盘,在硬盘上会有数据,完成数据的移动并删除一块硬盘将硬盘取出。

我把此分区挂载在/bakup下并将/etc/下的数据全部拷到了此文件系统下,由于我们使用的是两块盘,如果我想剥离的是/dev/sdf这块盘的话,我们并不知道数据是否会在这个盘上存有一部分,此时我们需要将数据进行迁移到同逻辑卷的其他磁盘上去。

    我们看到,我们想要剥离sdf,需要将sdf上面的PE数据块转移到sdg上去,我们才能剥离sdf,这样可以方式数据丢失。

命令:pvmove

    如:pvmove /dev/sdf [/dev/sdg]

然后我们在看物理卷的情况:

此时我已经将数据块全部迁移到了sdg上面来,接下来,我们一步一步剥离sdf:

先是将物理卷从卷组中移出去:

    vgreduce /dev/vg0 /dev/sdf

卷组大小已经变化,但是物理卷还在,接下来我们移除物理卷:

在我们移除物理卷之后已经相当于把硬盘给卸掉了,此时我们的硬盘sdf可以随时拔掉,接下来,我们将此文件系统重新挂载,看看数据是否损坏:

我们的数据都还在,没有丢失。完成。

LVM数据迁移

由于我在实验环境下安装的全部都是50G的硬盘(虚拟机中),为了防止无法找不到硬盘,所以我就重新在加一块80G的硬盘。

由于是在一个主机里,所以我们一定要注意我们放进去的这个30G硬盘创建LVM时,千万不能和目标系统的vg名一样,这样会导致错误发生,lv名一样不一样就无所谓了。

    首先我们需要对目标磁盘进行创建LVM格式和要迁移数据的盘一样。

 

文件系统:

 

接下来,我在原文件系统中写入一个文件dudu.txt内容是/etc/passwd的内容,然后卸载文件系统,第一步转移PE数据块:

将数据移到目标磁盘对应的PV上。(该磁盘不要有其他与该PV无关的分区

然后我们再移动除要移动的PV以外的其他PV

    vgreduce vg名 /dev/pv(多余)

移除后,我们先挂载一下,看数据是否还在

数据还在,没问题

接下来,我们需要卸载,禁用卷组,设置导出标记禁止访问

vgchange命令用于修改卷组的属性,经常被用来设置卷组是处于活动状态或非活动状态。处于活动状态的卷组无法被删除,必须使用vgchange命令将卷组设置为非活动状态后才能删除。

vgexport / vgimport不需要将驱动器从一个系统移动到另一个系统。它是一个管理策略工具,以防止在移动卷时需要访问卷

禁用卷组:vgchange –an /dev/vg0

设置导出标记禁止访问:vgexport /dev/vg0

接下来我们需要做的是关闭此系统,将磁盘转移到其他机器上继续使用,由于我是用的虚拟机,需要将系统关机才能使用,如果是物理机,磁盘支持热插拔,可以不关闭系统,直接将数据转移。

 

接下来我们将其安装在centOS 7上,并执行以下操作

pvscan

pvscan

pvscan

vgimport /dev/vg0设置导出标记开启访问

vgchange –ay /dev/vg0 起用卷组

pvscan指令会扫描系统中连接的所有硬盘,列出找到的物理卷列表

pvscan指令会扫描系统中连接的所有硬盘,列出找到的卷组列表

pvscan指令会扫描系统中连接的所有硬盘,列出找到的逻辑卷列表

接下来我们把它挂载于/bakup下,看看文件是否还在

实验完成。

LVM快照

LVM对LV提供的快照功能,只对LVM有效。

 

当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data)。创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,因此这个原理的实现叫做写时复制(copy-on-write)。

在写操作写入块之前,将原始数据移动到 snapshot空间里,这样就保证了所有的数据在snapshot创建时保持一致。而对于snapshot的读操作,如果是读取数据块是没有修改过的,那么会将读操作直接重定向到原始卷上,如果是要读取已经修改过的块,那么就读取拷贝到snapshot中的块。

创建snapshot的大小并不需要和原始卷一样大,其大小仅仅只需要考虑两个方面:从shapshot创建到释放这段时间内,估计块的改变量有多大;数据更新的频率。一旦 snapshot的空间记录满了原始卷块变换的信息,那么这个snapshot立刻被释放,从而无法使用,从而导致这个snapshot无效。

注意:采取CoW实现方式时,snapshot的大小并不需要和原始卷一样大,其大小仅仅只需要考虑两个方面:从shapshot创建到释放这段时间内,估计块的改变量有多大;数据更新的频率。一旦 snapshot的空间记录满了原始卷块变换的信息,那么这个snapshot立刻被释放,从而无法使用,从而导致这个snapshot无效。所以,非常重要的一点,一定要在snapshot的生命周期里,做完你需要做得事情。

 

我创建一个10G的逻辑卷,并在里面写入数据,创建一个快照

然后我在原始卷里写入数据:LiuDehua.mp4

让后我们可以看看快照的一些变化:

我们可以发现,快照的数据区发生了变化,比着之前有所增加,我们把快照挂载起来,看看里面的是否有Liudehua.mp4

我们发现快照区内依然保存的是原始数据,并没有发生变化,接下来我们将快照还原,我们在还原之前,必须卸载要恢复的文件系统和快照:

lvconvert --merge /dev/vg0/lv0-snap

我们可以知道,恢复快照以后,不仅是数据恢复了快照时的状态,快照也消失不见了。

除了恢复快照外,如果我们不想要快照了,我们也可以手动删除:

lvremove /dev/vg0/lv0-snap

 


补充(2108-3-1)

 

1)ext2/ext3/ext4文件系统的调整命令是resize2fs(增大和减小都支持)

lvextend -L 120G /dev/mapper/centos-home//增大至120G
lvextend -L +20G /dev/mapper/centos-home//增加20G
lvreduce -L 50G /dev/mapper/centos-home//减小至50G
lvreduce -L -8G /dev/mapper/centos-home//减小8G
resize2fs /dev/mapper/centos-home            //执行调整

  

 

2)xfs文件系统的调整命令是xfs_growfs(只支持增大)

lvextend -L 120G /dev/mapper/centos-home    //增大至120G
lvextend -L +20G /dev/mapper/centos-home    //增加20G
xfs_growfs /dev/mapper/centos-home          //执行调整
 
就是说:xfs文件系统只支持增大分区空间的情况,不支持减小的情况(切记!!!!!)。
硬要减小的话,只能在减小后将逻辑分区重新通过mkfs.xfs命令重新格式化才能挂载上,这样的话这个逻辑分区上原来的数据就丢失了。如果有重要文件,那就歇菜喽~~~

  

 

 

以上是关于LVM基础的主要内容,如果未能解决你的问题,请参考以下文章

LVM基础详细说明及动态扩容lvm逻辑卷的操作记录

LVM逻辑卷管理器 基础

LVM快照及命令基础

LVM基础详细说明及动态扩容lvm逻辑卷的操作记录

linux基础15LVM

LVM基础操作