在制作文件系统过程中,其中会为系统分配各分硬盘分区的容量,这是就要计划好磁盘分多少个区,每个分区的容量是多大空间。如果设计的磁盘分区容量不合理或是随着服务器持续运行,磁盘空间会慢慢被使用所剩无几。这时会遇到磁盘分区容量不够用时,对于Linux管理员来说是非常麻烦的一件事,如果增加空间就得增减硬盘,这样一来,无论是缩减或增加硬盘空间都非常不方便。因为这个过程需要先备份系统,然后删除分区重新划分、增加硬盘,如果原来是做了RAID设置,还要先制作RAID,最后把备份的系统恢复回去等等一系列操作。当然,缩减硬盘空间的需求非常少见。
基于以上情况,LVM就是解决此问题,它能非常灵活的缩减或扩增硬盘空间。
1. LVM概述
LVM是逻辑盘卷管理器(Logical Volume Manager)的简称,它是Linux环境下磁盘分区进行管理的一种机制,LVM是建立在磁盘和分区之一、硬盘分区与文件系统之间的一个逻辑层,来提高硬盘分区管理的灵活性。
通过LVM,系统管理员可以轻松管理磁盘分区;先把硬盘制作成多个或仅一个分区,LVM把所有的分区制作成物理卷,可灵活的把多个物理卷组成一个卷组,在卷组基础上创建逻辑卷,最后在这个逻辑卷上制作文件系统、挂载使用即可,如下图所示。
几个关于LVM的相关术语:
1)物理卷(Physical Volumes):在LVM系统中的最底层,可以是物理硬盘上的分区,创建分区时必须指定分区格式为LVM所支持的格式即8e。硬盘分区后(还未格式化为文件系统)使用pvcreate命令可以将分区创建为pv.
2)卷组(Volume Group):在PV基础上,通过vgcreate将一个或多个PV组合成VG,VG整合了多个PV,就如同整合了多个分区的硬盘一样。一旦PV被创建,可动态的将PV添加到VG中来实现扩容,且在LVM中可以创建多个VG。另外,创建VG时会将VG所有的空间根据指定的PE大小划分为多个PE,在LVM模式下的存储都以PE为单元,类似于文件系统的Block.
3)逻辑卷(Logical Volumes):VG相当于是整合过的硬盘,那么LV就相当于分区,只不过该分区时通过VG来划分的,可动态缩减或扩容。VG中有很多PE单元,可以指定将多少个PE划分给一个LV,也可以直接指定大小(如多少兆)来划分。划分为LV之后就相当于划分了分区,只需在对LV进行格式化即可变成文件系统。
4)物理扩展(PE):也称物理区域,是LVM中最小的存储单位也是物理卷中可用于分配的最小单位,PE是构成VG的基本单位,就如同block是构成分区的基本单位一样,PE的大小可以设定,也决定了LVM的灵活性。
5)逻辑扩展(LE):PE是物理存储单元,而LE是逻辑存储单元,也即为LV中的逻辑存储单元,和PE的大小是一样的。从VG中划分LV,实际上是从VG中划分PE,只不过划分LV后它就不再称为PE,而成为LE。
通俗的讲,非LVM管理的分区步骤是将硬盘分区,然后将分区格式化为文件系统。而使用LVM,则是在硬盘分区为特定的LVM标识符的分区后将LVM可管理的PV,其实PV仍然类似于分区,然后将几个PV重新整合为类似于磁盘的VG,最后划分VG为LV,此时LVl就成了LVM可管理的分区,只需再对其格式化即可成为文件系统。 LVM之所以能够伸缩容量,其实现的方法就是将VG中空间的PE添加到LV中,此为扩容,或者将LV中空闲的PE移会到VG中,此为缩减容量。而且,可以随时向VG中添加新的PV,这就使得LVM管理的分区可以随意增加大小。
2. LVM的写入机制
LV是从VG中划分出来的,LV中的PE很可能来自于多个PV。在向LV存储数据时,有多种存储机制,其中两种是:
1)线性模式(linear):先写完来自同一个PV的PE,再写来自于下一个PV的PE。
2)条带模式(striped):一份数据拆分成多分,分别写入该LV对应的每个PV中,所以读写性能较好,类似于RAID。
尽管striped读写性能较好也不建议使用该模式,因为lvm的着重点在于弹性容量扩展而非性能,要实现性能应该使用RAID来实现,而且使用striped模式时要进行容量的扩展和收缩将比较麻烦,默认是使用线性模式。
3. LVM的管理命令
LVM涉及到了PV,VG,LV三个层次,每个层次都有对应的命令来管理,虽然数量可能比较多,但是命令名称大多类似。
3.1 PV管理工具
管理PV有几个工具:pvs, pvscan,pvdisplay, pacreate, pvremove, pvmove
(1) 显示PV信息
语法格式为:
pvs [OPTIONS]
pvdisplay [OPTIONS]
(2) 创建PV
语法格式为:
pvcreate /dev/DEVICE
(3) 删除PV
语法格式为:
pvmove /dev/DEVICE
(4)检查PV
语法格式为:
pvscan [OPTIONS]
3.2 VG管理工具
管理VG有几个工具:vgs, vgscan, vgdisplay, vgcreate, vgremove, vgreduce, vgextend, vgchange
(1) 显示VG
语法格式为:
vgs [OPTIONS]
vgdisplay [OPTIONS]
(2) 创建VG
语法格式为:
vgcreate [-s #[kKmMgGtTpPeE]] VG_NAME /dev/DEVICE [/dev/DEVICE...]
(3) 扩展VG
语法格式为:
vgextend VG_NAME /dev/DEVICE [/dev/DEVICE...]
(4) 缩减VG
vgreduce VG_NAME /dev/DEVICE [/dev/DEVICE...]
(5) 删除VG
vgremove VG_NAME
NOTE:删除VG时,要先执行pvremove,后执行vgremove,以确保数据文件完整不被损坏
(6) 检查VG
语法格式:
vgscan [OPTIONS]
(7) 修改VG属性,如修改vg的状态为激活或未激活状态
语法格式为:
vgchange [OPTIONS]
3.3 LV管理工具
管理LV的几个工具:lvs, lvscan, lvdisplay, lvcreate, lvremove, lvreduce, lvextend, lvresize
(1) 显示LV
语法格式为:
lvs [OPTIONS]
lvsdisplay [OPTIONS]
(2) 创建LV
语法格式为:
lvcreate -L SIZE[mMgGtT] -n LV_NAME VG_NAME
说明:直接指定LV的固定大小,-L是指定的空间大小
lvcreate -l 100% FREE -n LV_NAME VG_NAME
说明:指定LV大小为所有可用的VG空间,-l是指定的PE的数量
(3) 删除LV
语法格式为:
lvremove /dev/VG_NAME/LV_NAME
(4) 扩展LV
语法格式为:
lvextend -L [+]SIZE[nMgGtT] /dev/VG_NAME/LV_NAME
配合同步ext系列文件系统的命令才生效:
resize2fs /dev/VG_NAME/LV_NAME
或同步xfs文件系统的命令才能生效:
xfs_growfs /dev/VG_NAME/LV_NAME
lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
说明:执行一条命令后同时完成扩展LV和同步文件系统的功能,使用所有的VG空间扩展LV,SIZE表示为扩展到LV的总容量大小,+SIZE表示在原来基础上增加的容量大小
(5) 缩减LV
语法格式为:
lvreduce -L [-]SIZE[nMgGtT] /dev/VG_NAME/LV_NAME
说明:缩减LV时,注意步骤,先执行umount命令卸载,然后进行文件系统检查,在重置文件系统大小,最后才执行lvreduce命令,以上缩减步骤非常重要。不过,显示环境中,不会有缩减的需求。
(6) 检查LV
语法格式为:
lvscan [OPTIONS]
4. LVM的配置与使用
https://www.jianshu.com/p/769ed5b370b9