lvm :logical volume manage 逻辑卷管理器

      可以讲多个物理分区整合在一起,让这些分区看起来就像是一个磁盘一样。

功能:

     在不影响数据的情况下弹性调整磁盘的容量

     创建系统快照,用于备份大量数据。

LVM 的各个阶段及命令

   pv:physical volume 物理卷

      LVM的最底层

     命令:

  1. pvcreate :将实体 partition 建立成为 PV ;  
  2. pvscan :搜寻目前系统里面仸何具有 PV 的磁盘;  
  3.  pvdisplay :显示出目前系统上面的 PV 状态; 
  4. pvs 显示多少个物理卷   
  5.  pvmove移动数据              
  6.  pvremove :将 PV 属性移除,让该 partition 丌具有 PV 属性。  
  7.      #pvcreate /dev/sda9 
  8.      #pvcreate /dev/sda{5,6,7} 
  9.    

   VG :volume group 卷组

      VG就是把多个PV整合到一起,组成一个大磁盘。指定PE (physical extend 物理扩展块,是LVM的最小存储块默认是4MB)大小,一个VG 最都包含65534个PE ,所以按照默认值,VG最大容量256G。

命令:

  1. vgcreate -s 指定PE 大小 默认4m 
  2. vgs  
  3. vgdisplay VGNAME 
  4. vgextend  myvg /path/to/DEVICE扩展卷组  
  5. vgchange 设置VG是否启动 
  6. vgreduce 在VG内删除PV 
  7. vgremove 删除一个VG 
  8. vgscan 
  9.        #vgcreate -s 16m vgname /dev/sda{5,6,7} 
  10.        #vgextend vgname /dev/sda8  增加vg 的容量  

     LV:logical volume 逻辑卷

      最终的VG 还会被切成LV,LV就可以被格式化使用,也只有LV可以被格式化,

   命令:

  1. lvcreate -L 3G -n mylv1 myvg  ( -l N) 
  2.       容量   名字  卷组  PE的个数(容量) 
  3.        #lvcreate   
  4.        #lvscan 
  5.        #lvs 
  6.        #lvdisplay 
  7.        #lvextend  在LV 内增加容量 
  8.        #lvreduce        减少容量  
  9.        #lvremove       删除一个LV  
  10.        #lvresize  对LV 进行容量大小的调整  
  11.       
  12.  # lvcreate -L 30M -n lvname  vgname  
  13.     最终会发现创建的是32M,因为PE默认是4M,LV的容量是4的倍数。 
  14.          

PV VG LV 的关系可看下图 :

lvm _lvm pe vg pv lv

 

lvm _lvm pe vg pv lv _02

结合上面两副图我们应该对他们之间的关系有个清晰地印象了,下面我们就做一个简单的实验来看一下具体操作步骤:

要求:

    1、先分出两个分区,每个分区容量为1G,且systemID标示为8e

    2、用pvcreat 将物理分区新建成PV

    3、用vgcreate 将PV整合为VG,VG名称为myvg,且PE大小为16m

    4、用lvcreate 创建一个60M的LV ,LV名称为mylv.

    5、用mke2fs 格式化这个LV,且挂载到/mnt/lvm目录下

  具体操作如下:

  1. # fdisk -l 
  2. /dev/sdb5               1         123      987934+  8e  Linux LVM 
  3. /dev/sdb6             124         246      987966   8e  Linux LVM 
  4. # partprobe /dev/sdb 
  5. #pvcreate /dev/sdb{5,6}  创建PV
  6. # pvdisplay 
  7.  "/dev/sdb5" is a new physical volume of "964.78 MB" 
  8.   --- NEW Physical volume --- 
  9.   PV Name               /dev/sdb5 
  10.   VG Name                
  11.   PV Size               964.78 MB 
  12.   Allocatable           NO 
  13.   PE Size (KByte)       0 
  14.   Total PE              0 
  15.   Free PE               0 
  16.   Allocated PE          0 
  17.   PV UUID               98pIbr-ORIu-7ymE-46st-V2ap-WCS2-lYZhrE 
  18. # vgcreate -s 16M myvg /dev/sdb5  创建VG
  19.   Volume group "myvg" successfully created 
  20. # vgdisplay 
  21.   --- Volume group --- 
  22.   VG Name               myvg 
  23.   System ID              
  24.   Format                lvm2  版本号 
  25.   Metadata Areas        1 
  26.   Metadata Sequence No  2 
  27.   VG Access             read/write 
  28.   VG Status             resizable 
  29.   MAX LV                0 
  30.   Cur LV                1 
  31.   Open LV               1 
  32.   Max PV                0 
  33.   Cur PV                1 
  34.   Act PV                1 
  35.   VG Size               960.00 MB 
  36.   PE Size               16.00 MB  PE的大小 
  37.   Total PE              60 
  38.   Alloc PE / Size       4 / 64.00 MB   
  39.   Free  PE / Size       56 / 896.00 MB 
  40.   VG UUID               YT0SBT-xa3R-2Ukr-Dd9O-fqSs-F1gW-umBFF3 
  41.  
  42. # lvcreate -L 60M -n mylv myvg  创建LV
  43.   Rounding up size to full physical extent 64.00 MB  
  44.          #指定60m 实际创建64M,因为PE的值是16M.只能是16的倍数 
  45.   Logical volume "mylv" created  
  46. # lvdisplay 
  47.   --- Logical volume --- 
  48.   LV Name                /dev/myvg/mylv 
  49.   VG Name                myvg 
  50.   LV UUID                7E5AvR-3Z6n-zBwx-iuJj-gkNj-YCQu-TxJfWw 
  51.   LV Write Access        read/write 
  52.   LV Status              available 
  53.   # open                 1 
  54.   LV Size                64.00 MB 
  55.   Current LE             4    其实就是PE 大小就是16M 
  56.   Segments               1 
  57.   Allocation             inherit 
  58.   Read ahead sectors     auto 
  59.   - currently set to     256 
  60.   Block device           253:2 
  61.  
  62.  
  63. # mke2fs -j /dev/myvg/mylv   格式化
  64. # mkdir /mnt/lvm 
  65. # mount /dev/myvg/mylv /mnt/lvm/  挂载

