在日常的使用中我们可能会出现这种情况,就是在系统中有两块硬盘,一块为4GB,另一块为8GB,这两块磁盘的总容量就是12GB,现在有需要将其分为两块6GB的磁盘,如果只是使用普通的分区方式就无法做到了。因为这种需要,所以就有了逻辑卷这个东西,使用逻辑卷我们就可以将所有的磁盘空间进行整合,然后在按照自己的需求来进行分配每个分区的空间。逻辑卷的英文叫做:Logical Volume,管理一个逻辑卷需要的工具叫做:Logical Volume Manager,简称为:LVM——逻辑卷管理。实现LVM管理的步骤是首先要创建一个物理卷PV,然后基于这个PV物理卷创建卷组和逻辑块设备,在创建的卷组的同时指定PE的大小(注意:一旦PE大小被指定,就不允许更改)。在创建完成物理卷之后就可以在已经创建的卷组中创建逻辑卷了。此时的逻辑卷已经是一个按照用户的想法分好大小的分区了。所以接下来的操作就和如何使用一块分区是一样的,所以接下来要在逻辑卷中创建文件系统(高级格式化)。在创建好文件系统之后的最后一步就是挂载了。下面分别对这些操作进行详细的说明。


在进行下面的操作之前,请先在系统中添加一块至少16GB的硬盘:

    如果是在虚拟机中的centos系统,可以使用设置来添加一块新的磁盘,在添加之后,要想让系统识别有两种方法,第一种是重启系统,第二种是使用下面的命令,让系统重读接口(三条命令最好都执行一遍,因为不确定新分配的磁盘插到哪个接口):

echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan

执行上面的命令之后,在使用fdisk -l命令就可以看到新插入的磁盘,图一:

************************************************

************************************************

然后在这块磁盘中使用fdisk命令分出两个分区,如图二所示:

************************************************

************************************************


在分配分区之后就可以使用下面的命令对物理卷进行管理操作:

pvcreate:创建物理卷

pvdisplay:显示物理卷的详细信息

pvs:显示物理卷的简单信息

pvremove:删除物理卷

pvmove:将某个物理卷中的所有的PE移动到其他物理卷中;


操作一般是按照以下步骤来进行:

一、创建物理卷

