什么是LVM?
LVM(Logical Volume Manager)逻辑卷管理是在Linux2.4内核以上实现的磁盘管理技术。它是Linux环境下对 磁盘分区进行管理的一种机制。现在不仅仅是Linux系统上可以使用LVM这种磁盘管理机制,对于其它的类UNIX操作系统,以及windows操作系统都有类似与LVM这种磁盘管理软件。
相关该概念
- Physical Volume(PV)
物理卷,将实际的磁盘分区(partition)系统识别码(system ID)修改为8e后,在通过pvcreate指令转化为LVM最底层的物理卷,作为后续空间管理的基础。
- Volume Group(VG)
卷组,将数个PV进行整合,即形成了VG,在32位的操作系统中,LV的大小与PE的大小有关;在64位的操作系统中,LV几乎没有容量限制。
- Physical Extent(PE)
物理区块,他是LVM中的最小存储单元。PE类似于文件系统中的block。
- Logical Volume(LV)
逻辑卷,由VG划分而来,LV的大小与PE的大小及PE的数量有关,Size(LV)= Count(PE)* Size(PE)
结构示意图
磁盘划分为PV —> PV组成了VG,同时设置了PE大小 —> 从VG中划分出LV
LVM的工作原理?
它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。
LVM的优缺点
优点:
- 可以在系统运行的状态下动态的 扩展文件系统的大小
- 文件系统跨越多个磁盘,文件系统的大小不受磁盘大小的限制
- LVM的存储空间可以通过新增磁盘的方式扩容
缺点:
- 从卷组中移除一个磁盘的时候必须使用reducevg命令
- 当卷组中有一个磁盘损坏了,整个卷组都会受到影响(由于一份数据可能会存储在不同的磁盘中)
- 在磁盘创建过程中增加了额外的步骤,所以数据存贮性能会受到影响
LVM的实战使用
- 创建LVM过程
① 通过fdisk修改磁盘分区的SYSTEM ID为8e,将文件系统类型更改为Linux LVM
# fdisk 需要修改的磁盘
选择 t 命令修改
选择分区号,设置系统ID信息
② 创建PV
# pvcreate 需要转化为PV的磁盘分区
其他PV相关指令
pvscan:显示当前PV相关信息
pvdisplay (+ 磁盘分区路径):显示详细的(分区)PV信息
③ 创建VG
# vgcreate [-s N[mgt]] VG名称 PV名称
可以通过 -s 后面接PE的大小,代为可以是m,g,t
其他VG相关指令
vgscan:显示当前VG相关信息
vgdisplay:显示目前系统上的VG状态
vgextend:在VG内增加额外的PV
vgreduce:在VG内一处PV
vgchange:设定VG是否启动(active)
vgremove:删除一个VG
④ 创建LV
# lvcreate [-L N[mgt]] [-n LV名称] VG名称 (-L 后跟lV容量的大小)
# lvcreate [-l N] [-n LV名稱] VG名稱 (-l 后跟PE的个数)
其他相关命令
lvscan:查询系统上的LV
lvdisplay:显示系统上的LV详细信息
lvextend:增加LV的容量
lvreduce:减少LV的容量
lvremove:删除一个LV
lvresize:对LV进行容量大小的调整
⑤ 格式化新建的LV,否则将无法进行目录挂载
⑥ 文件目录的挂载
# mount LV路径 目录路径
过程记录:
创建分区信息如下,注意修改 Id 为 8e
LVM创建过程
- LV扩容(注意需要先对分区进行格式化,若扩容后再可视化会对原有文件造成影响)
① 确定VG是否存在多余的容量
LV是由VG进行划分创建的,若VG无剩余空间则无法对LV进行扩容,所以首先需要新增磁盘,并通过 pvcreate 指令添加PV,vgextend扩展VG空间。注意:新加磁盘分区后需要进行格式化,否则在最终完成扩容后,扩容空间将无法正常使用。
② LV 进行扩容
在VG剩余空间足够的情况下,只需要通过 lvresize 指令将剩余容量加入到所需要增加的LV装置内即可。
# lvresize -L +N(M/G/T) 进行扩容的LV路径
③ 若目标目录挂载点的文件系统为xfs,则需要执行如下命令才能最终达到扩容
# xfs_growfs 目标目录
过程记录
新建逻辑分区sdb5后,执行如下操作进行扩容