说着复杂 创建其实很简单 

 下面我们做一些有技术含量的实验 

放大LV的容量:

      1、用fdisk设置新的具有8e systemID的分区 

      2、利用pvcreate 构建pv

      3、放大VG的容量,利用vgextend将PV 加入到我们的vgname

      4、放大LV的容量,利用lvresize将新加入的PV 内的PE 加入到lvname中

      5、放大文件系统的容量,通过resize2fs将文件系统的容量确实增大    

  1. #fdisk -l 
  2. #pvcreate /dev/sdb6 
  3. #vgextend myvg /dev/sdb6 
  4. #lvextend -L 100M /dev/myvg/mylv 
  5. # resize2fs  /dv/mgvg/mylv1 

 缩小LV的容量:

        必须先卸载 而且还要强制进行文件系统检测 

   1、先卸载mylv

   2、磁盘检查,用fsck或者e2fsck 都可以 

   3、直接降低文件系统容量 用resize2fs 

   4、降低LV的容量,利用lvreduce 

   5、重新挂载  到此就可以结束了 

   6、移除/dev/sdb6,先利用pvmove将/dev/sdb6上的数据移除,再利用vgreduce将/dev/sdb6移除vg这个组,最后再利用pvremove移除它的PV属性。即可

  1. #umount /mnt/lvm      卸载 
  2. #e2fsck -f /dev/myvg/mylv 磁盘检查  
  3. #resize2fs /dev/myvg/mylv  6900m  缩减 必须制定大小  
  4. #lvreduce -L 40M /dev/myvg/mylv 
  5. #mount /dev/myvg/mylv /mnt/lvm  重新挂载  
  6. #df /mnt/lvm                查看  减小了  
  7.  #pvmove /dev/sdb6  /dev/sdb5 
  8.                  
  9.  #vgreduce myvg /dev/sdb6 
  10.   #pvscan 查看 sdb6不属于任何一个vg   
  11.                  
  12.  #pvremove /dev/hdb6      # 将sdb6的pv属性删除                
 LVM的系统快照:

              系统快照(snapshot)是LVM的另外一个重要功能,快照就是将当时的数据记录下来,就好像照相记录一样,以后数据有任何改动,原数据会被移动到快照区,没有被改变的区域则由快照区与文件系统共享。

lvm _lvm pe vg pv lv _03

如图所示,我们就可以看到,快照区的容量远远小于数据的容量,他只用存储改变的数据,所以说系统快照是很好的备份工具,用具备份大量的数据,同时也不影响系统的正常运行。

 

由于快照区和原本的LV共享很多PE,所以快照区与被快照的区域必须在同一个VG上。

命令:

   #lvcreate -L 30m -p r -s -n mylvsnap /dev/myvg/mylv    

           -L 30M 指定创建的快照的容量

          -p r  只读

           -s  指定为创建快照

           -n   快照的名称

           /dev/myvg/mylv 指定对哪个lv创建快照

创建成功后就是挂载,可以通过/mnt/snap/访问原LV里的数据

     #mkdir /mnt/snap

    #mount /dev/myvg/mylvsnap  /mnt/snap

此时我们就可以备份数据了,也不会影响系统正常的数据读取,

    #cd /mnt/snap

    # tar -jcf /backups/lvm.tar.gz *  备份好了 

 

先卸载lvm 在把LV格式化 然后用备份的数据恢复

#umount /mnt/lvm  

#mke2fs -j /dev/myvg/mylv

#mount /dev/myvg/mylv /mnt/lvm 

#tar -jxf /backups/lvm.tar.gz -C /mnt/lvm 

#ll /mnt/lvm

好了,数据恢复了 ,

 

最后所有的实验做完了 ,我们要做一下善后处理工作 删除LVM 把所有的分区恢复成原来的systemID,做到善始善终,以便我们做其他实验。

1.  先卸除系统上面的 LVM 文件系统 (包括忚快照与所有 LV);

            #umount /mnt/lvm 

            #umount /mnt/snapshot

            

        2.  使用 lvremove 删除 LV ;

            #lvremove /dev/vgname/lvname

        #lvremove /dev/vgname/lvss

        3.  使用 vgchange -a n VGname 让 VGname 这个 VG 不具有 Active 的标志; 

     # vgchange -a n vgname

        4.  使用 vgremove 删除 VG: 

      #vgremove vgname 

        5.  使用 pvremove 删除 PV; 

     #pvremove /dev/hda{5,6,7}

 

        6.  最后,使用 fdisk 修改 ID 回来啊!