Linux 之 LVM

什么是LVM

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。

为什么使用LVM

直接使用fdisk分区挂载的话,随着时间的推移,数据量越来越大,硬盘空间越来越小,要想扩充容量的话,就必须挂载新硬盘然后做数据迁移,这就必然导致前台业务的停止,不符合企业需求,因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。Linux提供的逻辑盘卷管理(LVM,Logical Volume Manager)机制就是一个完美的解决方案。

LVM逻辑卷管理通过将底层物理硬盘抽象封装起来,以逻辑卷的形式表现给上层系统,逻辑卷的大小可以动态调整,而且不会丢失现有数据。新加入的硬盘也不会改变现有上层的逻辑卷,大大提高了磁盘管理的灵活性。

LVM原理

首先我们讨论以下几个LVM术语:

  • 物理存储介质(The physical media):这里指系统的存储设备:硬盘,如:/dev/hda、/dev/sda等等,是存储系统最低层的存储单元。
  • 物理卷(physical volume):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
  • 卷组(Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
  • 逻辑卷(logical volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
  • PE(physical extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
  • LE(logical extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

一块硬盘(物理存储介质)被格式化为物理卷(physical volume),其内部被分成若干个默认大小为4M的PE(physical extent),然后在PV的基础上创建卷组(Volume Group),可以把一个或者多个PV加到VG中,VG就好像一个空间池,假如多少个PV,VG就有多大的容量,最后基于VG创建逻辑卷(logical volume) ,一个逻辑卷就是若干个PE,然后将LV格式化再挂载(将LV当成是分区)

  1. 物理磁盘被格式化为PV,空间被分为一个个PE
  2. 不同的PV加入同一个VG,不同PV的PE全部进入VG的PE池内
  3. LV基于PE创建,大小为PE的整数倍,组成LV的PE可能自来不同的物理磁盘
  4. LV现在就直接可以格式化后挂载使用了
  5. LV的扩充缩减实际上就是增加或减少组成该LV的PE的数量,其过程不会丢失数据

实现LVM

  • 第一步:创建物理卷(PV)
pvcreate 硬盘名称
pvcreate /dev/sdb /dev/sdc

可以通过pvdisplay或者pvs命令来查看创建的物理卷

  • 第二步:创建一个卷组(VG),将物理卷加入卷组中
vgcreate 自定义VG名称 要加入的PV
vgcreate VGName /dev/sdb /dev/sdc

可以通过vgdisplayvgs来查看创建的卷组

至此,物理卷和卷组已经创建成功,但是硬盘空间还不能使用,我们还需要创建逻辑卷。

  • 第三步:基于卷组创建逻辑卷(LV)
lvcreate -n 自定义逻辑卷名称 -L 要创建的逻辑卷的大小 VG名称
lvcreate -n LVName -L 3G VGName

可以使用命令lvslvdisplay查看lv的详细信息

  • 第四步:为创建好的逻辑卷创建文件系统
mkfs.ext4 /dev/VGName/LVName

  • 第五步:挂载LV
mount /dev/VGName/LVName /mnt


至此,逻辑卷就创建挂载好了,可以使用啦~!

删除LV

lvremove 逻辑卷名称
lvremove /dev/vgTest/lvTest

删除VG

vgremove vg名称
vgremove vgTest

删除PV

pvremove pv名称
pvremove /dev/sdb /dev/sdc

注意:删除逻辑卷的过程一定是
卸载挂载---删除lv---删除vg---删除pv

拉伸与缩小LVM

LVM和其他的分区方式最大的优势就是可以动态的拉伸或缩小逻辑卷空间,并且是在线执行的,拉伸并不会影响原有数据无需下线,缩小逻辑卷需要下线,如果直接缩小,数据则有可能被破坏

拉伸LV:

  • 保证VG中有足够的空闲空间
vgdisplay
  • 扩充逻辑卷
 lvextend -L +1G /dev/vgTest/lvTest
  • 查看扩充后的lv的大小
lvdisplay

  • 更新文件系统
resize2fs /dev/vgTest/lvTest
  • 查看更新后的文件系统
df -h

拉伸VG

当逻辑卷空间不够的时候,我们可以扩充逻辑卷,其实质就是从VG中拿若干PE到LV中,但是当VG中空间也不够时,我们就需要拓展VG,也就是将新硬盘格式化为PV添加到VG中

  • 将要添加到VG的硬盘格式化为PV
pvcreate /dev/sdd

  • 将新的PV添加到指定卷组中
vgextend linuxcast /dev/sdd
  • 查看扩充后的VG
vgs

缩小逻辑卷

逻辑卷的缩小必须离线,需要卸载逻辑卷,如果在线缩小,则有可能丢失数据,先缩小文件系统,再缩小LV

  • 卸载已经挂载的逻辑卷
  • 缩小文件系统
resize2fs 需要缩小的文件系统 缩小到的大小
resize2fs /dev/linuxcast/mylv 10G

  • 缩小LV
lvreduce -L 缩小大小 缩小的LV

  • 查看缩小后的LV
  • 挂载

缩小卷组

  • 将一个PV从指定的卷组中移除
vgreduce 卷组名称 硬盘名称
vgreduce linuxcast /dev/sdd
  • 查看缩小后的卷组
vgdisplay

Copyright© 2020-2022 li-xyz 冀ICP备2022001112号-1