• 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命令重新格式化才能挂载上,这样的话这个逻辑分区上原来的数据就丢失了。如果有重要文件,那就歇菜喽~~~
    

      

     
  • 相关阅读:
    IO模型
    Redis的cluster模式
    #4789. 啊孤独感放辣椒
    #4754. 旅途
    #3189. 八纵八横(c)
    洛谷P2624 [HNOI2008]明明的烦恼
    CF938G Shortest Path Queries
    [CTSC2010]珠宝商
    洛谷P1903 [国家集训队]数颜色 / 维护队列
    AtCoder3611 Tree MST
  • 原文地址:https://www.cnblogs.com/duzhaoqi/p/7436297.html
Copyright © 2020-2023  润新知