温故:

         好不好奇?为什莫RAID还要分硬件RAID和软件RAID?所谓的硬件RAID就是通过磁盘阵列卡来完成磁盘阵列的功能。磁盘阵列卡上有一块专门的芯片用于处理RAID的任务,因此在性能上会比较好。举个例子,我刚刚说到的RAID5需要进行奇偶校验码的计算,如果使用了硬件磁盘阵列卡就会避免使用了cpu去计算而带来的I/O总线的消耗,理论上性能会更佳。既然有了硬件RAID卡,为什莫还要有软件RAID呢?因为市面上常见的中高级RAID卡虽然具有热插拔的优点,但是还有一个致命的缺陷使得硬件RAID的使用率被限制,就是太贵了。所以就发展出了利用软件来模拟磁盘阵列的功能,虽然会浪费一些CPU的计算资源和I/O总线的资源,但是目前计算机的速度已经非常快了,所以这些可以忽略不计了。
        关于这部分内容,有兴趣的可以去看看我的《​​​Linux之软件磁盘阵列​​》

知新:

        今天咱们要说的就是逻辑卷管理器(LVM),LVM的功能主要就是可以弹性的调整文件系统的容量,这个LVM的管理对于性能和数据安全没有太大的效果,想要实现性能优化和数据的可靠性,就还要从前面所讲的RAID入手。
        LVM可以整合多个物理分区,让这些分区可以看起来就像一个磁盘一样,而且还可以在LVM管理的磁盘当中新增或删除其他的物理分区。LVM的做法是将几个物理的分区(磁盘)通过软件组合成一块看起来独立的大磁盘(VG),然后再将这个大的磁盘(VG)划分成可以使用的分区(LV),最终就能挂载使用了,接下来先讲一讲这几个新概念。
        物理卷(PV):我们实际的分区(或磁盘)需要通过gdisk命令调整系统标识符(system id)使之成为8e(LVM的标识符),此时还要使用物理卷创建命令(pvcreate)将它转化为LVM底层可认的物理卷(PV),之后才能将这些PV加以使用。
        卷组(VG):所谓的VG就是将所有的PV组合而成的大磁盘
        物理扩展块(PE): LVM默认使用4MB的PE数据块,但是LVM的LV在32位的系统上最多仅能含有65534个PE,因此默认的LVM的LV会由4MB*65534/1024=256GB,这个PE是整个LVM中最小的存储单位,也就是说我们写入的数据其实都是通过写入PE来完成的,你就可以将之理解为文件系统里面的block.因此PE的调整就会间接的影响到LVM的容量。
       逻辑卷(LV):最终的VG还会被切成LV,这个LV就是可以被格式化使用的类似分区的东西。要注意的是LV是不可以随便指定大小的,上面我也已经说了,LV的大小虽然不能随便指定,那么就要考虑如何改变当前这个LV内的PE总数了。
·        上面我刚刚提到了LVM可以修改文件系统容量,说到底也是通过【交换PE】来进行数据交换,即将原本LV内的PE转移到其他的设备中用以降低容量,或将其他设备中的PE转移到此LV中来加大容量。

Linux之逻辑卷管理器_文件系统

 

        上图要说明的就是:VG内的PE 会分给虚线部分内的LV,如果以后这个VG还要扩充的话,只需加上其他的PV就可以了,回到上面的话题,如果你想要的是增加LV的容量,就要加入卷组内没有使用过的PE来扩充。
最后要说的就是整个文件系统的实践流程:

Linux之逻辑卷管理器_服务器_02

 

注意:是从下往上看的哦。接下来咱们看一看实践流程
阶段一:PV
建立PV.使用pvcreate命令即可,我们看图,下面已经提示PV成功创建

Linux之逻辑卷管理器_文件系统_03

         首先使用lsblk查看了磁盘的物理分区,然后为/dev/sdb3创建了PV,接着我又用了pvdisplay命令查看了pv 的具体信息,同时也可以用pvscan命令查看当前系统中的pv,如果说当前pv有问题,可以使用pvremove命令进行删除重建。因为PE是在建立卷组时才设置的参数,所以此时的PE都为0.
阶段二:VG
接下来我会再创建一个物理卷,然后使用这两个物理卷组成一个testvg

