每个Linux系统的使用者在安装Linux时都应该遇到过这样的困境:在为系统分区时,如何精确评估和分配各个磁盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。因为如果估计不够准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分区。虽然有很多动态调整磁盘的工具可以使用,例如PartitionMagic等等,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽;另外一个方面这需要重新引导系统才能实现,对于很多关键的服务器,停机是不可接受的,而且对于添加新硬盘,希望一个能跨越多个磁盘驱动器的文件系统时,分区调整程序就不能解 决问题。因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。幸运的是Linux提供的逻辑盘卷管理机制就是一个完美的解决方案。


LVM是什么:

      LVM是(Logical Volume Manager) 逻辑卷管理的简写,它是Linux环境下对磁盘分区进行管理的一种机制。LVM是建立在硬盘和分区之上的一个逻辑层,屏蔽了底层磁盘布局,便于动态调整磁盘容量来提高磁盘分区管理的灵活性。它可以将一个或多个底层块设备组织成一个逻辑设备的卷组,管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统,管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配 。

      LVM模型图:

        wKioL1buk6_hmkbuAAEi5K4w72Q839.png

构建过程:

    创建PV:

           PV即(Physical Volume)物理卷的缩写。它可以是整个硬盘,或使用fdisk等工具建立的普通磁盘分区,包括许多默认4MB大小的PE(Physical Extent, 基本单元),是LVM的基本存储逻辑块。

    常用基本命令: 

         pvs: 对PV一些简要信息的显示

          pvdisplay:显示pv的详细信息(后可跟设备,意为只显示该设备的信息)

          pvremove:(remove a physical volume) 删除物理卷

          pvmove:(move physical extents(PES)) 用于pv上的数据移动

          pvcreate /dev/DEVICE: 创建pv

               常用选项:

                      -f:强制创建物理卷,不需要用户确认 

                      -u:指定设备的UUID

                      -y:所有的问题都回答“yes” 

                      -Z:是否利用前4个扇区

           这里以一块磁盘上的三个分区显示过程:磁盘分区编号为6、7、8,大小分别为4G 8G 8G

           wKioL1bud07jce7zAACig3nuXQk778.jpg

           wKiom1bud2vgtPn6AABMKuHrK1I922.jpg

           wKioL1bueFuQTlV1AAA7LTk-HEo416.jpg

    创建VG:

         VG即(Volume Group)卷组的缩写。它是一个或多个物理卷组合而成的整体,可以在卷组上创建一个或多个LV(逻辑卷)。

    常用基本命令:

         vgs:用于简要显示vg信息;

         vgdisplay:用于显示vg的详细信息(后可跟设备,表示只显示此设备的详细信息)

         vgextend  卷组名  卷组路径[PhysicalDevicePath...]  表示扩展卷组

         vgreduce:reduce a volume group   缩减卷组大小

      使用格式:

                     vgreduce  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]

             注意:vg移除之前,先做pvmove;把pv上的PE至同一个卷组中的其它pv上去;

         vgremove:remove a volume group  表示用于移除卷组

         vgcreate  [-s #[kKmMgGtTpPeE]]  卷组名  物理卷路径[PhysicalDevicePath...]

       [-s #[kKmMgGtTpPeE]]:此选项表示指明PE大小;

                                                                默认为4M 支持单个逻辑卷最大容量256GB

         创建一个卷组名为:myvg的卷组

         wKioL1bufcDQnSOKAABvVml4ymo131.jpg

   创建LV:

          LV即(Logicla Volume)逻辑卷的缩写。它是从卷组中分割出的一块空间,用于建立文件系统。

    常用基本命令:

          lvs:用于简要显示lv信息

  lvdisplay:用于详细显示lv信息(同样支持后面跟设备,意思是只查看某一个设备的详细)

          lvcreate -L #[mMgGtT] -n  逻辑卷卷名  卷组         表示创建lv 

       也可以使用 -l 参数,通过指定PE数来设定逻辑分区大小

 lvremove /dev/VG_NAME/LV_NAME  用于删除逻辑卷


          同卷组一样,逻辑卷在创建的过程中也被分成了一块一块的空间,这些空间称为LE(Logical Extents),在同一个卷组中,LE的大小和PE是相同的,并且一一对应。


          创建一个5G大小的逻辑卷,逻辑卷卷名为testlv

          wKiom1bugHGg1pP5AACPWRC_e6o106.jpg

          格式化:

          wKioL1buioCB4PqRAACALxr2Q8Q797.jpg

          创建目录并挂载:

          wKiom1buioWyDpoxAABVAM9-p7Y821.jpg

          wKioL1bui7uBWFDJAAA8b0p3DAU090.jpg

     扩展逻辑卷:

          # lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME

             使用+号表示增加了多少;不使用+号表示扩展到多少,即直接指明大小到多少

          # resize2fs /dev/VG_NAME/LV_NAME

             重新修改文件系统大小,不带参数大小表示使用分区上所有可用大小

      wKiom1bujLzCukV3AACcM0Qr8fo821.jpg

      wKioL1bujc7xoph8AAAnQcuFdSo355.jpg

     缩减逻辑卷步骤:

          卸载设备:

          # umount /dev/VG_NAME/LV_NAME


          文件系统做强制检测和修复:

          # e2fsck  -f /dev/VG_NAME/LV_NAME


          缩减逻辑边界; # 号表示缩减至多大

          # resize2fs  /dev/VG_NAME/LV_NAME  #[mMgGtT]

                注意:此处缩减后的大小一定要能容纳下当前逻辑卷里面的内容;否则,文件会损坏


          使用lvreduce命令缩减:    - 号表示减少了多少

          #  lvreduce  -L  [-]#[mMgGtT] /dev/VG_NAME/LV_NAME


         mount命令重新挂载设备:

          wKiom1bukSyAzDgpAABkzvv1Y40659.jpg

      wKioL1bukdHiGipbAABJ8CPNu2g311.jpg

          wKiom1bukgORGSAPAABjMFzxoEQ066.jpg


   关于数据备份的几个介绍:

           冷备份:卸载掉文件系统,不能读不能写

           温备份:不卸载文件系统,能读取文件系统内容但是不能写

           热备份:不卸载文件系统,既能读取文件系统内容又能写入

   快照(snapshot):

           主要是用作在线备份

        快照卷核心技术:写时复制(copy-on-write,COW)

 写时复制快照在快照时间点之后,没有物理数据复制发生,仅仅复制了原始数据物理位置的元数据。因此快照创建非常快,可以瞬间完成。然后快照副本跟踪原始卷的数据变化(即原始卷写操作),一旦原始卷数据块发生写操作,则先将原始卷数据块读出并写入快照卷,然后用新数据块覆盖原始卷。这样我们访问快照卷上的数据仍旧是写操作前的,可以保证我们备份数据的一致性。

   使用格式:

               lvcreate -L #[mMgGtT] -p r(只读方式) -s -n snap_lv_name  original_lv_name

         wKioL1bumLSC-BpXAAA5_uJ1qwo123.jpg

         注意事项:

                快照卷和原卷必须在同一卷组中;

                快照卷要针对已有目标卷创建

                创建的快照卷要足够容下在备份数据完成前,数据块发生变化写入快照卷的大小

                一旦超出快照卷大小,快照自动作废