LVM(Logical Volume Manager,逻辑卷管理器):是linux对磁盘分区进行管理的一种机制,至于作用就不再概述了。

    首先了解一下DM把,全称为Device Mapper,想没想到我们经常用的/dev/mapper?就是它了。它跟MD一样,有一个核心的模块和众多的子模块组成,子模块提供了各种特性和功能。如下图:

                       wKioL1QAPJXSP5xQAAD4bmSFUz8988.jpg

       DM提供了设备的映射机制,能够将多个物理的设备映射为一个逻辑设备,感觉DM要比MD的功能强大的多了,做LVM2都是使用DM机制的。

      DM提供的功能大体有:将多个磁盘可用的空间虚拟为一块磁盘,镜像,快照,多路径等等。。

     

      首先我们先了解一下LVM的结构:

 

                 wKiom1QAPfigNYb-AAD5kxEm3lo213.jpg

           它主要由三个类型:PV VG和LV

    --PV(Physical volume,物理卷):由块设备组成,物理卷可以是一个磁盘的某一分区,也可以是整块磁盘或RAID磁盘(硬RAID,这样效果更叼了),也可以是通过ISCSI共享出来的块设备等等,创建LVM的第一步,就是要将这种类型的设备创建为物理卷。

   --VG(Volume Group,卷组):各个物理卷组和在一起,一个类似扩展分区的容器,物理卷可以自由的加入VG,也可以在VG中移除,也就是说,我们的VG可以动态的扩大或缩小。

  --LV(Logical Volume,逻辑卷):这就相当于逻辑分区了,经过格式化后,我们可以将LV挂载到目录下使用,LV是可以自由的扩大和缩小的。

    OK,我们已经大体了解了一个LVM是怎么构成的了,等等,还有一个叫做PE和LE的东西。

  --PE(physical extent,物理块):是LVM最小的寻址单元,可进行配置大小,默认为4MB,我们怎么抽象的理解PE呢?我们在创建卷组的时候,会指定PE的大小,然后会把我们组成VG的PV划分成N多个PE,也就是说,我们的VG是由众多的PE组成的,而LE,是与PE大小的一样的,只是站在LV的角度把它看成了LE了。在LVM1中会限制VG的PE个数为65534个,也就是VG最大容量为256G左右,但是LVM2已经去掉了这种限制,所以我们可以随心所欲的用了~

      

           终于到了我们该怎么创建的时候了,说一下各个阶段使用的命令吧,这些命令都是常用的,现实环境下肯定比这个多,我目前也只知道这么多(吼吼,目前还是水军一份子):

           PV阶段:

                pvcreate----创建pv,用法:pvcreate /dev/xxx

                pvremove--删除PV,  用法:格式同上,不是命令同上

                pvscan-重新扫描PV,

                pvs或pvdisplay--查看PV

                pvmove--(移动PV上的数据,如果你想移除一个PV,但还要保留PV上的数据,就需要用到这个命令了)

         Ps:pvmove格式:pvmove  /dev/xx(要移除的Pv) /dev/xx(把数据移动到此设备,这个设备必须是和要移除的Pv属于一个卷组)

          

          VG阶段:

                    vgcreate_--创建vg,   用法 vgcreate -s 16M vgname /dev/xx

                vgremove--删除VG

                vgextend--扩展VG,加PV  用法:vgextend vgname /dev/xx/xx

                vgreduce--缩小VG,移除PV 用法:vgreduce vgname /dev/xx/xx

                vgs或vgdisplay--查看VG

                vgscan--重新扫描vg

                vgrename--重命名vg

          PS:创建vg时 -s可以指定PE大小,单位可以是k,m,g,或更多,自行man吧。

 

          LV阶段:

                lvcreate--创建lv  用法:lvcreate -n lvname -l|L 100|50M /dev/xxx

                lvremove--删除lv

                lvextend--扩容lv

                lvreduce--缩小lv

                lvresize--既可缩小又可扩容

                lvs或lvdisplay--查看lv

                lvscan--重新扫描lv       

          PS:创建LV时候,小l指分配PE的个数,大L指分配的空间大小,通常为PE大小的倍数,如果不是倍数,空间会多出一个PE大小范围内的容量。其它的参数下面在介绍。

      Ok,那我们来动手实验一下吧:

      需求:首先我要把sdb,sdc,sdd三块盘创建为一个PE大小为16M,名字叫做testvg,并创建一个10G大的,名字叫做testlv的Lv,并格式化为ext3格式,并挂载到/test。


 1.创建Pv

              wKiom1QAhBbBhaD2AACBfzdMdMY459.jpg

   我们可以查看一下Pv,可以看到,没创建Vg前,Pe的大小是没有的。

               wKioL1QAhV-iwyHNAACnYA07q-w483.jpg

 2.创建Vg

              wKioL1QAhXvQa4M9AABczfcdUvI626.jpg

   vg我就不查看了,信息挺多,自行查看把,这里看一下创建vg后的Pe大小。

        wKiom1QAhJ7CC2NBAACgnbIvzdY610.jpg

 3.创建Lv并格式化挂载

        wKiom1QAhLywMoovAABWSjU-V40514.jpg

        格式化的图就略过了,我们看到虽然我们是指定lv路径挂载,但是实际是/dev/mapper下的设备挂载到了/test目录。

         wKiom1QAhQ7wD34sAAE3smWdyx0866.jpg       我们看一下,发现/dev/testvg/下的设备竟然是链接!而真实的设备在mapper下面。哼哼,知道dm的强大了吧。

        wKiom1QAhhnApY2nAABtIxlNXkA815.jpg

    行了,简单的就了解这些了吧,下面说一下LVM的扩大和缩小,扩大和缩小并不影响数据本身,但前提要按流程走哦。首先我们先了解下结构和什么是物理边界和逻辑边界,如下图:

                wKioL1QAiYnAyMLrAABfo4v-KmQ852.jpg

    我们知道,我们的文件系统是建立在分区之上的,而分区就相当于物理边界,文件系统就 相当于逻辑边界,而你数据存储的存储大小,就取决于物理边界和逻辑边界,如果我们把这种抽象的概念转移到我们的LVM之上,我们就会发现,Lv就相当于物理边界,而文件系统的就相当于逻辑边界。如果站在Vg的角度来看,我们的Lv也是逻辑边界,而Vg本身是物理边界,Ok,别弄乱了,只是站的角度不同而已。

    那么,我们扩展的时候是先扩展逻辑边界还是物理边界呢?

          很显然,是先扩展物理边界啦,逻辑肯定不能大于物理的了,

    那么,我们缩小的时候,是先缩小物理,还是先缩小逻辑呢?

         也很显然,是先缩小逻辑了,你先缩小物理边界了,那逻辑岂不是大于物理了?

        让我们来扩展把,扩展如下:

     1.先确认好要扩展的lv,并确保vg有足够的Pe用于分配。

     2.扩展Lv(物理):有+号是在原有的大小上+5G空间,没有+号,则代表扩展到5G,一定要注意哦

            wKioL1QAjdegNGCVAACO7G_c3BI050.jpg

      扩展后我们df看一下大小,你会发现,文件系统并没有扩展,那我们的空间去哪了?

   wKioL1QAjhHxN9mqAAEbaBArSu8832.jpg

       其实空间已经扩展了,我们刚才扩展的是Lv的物理大小

       wKiom1QAjXTh4OQjAAECcAo09NU644.jpg

     3.  Ok,我们继续扩展Lv在文件系统中的大小(逻辑)。

       Ps:resize2fs格式:resize2fs  lv路径   15G(扩展至多大)或使用-P,扩展到最大(物理范围内)。