Linux之逻辑卷管理器_文件系统_04

 此时我们再看一次/dev/sdb3的PE参数是不是已经有了

Linux之逻辑卷管理器_linux_05

再拓展一下其他的命令: vgremove:删除卷组 vgreduce:在vg内删除pv vgextend:在vg中增加额外的pv。
阶段三:LV
接下来我会创建一个2G的LV

Linux之逻辑卷管理器_服务器_06

 阶段四:文件系统阶段

Linux之逻辑卷管理器_文件系统_07

         看上图可以注意到,开始的时候我先对testlv进行了初始化(创建文件系统),然后查看了当前系统中的文件系统,再接着创建了挂载点(目录),然后将LV挂载到了这个挂载点,最后一次使用df -h查看,确实已经存在该文件系统。
        上面已经说过LVM的最大特色就是弹性的调整磁盘容量,那么如果要放大LV的容量,又该如何处置呢?这个时候就需要同时满足几个条件:
        1、VG阶段需要有剩余的空间:怎么理解呢,要想放大文件系统,就要放大LV,要放大LV就需要VG内部有剩余的空间,为什莫?我上面提到过LV的放大和缩小其实就是从该LV所属的vg转移进或者转移出PE,归根结底最终需要该VG内还有空余的PE。那么加VG实质上就是加磁盘,使用上面提到的pvcreate或vgextend命令就可以。
        2、如果VG的剩余容量很足,此时只需要对LV进行操作即可,使用lvresize命令对容量大小进行调整就可以了
        3、文件系统阶段有一点也是要注意的,因为目前实测发现我所用过的系统中仅有xfs和ext可以放大,而能缩小的更是仅有ext系列。
        这三个步骤中最难的就是最后一个步骤,因为整个的文件系统在创建的时候就已经建立了inode、区块、超级区块信息。这些信息要修改还是很难的,就需要通过在文件系统中当中增加区块群组的方式来增加文件系统的量,而增加或减少区块群组就是用xfs_growfs命令。
实践求真知,看图:
首先对当前的testvg与testlv的属性进行查看,可以看到此时的testvg总量2.84G,testlv总量2G.

Linux之逻辑卷管理器_服务器_08

 既然testvg的总容量是够大的,那么就直接放大LV。

Linux之逻辑卷管理器_文件系统_09

 此时可以看到lv由2.5G变成了2.61G,但是查看文件系统发现还是2.5G,所以还需要其他操作。

Linux之逻辑卷管理器_文件系统_10

 接下来使用xfs_growfs /路径对文件系统进行扩大,瞪大眼睛,看好BLOCK块大小的变化。

Linux之逻辑卷管理器_文件系统_11

 此时可以观察到文件系统的大小已经变成了2.6G。

Linux之逻辑卷管理器_文件系统_12

 有没有感觉很牛逼!!!
 

拓展:除此之外,LVM还有一个功能就是对LV磁盘进行快照
做快照之前首先要查看当前vg中是否有足够的PE可用,然后使用lvcreate命令进行快照的创建

Linux之逻辑卷管理器_服务器_13

 看上图,还有15个PE可用,于是我就将这15个PE全部用于快照的使用。建立快照区命令中的-s代表做快照,-n代表快照区的设备名称,-l则是表示使用多少个PE,接下来我们对快照区进行查看

Linux之逻辑卷管理器_服务器_14

 然后我们将这个快照的逻辑卷(lv)进行挂载,之后你会看到两个一模一样的信息

Linux之逻辑卷管理器_运维_15

 大家可能注意到了。我的命令里面出现了“-o nouuid”,为什莫呢?因为xfs不允许相同的uuid文件系统的挂载,因此前面才要加上nouuid的参数,让文件系统忽略相同的uuid所造成的问题。
那么如何使用快照区进行还原呢?首先我对/srv/lvm内的文件test进行了修改,然后再查看此时的快照lv,发现使用率已经达到了0.86%,原来仅为0.01%

Linux之逻辑卷管理器_linux_16

 最后都测试完成,一定要记得将快照lv删除

Linux之逻辑卷管理器_文件系统_17

 

关于LVM就讲到这里,下次讲计划任务。