1、什么是LVM 传统的分区都是一次性分区,即分区后其大小就是固定的,不能后期因为空间不足进行大小调整,如果要改变,唯一的操作办法就是重新分区,这对于需要高可用的服务器环境是非常糟糕的,所以此时引入了LVM逻辑卷管理模式,LVM就是一个建立在物理存储驱动器上的逻辑驱动机制,它的作用主要是使存储设备的空间调整处于一种弹性的工作状态,不在是固定的,可以根据环境的需求,动态的调整空间的使用量,不但可以扩容,也可以缩减,而且调整存储空间的时候不需要重启系统,它还有一个最大的优点就是可以跨硬盘调整分区大小,完全不影响系统的运行。 2、LVM逻辑卷的体系结构 3、LVM体系思路 首先将一个或者多个物理存储空间,初始化配置,将它们都配置成为LVM系统识别的物理卷,即将它们的磁盘标签设置成为Linux LVM类型,这里的物理存储空间可以是基本磁盘分区,也可以是整个物理磁盘,或者创建的RAID卷 当初始化完成后,都变成物理卷PV,接下来要他们组成一个队伍,即分成一个组,因为他们此前都是单兵作战,不能同一队形,这样对于操作系统而言,还是认为这是各自独立的存储磁盘,所以我们要让操作系统知道这些都是一个存储空间,至少在形式上让它这样以为,这就为我们后面调整存储空间解放自由,不在受限,任意而为。 在上述之后,我们就可以在这个组之上,任意划分逻辑卷LV,并且建立文件系统,存储我们的数据。 4、完整的配置实践 这里我们以centos7系统的根目录为例 操作平台:VMware workstation 操作环境:centos7计算机一台,添加一块硬盘空间为20G 这里需要注意一点:操作之前,如果你是用磁盘分区的形式来做,记得将分区类型设置为Linux LVM 5、命令操作 创建之前我们先看一下,我们当前根目录的空间使用情况,可用空间为12G 在这里插入图片描述 创建物理卷