wKioL1QAjs2xyiUZAAIyId4hOMk412.jpg      

       下面我们开始缩小Lv,缩小有风险,缩小需谨慎。

     1.首先我们要卸载挂载目录(目前文件系统类型必须卸载,否则后果自负)

     2.计算缩小容量,确认缩小后的空间能承载原有数据。

     3.卸载并进行磁盘的一致性检查

                wKioL1QAkafDzkpbAAE-nDPfobs193.jpg

     4.缩小文件系统大小 缩小至2G 也就是减少了13G(逻辑)                  wKiom1QAkMzy9m-eAAC6uyHR5-k043.jpg


      5.缩小Lv到2G(物理)

      wKioL1QAkl3hmFL2AADtz4UfShU216.jpg

    6.挂载查看大小,你也可以挂载前在进行一致性检测

       wKiom1QAkXfCh7C0AAEBKKSpheQ663.jpg        

      Ok,扩大缩小也说完了,在说说快照吧,下面只讲操作,至于原理,在写一篇吧,会在文章最小面附上链接,因为这篇已经写的好长了~

     快照---保存系统某一个的状态(也可以理解为保存某一状态的数据)。

   首先要声明的是:

     *快照卷必须和创建快照的Lv在同一个卷组。

     *快照卷的生存周期为整个数据的时长:也就是说数据的增长量不能超出分配快照卷的大小,否则,快照卷损毁。


      1.先查看原有目录下的文件:

        wKiom1QAlNShLxITAAA6AowOKg0805.jpg


      2.创建快照:

         wKiom1QAlH6CXYjiAACLn8pYCks754.jpg      

      3.把快照卷挂载并查看文件,你发现,它保留了我们创建快照那一刻的数据。  

            wKioL1QAlmCSreRhAAAse2vfuKw734.jpg

    Ps:lvcreate,-s 为指定为快照卷 -p指定权限有r和w,快照卷最好为只读了,防止操作不当删除数据,另外快照也可以用来最数据备份,这些在另一篇在说~