LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。它的机制就是将多个块设备连接为一个整块的卷组(volumegroup),形成一个存储池。然后,在这个卷组上的创建逻辑卷(logicalvolumes),并进一步的在逻辑卷上创建文件系统。如下图,就是其层次模型:

    物理卷(physicalvolume):物理卷就是指磁盘分区或从逻辑上与磁盘分区有同样功能的设备(如RAID)。创建物理卷时磁盘类型需要是8e。创建物理卷的时候不可以直接格式化!

    卷组(volumegroup):它其实就是将多个物理卷组合起来,逻辑上成为一块硬盘。它的大小有物理卷的大小和多少决定,且至少要有一个物理卷。

    逻辑卷(logicalvolume):在卷组上创建,可以在创建的逻辑卷上建立文件系统。它类似与磁盘分区。不同的是逻辑卷的边界可以随意扩展或缩小,也就是我们可以扩展或缩小我们的分区大小。

    从图中我们可以看到物理卷层后面跟着省略号,这表示理论上我们可以添加N(N>=1)个物理卷来组合成卷组。这就意味着卷组的大小可以无限的扩展。最终使用的逻辑卷的大小也可以无限的扩展。(注:我们也可以减少物理卷的个数,来减小卷组的容量,从而减少逻辑卷可以使用的最大容量)

    其创建过程是:先将物理设备做成物理卷,然后将物理卷组合起来形成卷组,最后在卷组上创建逻辑卷。而我们使用的就是逻辑卷。

    了解了这些知识,我们就来简单的实现一个LVM的实现过程吧!这里我使用虚拟机上的磁盘分区进行创建!

    1、创建分区

    首先创建磁盘分区,这里我使用的是SCSI硬盘,并且系统已经有了三个主分区,那么我们只能创建扩展分区,并在扩展分区上创建逻辑分区了。我使用的是fdisk工具进行分区。

    #fdisk /dev/sda

    具体的分区过程不再给出,需要注意的是分区类型必须是8e,否则无法支持LVM逻辑卷的使用。分区完最好输入p查看下创建好的分区以及类型,最后保存退出。这里我创建了/dev/sda5和/dev/sda6两个逻辑分区,大小分别是5G和3G。当然,你也可以创建多个。

    2、创建物理卷

    创建物理卷的命令是pvcreate,我们可以将上面所创建的两个分区创建为物理卷,也可以先只将一个分区创建为物理卷。

    #pvcreate /dev/sda5 /dev/sda6

    3、创建卷组

    创建卷组的命令是vgcreate,将上面创建的两个物理卷创建为一个卷组

    #vgcreate myvg /dev/sda5 /dev/sda6

   说明:

    myvg是指定创建的卷组的逻辑名,可以随意的设定,这里我是用myvg作为卷组的名称。后面就是将创建的物理卷添加到卷组中,这里我们也可以只将一个物理卷添加到卷组中,等想再添加另一个物理卷的时候再添加。这里需要注意PE(默认是4M)这个概念,它表示卷组上创建的所有逻辑卷都以4MB为增量单位来进行扩充 或缩减。由于内核原因,PE大小决定了逻辑卷的最大大小,4MB的PE决定了单个逻辑卷最大容量为256GB,若希望使用大于256G的逻辑卷则创建卷组时指定更大的PE。PE大小范围为8KB到512MB,并且必须总是2的倍数。如果想指定PE大小只需要添加-s选项,指定PE大小就行了,列:#vgcreate -s 16M myvg /dev/sda5 /dev/sda6

    4、激活卷组

    为了立即使用卷组而不用重启系统,可以使用vgchange命令来激活卷组

    #vgchage -ay myvg

    5、创建逻辑卷

    创建逻辑卷的命令是lvcreate,我们在myvg卷组上创建一个6G大小的逻辑卷

    #lvcreate -L 6G -n mylv myvg

    说明:

    -L来指定逻辑卷的大小;-n指定逻辑卷的名称

    6、格式化逻辑卷分区

    这里我使用的是ext3格式的文件系统

    #mke2fs -j /dev/myvg/mylv

    创建挂载点来挂在创建好的逻辑卷分区

    #mkdir /mylv

    #mount /dev/myvg/mylv /mylv

    以上就是创建一个可以使用的逻辑卷的简单步骤了。下面扩展下其内容,到最后面简单介绍些有关的命令及选项。

    1、为卷组添加新的物理卷

    当我们又创建了新的物理卷的时候,想要添加到myvg卷组中时,需要使用vgextend这个命令了。

    #vgextend -t myvg /dev/sda7       #先测试是否可以添加物理卷

    #vgextend myvg /dev/sda7

    这里/dev/sda7表示我们创建的新的物理卷

    2、从卷组中删除物理卷

    要从一个卷组中删除一个物理卷,首先要确认要删除的物理卷没有被任何逻辑卷使用,这时我们就要使用pvdisplay命令察看一个物理卷信息:

    如果某个物理卷正在被逻辑卷所使用,就需要将该物理卷的数据备份到其他地方,然后再删除。删除物理卷的命令为vgreduce:

    #vgreduce myvg /dev/sda7

    这里为了简单说明,就将新添加的/dev/sda7从卷组中删除

    附注:

    如果我们创建的卷组包含两个物理卷,一个3G(/dev/sda5),一个1G(/dev/sda6),而我们LV上面已经有2G的数据了,这样我们就不能将/dev/sda5给移除了,因为移除/dev/sda5必然会损坏数据。而且我们不能确定数据是不是都在/dev/sda5上面,也不能贸然移除/dev/sda6。如果需要移除/dev/sda6的话,应该先将/dev/sda6上面的数据移到同卷组的其他物理卷上,然后再移除/dev/sda6。这就需要使用pvmove这个命令了,步骤如下

    #pvmove /dev/sda6    #不需要指定将数据移动到那儿个磁盘上,它会自动将数据移动到同组的物理卷上

    #vgreduce myvg /dev/sda6

    3、删除逻辑卷

    删除逻辑卷时,要先将其卸载,然后才能删除,这里我们为了简单说明就将上面新建的逻辑卷作为例子

    #umount /dev/myvg/mylv

    #lvremove /dev/myvg/mylv

    Do you really want to remove active logical volume mydata? [y/n]:y

    4、扩展逻辑卷大小

    扩展逻辑卷大小的命令是lvextend,上面我们创建逻辑卷的时候还剩2G容量,那么我们就为其再添加1G容量的步骤如下

    #lvextend –L 7G /dev/myvg/mylv

    或者这样增加这1G容量

    #lvextend –L +1G /dev/myvg/mylv

    增加逻辑卷的容量以后,我们的物理边界扩展了,此时查看逻辑卷的大小并没有改变,因为逻辑边界没有扩展。所以我们就需要扩展逻辑卷的逻辑边界了,命令如下

    #resize2fs /dev/myvg/mylv              #这里不用跟调整的大小,会自动扩展到扩展的物理边界

    5、减小逻辑卷的大小

    在缩减逻辑卷大小的时候需要先将文件系统卸载了。需要注意的是,在缩减的时候我们的数据文件可能会受到影响,所以一般不建议缩减逻辑卷大小。这里我们使用的大小是添加过1G后的逻辑卷的大小,我们将其缩减为5G的大小。步骤如下

    #umount /dev/myvg/mylv

    #e2fsck –f /dev/myvg/mylv            #强行检测逻辑卷

    #resize2fs /dev/myvg/mylv 5G          #调整逻辑卷的大小

    #lvreduce –L 5G /dev/myvg/mylv       #缩减逻辑卷的大小

    (#lvreduce –L -2G /dev/myvg/mylv)

    #mount /dev/myvg/mylv /mylv

    #df –lh                              #查看各个磁盘的大小

    说明:

    在我们缩减的时候需要先用e2fsck命令强行检测下逻辑卷,然后用resize2fs命令调整逻辑卷的大小,最后用lvreduce来减小逻辑卷大小。

    最后给出常用命令的简单介绍:

    1、物理卷相关命令

    pvcreate             #创建物理卷

    pvremove             #移除物理卷

    pvmove               #移动物理卷的数据

    pvscan               #扫描物理卷

    pvdisplay            #查看物理卷的信息

    例:

    #pvdisply            #查看所有的物理卷信息

    #pvdisply /dev/sda5 #只查看特定的物理卷的信息

    pvs                  #简单查看物理卷的信息

    2、卷组相关命令

    vgcreate      #创建卷组

      -s :指定PE大小,默认PE大小是4M

    vgdisplay     #查看卷组的信息

    vgextend      #扩展卷组大小

      -t :检测制定物理卷是否可以添加进来

    vgreduce      #缩减卷组大小

      -t :检测指定物理卷是否可以移除出去

    vgscan        #扫描卷组

    vgs           #查看卷组的简单信息

    3、逻辑卷相关命令

    lvcreate      #创建逻辑卷

      -L :指定创建逻辑卷的大小

      -n :指定逻辑卷的名称

    lvdisplay     #查看逻辑卷的信息

    lvremove      #移除逻辑卷

    lvreduce      #缩减逻辑卷大小

    lvextend      #扩展逻辑卷大小

    lvs           #简单查看逻辑卷的信息

    相关概念:

    物理卷

  物理卷是指硬盘分区或者从逻辑上看起来和硬盘分区类似的设备(比如RAID设备)。

  逻辑卷

  一个或者多个物理卷组成一个逻辑卷。对于LVM而言,逻辑卷类似于非LVM系统中的硬盘分区。逻辑卷可以包含一个文件系统(比如/home或者/usr)。

  卷组

  一个或者多个逻辑卷组成一个卷组。对于LVM而言,卷组类似于非LVM系统中的物理硬盘。卷组把多个逻辑卷组合在一起,形成一个可管理的单元。

  物理块physical extent (PE)

  物理卷按大小相等的“块”为单位存储,块的大小与卷组中逻辑卷块的大小相同。