[root@lab-235 ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

查看物理卷信息可以用到以下几个命令 pvscan:扫描物理卷

[root@lab-235 ~]# pvscan 
  PV /dev/sda2   VG centos          lvm2 [19.80 GiB / 0    free]
  PV /dev/sdb                       lvm2 [20.00 GiB]
  Total: 2 [39.80 GiB] / in use: 1 [19.80 GiB] / in no VG: 1 [20.00 GiB]

我们可以看到现在有两个物理卷,一个是我们系统的根分区,还有一个是我们刚刚创建的/dev/sdb pvs:显示物理卷的基本信息

[root@lab-235 ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree 
  /dev/sda2  centos lvm2 a--  19.80g     0 
  /dev/sdb          lvm2 ---  20.00g 20.00g

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

[root@lab-235 ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               19.80 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              5069
  Free PE               0
  Allocated PE          5069
  PV UUID               t9BxDY-n5nR-rkvF-V5zc-J3kU-3GML-27X82p
   
  "/dev/sdb" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               Sv5VLs-ITKr-q0wj-z187-cbrW-cOUU-8gfySV

接下来我们要将新创建的物理卷添加到我们根分区所在的逻辑组,此处我们可以通过以下几个命令首先获取根分区所在组的名称(VG name): 1、可以用上述pvscan、pvs、pvdisplay,我们都可以看到VG的名字是centos 2、也可以使用vgscan、vgs、vgdisplay,逻辑组专用命令查看 扩展根分区的逻辑组centos,此处因为我们是扩展根分区,如果要创建可以使用vgcreate命令

[root@lab-235 ~]# vgextend centos /dev/sdb
  Volume group "centos" successfully extended

查看扩展后VG的情况

[root@lab-235 ~]# vgdisplay centos 
  --- Volume group ---
  VG Name               centos
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               <39.80 GiB
  PE Size               4.00 MiB
  Total PE              10188
  Alloc PE / Size       5069 / 19.80 GiB
  Free  PE / Size       5119 / <20.00 GiB
  VG UUID               RI64Bu-s1Gr-V1Jh-JcWr-EpSS-Z8zr-uwaKmp

此时我们看到VG Size明显的变大了,从原来的19.8G,变成了39.8G 接下来我们将19G空间分配到根分区上去

[root@lab-235 ~]# lvresize  -L +19G /dev/centos/root 
  Size of logical volume centos/root changed from 16.07 GiB (4115 extents) to 35.07 GiB (8979 extents).
  Logical volume centos/root successfully resized.

此时逻辑卷已经增加,但是文件系统的容量是没有增加的,此时我们还需要调整文件系统容量,这里需要注意当前被扩展分区的系统类型,如果是xfs,就使用xfs_growfs,如果是ext系列的,就使用resize2f 查看文件系统类型我们可以使用blkid

[root@lab-235 ~]# blkid
/dev/sda1: UUID="a4afdc45-11ae-4ea5-afd4-394e94d3b2da" TYPE="xfs" 
/dev/sda2: UUID="t9BxDY-n5nR-rkvF-V5zc-J3kU-3GML-27X82p" TYPE="LVM2_member" 
/dev/sdb: UUID="Sv5VLs-ITKr-q0wj-z187-cbrW-cOUU-8gfySV" TYPE="LVM2_member" 
/dev/mapper/centos-root: UUID="c33942b5-fd49-47e1-8d55-ea7dda4afc34" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="42ef240a-ebdf-4ef8-94ad-04a7a03b8915" TYPE="swap" 

调整文件系统容量

[root@lab-235 ~]# xfs_growfs /dev/centos/root 
meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=1053440 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=4213760, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 4213760 to 9194496

此时查看文件系统容量,发生如下改变,从原来的12G变成31G 在这里插入图片描述 至此完成扩容

总结:

1、如果是新创建的LVM,操作如下

pvcreate  /dev/sdb  /dev/sdc
vgcreate  -s 24M  vgname  /dev/sdb  /dev/sdc

说明:在创建卷组时需要注意一点,因为卷组相当于的存放很多物理卷的池子,我们可以在这个池子中添加物理卷,也可以移除,但是在卷组中,它会把这些物理卷的空间全部重新分配为大小相同的容量区域,称之为PE,所以在实际工作需要中根据自身需求可以指定这个PE的大小,默认是4MB,可以通过-s选项指定大小

lvcreate -L +20G  -n  lvname vgname

也可以使用小L指定PE数创建逻辑卷,此时路基卷大小N*单个PE大小,N表示PE个数 接下来就是文件系统的创建,和上面扩容后操作一样,根据需求选在文件系统格式 2、LVM减容操作时,如果从有数据的逻辑卷上操作,一定要先备份数据(当我们在做磁盘管理时,无论做何种操作,尤其是有危害到数据的动作,一定要先备份),因为减容前,我们要先卸载目录,然后操作,完成后,因为存储空间元数据发生改变,此时在挂载时,会提示找不到文件系统的超级块,会要求重新建立文件系统,相当于格式化操作。具体操作如下 备份数据

cp  -R  /test    /back

卸载目录

mount   /test

如果无法卸载,查看当前目录有哪些用户使用,可以使用kill命令直接杀死进程号,也可以使用fuser命令的选项-k,直接杀死指定文件的所有进程

fuser  /test

fuser命令可以通过安装psmisc软件包获取 压缩空间

resize2fs  /dev/vgname/lvname1  10G	

减容

lvreduce  -L  10G  /dev/vgname/lvname1   

表示将lvname1空间减少至10G

lvreduce -L -10G  /dev/vgname/lvname1   

表示将lvname1空间减少10G 3、查看LV逻辑卷配置信息,可使用如下命令 lvscan:扫描逻辑卷 lvs:显示基本信息 lvdisplay:显示详细信息 4、快照卷的创建,用到如下选项 -s:表示创建快照 -p r|w:指定快照读或者写权限 用法:lvcreate -L 10G -n snap-name -s -p r /dev/vgname/lvname1 针对逻辑卷lvname1创建一个10G大小的快照卷 快照卷的作用:如果遇到逻辑卷数据被删除,可从快照卷中恢复