[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
[root@localhost ~]#

在创建物理卷之后可以使用pvdisplay和pvs来查看物理卷的信息

[root@localhost ~]# pvdisplay 
  "/dev/sdb1" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               FcpUsa-ZhHR-Ytf6-TmD7-p6sU-eZd1-rPj5nc
   
  "/dev/sdb2" is a new physical volume of "11.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               11.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               TKz5OL-4tld-hCVg-5aAz-PUCR-ZFPm-fH5XIu
   
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdb1       lvm2 ---   5.00g  5.00g
  /dev/sdb2       lvm2 ---  11.00g 11.00g
[root@localhost ~]#


二、创建卷组,创建卷组就像是将两个磁盘的容量融合在一起。对卷组的管理操作命令如下:

vgcreate:创建卷组

-s #{kKmMgG}:指定PE的大小,如果省略该选项,默认的PE为4M;

[root@localhost ~]# vgcreate test /dev/sdb1 /dev/sdb2
  Volume group "test" successfully created
[root@localhost ~]#


vgremove:删除卷组

vgextend:扩展卷组容量,将新的pv添加到卷组中

vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

vgreduce:缩减卷组容量,将pv从卷组中移除;在做此操作之前,应该先使用pvmove,保证被移除的pv上没有被占用的PE;

vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

vgdisplay:显示卷组的详细信息

vgs:显示卷组的简短信息



在创建了卷组之后使用“vgs”命令就可以看到在刚才创建的这个test卷组中有了16G的容量:

[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  test   2   0   0 wz--n- 15.99g 15.99g
[root@localhost ~]#

这样就把两个磁盘整合在了一起,接下来的步骤就是类似于在一个磁盘中进行分区



三、创建逻辑卷

对逻辑卷的进行管理操作的命令有:

lvcreate:创建逻辑卷

-L LV_SIZE(#{kK|mM|gG}):指定逻辑卷的大小,不能超过卷组的容量;

-l #%{FREE|VG|ORIGIN|PVS}:指定逻辑卷占用对应存储单元的百分比;

-n LV_NAME:指定逻辑卷的名称

-i #:在创建逻辑卷的时候,以条带的方式创建,并指明这个逻辑卷上有#个条带

-I #:在创建逻辑卷的时候,以条带的方式创建,并指明CHUNK的大小;

lvremove:移除逻辑卷

lvdisplay:显示逻辑卷的详细信息

lvs:显示逻辑卷的简短信息

lvchange:修改LV的状态

-ay:激活逻辑卷

-an:停用逻辑卷

lvextend:扩展逻辑卷的空间,

注意:一定要先扩展逻辑卷的物理边界,再扩展逻辑卷的逻辑边界;

使用ext系列文件系统的时候,resize2fs命令扩展逻辑边界;


扩大逻辑卷的物理边界:

    lvextend -L [+]SIZE /PATH/TO/LVM

                  如果SIZE有+:表示在原有逻辑卷容量的基础上,增加SIZE空间

                  如果SIZE无+:表示将逻辑卷的容量扩大到SIZE空间

    扩大逻辑卷的逻辑边界:

          e2fsck /PATH/TO/LVM

          resize2fs [-f] /PATH/TO/LVM

lvreduce:缩减逻辑卷的空间

注意:先缩减逻辑卷的逻辑边界,再缩减逻辑卷的物理边界;

使用ext系列文件系统的时候,resize2fs命令缩减逻辑边界

 

    lvreduce -L [-]SIZE /PATH/TO/LVM

如果SIZE有-:表示在原有逻辑卷容量的基础上,削减SIZE空间

如果SIZE无-:表示将逻辑卷的容量直接削减至SIZE空间

        umount /PATH/TO/LVM

e2fsck /PATH/TO/LVM            //强制校验数据一致性

resize2fs -f /PATH/TO/LVM LV_SiZE //修改逻辑卷的逻辑边界,LV_SIZE为调整后的逻辑卷大小

lvchange -an /PATH/TO/LVM      //关闭逻辑卷

lvreduce -L [+]SIZE /PATH/TO/LVM  //修改逻辑卷的物理边界,大小要和逻辑边界保持一致

lvchange -ay /PATH/TO/LVM      //重新激活逻辑卷

mount /PATH/TO/LVM /PATH/TO/LVM_MOUNT_POINT


    创建两个逻辑卷,均为8GB,但是会执行失败,因为在建立卷组的时候总共建立的空间为16GB,在这16GB中会占用一定的空间来保存一些重要的数据,所以在这里第二块创建的8GB逻辑卷会失败,但是只要分配的空间小一点就会成功:

[root@localhost ~]# lvcreate -L +8G -n lvtest1 test 
  Logical volume "lvtest1" created.
[root@localhost ~]# lvcreate -L +8G -n lvtest2 test 
  Volume group "test" has insufficient free space (2046 extents): 2048 required.
[root@localhost ~]# lvcreate -L +7G -n lvtest2 test 
  Logical volume "lvtest2" created.
[root@localhost ~]#



创建成功之后,使用“lvs”命令就可以看到在当前的系统中有了两个分区:

[root@localhost ~]# lvs
  LV      VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvtest1 test -wi-a----- 8.00g                                                    
  lvtest2 test -wi-a----- 7.00g                                                    
[root@localhost ~]#


这两个分区保存在/dev/目录中刚才创建的卷组里

[root@localhost ~]# ls /dev/test/
lvtest1  lvtest2
[root@localhost ~]#


    在找到这两个分区之后就可以在每个分区中创建文件系统,然后挂载进行使用(创建文件系统和挂载的方法查看原先的博客)。这样我们就获得了一个为8GB,一个为7GB的分区,再来看一下原始的分区是5GB和11GB,这就是LVM逻辑卷的功能,它可以使我们在不重新分区的情况下,自由的分配磁盘的大小。


    在需要进行数据的备份的时候,就用到了逻辑卷的快照。快照,本身也是一种逻辑卷;目标逻辑卷的另外一个访问路径;快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝,对于需要备份或者复制的现有数据集临时拷贝以及其它操作来说,快照是最合适的选择。快照只有在它们和原来的逻辑卷不同时才会消耗空间。在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间。当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中。快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据也可以使用lvextend扩展快照卷。快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享。由于快照区与原本的LV共用很多PE的区块,因此快照去与被快照的LV必须要要在同一个VG上!系统恢复的时候的文件数量不能高于快照区的实际容量。


快照逻辑卷

  lvcreate -L SNAPSHOT_SIZE -s -p r -n SNAPSHOT_NAME /PATH/TO/ORIGIN_LVM

    -L SIZE:指定快照逻辑卷的大小

    -s:创建一个快照逻辑卷

    -p r:创建处理的逻辑卷是只读权限

    -n SNAPSHOT_NAME:指定快照逻辑卷的名称