lvm 示意图

image.png

依次为:disk -> partition -> PV -> VG -> LV -> fs,也即磁盘->分区->物理卷->卷组->逻辑卷->文件系统。

LVM 主要构成

  • 物理存储介质 (PM, physical media):LVM 存储介质可以是分区、磁盘、RAID 阵列或 SAN 磁盘。
  • 物理卷 (PV, physical volume):物理卷是 LVM 的基本存储逻辑块,但与基本的物理存储介质(如分区、 磁盘等)比较,却包含有与 LVM 相关的管理参数,创建物理卷可以用磁盘分区,也可以用磁盘本身。磁盘设备必须初始化为 LVM 物理卷,才能与 LVM 结合使用。
  • 卷组 (VG, Volume Group):LVM 卷组由一个或多个物理卷组成。
  • 逻辑卷 (LV, logical volume):LV 建立在 VG 之上,可以在 LV 之上建立文件系统。
  • 物理范围 (PE, physical extents):PV 物理卷中可以分配的最小存储单元,PE 的大小是可以指定的,默认为 4MB。
  • 逻辑范围 (LE, logical extents):LV 逻辑卷中可以分配的最小存储单元,在同一个卷组中,LE 的大小与 PE 是相同的, 并且一一对应。

LVM 优点

  • 使用卷组,使多个硬盘空间看起来像是一个大的硬盘
  • 使用逻辑卷,可以跨多个硬盘空间的分区 sdb1 sdb2 sdc1 sdd2 sdf
  • 使用逻辑卷,可以在空间不足时动态调整它的大小
  • 在调整逻辑卷大小时,不需要考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间
  • 可以在线对 LV、VG 进行创建、删除、调整大小等操作,LVM 上的文件系统也需要重新调整大小
  • 允许创建快照,可以用来保存文件系统的备份
  • RAID + LVM 结合使用:LVM 是软件的卷管理方式,而 RAID 是磁盘管理的方法。对于重要的数据,使用 RAID 来保护物理磁盘不会因为故障而中断业务,再用 LVM 来实现对卷的良性管理,更好地利用磁盘资源。

使用 LVM 的基本步骤

  1. 物理磁盘被格式化为 PV,即空间被划分为一个个的 PE。PV 包含多个 PE。
  2. 不同的 PV 加入到同一个 VG 中,即不同 PV 的 PE 全部进入到 VG 的 PE 池内。VG 包含多个 PV。
  3. 在 VG 中创建 LV 逻辑卷,这个创建过程基于 PE,所以组成 LV 的 PE 可能来自不同的物理磁盘。LV 基于 PE 创建。
  4. LV 直接可以格式化后挂载使用。
  5. LV 的扩缩实际上就是增加或减少组成该 LV 的 PE 数量,其过程不会丢失原始数据。
  6. 格式化 LV,并挂载使用。

LV 扩容

首先,确定是否有可用的扩容空间,因为空间是从 VG 里面创建的,并且 LV 不能跨 VG 扩容。若 VG 没有了容量,需要先扩 VG。步骤如下:

$ vgs
VG #PV #LV #SN Attr VSize VFree
vg-sdb1 1 8 1 wz--n- <16.00g <5.39g
$ lvextend -L +100M -r /dev/vg-sdb1/lv-sdb1 #将 /dev/vg-sdb1/lv-sdb 扩容 100M
df -T # 查看文件系统类型

# 拉伸文件系统,
# xfs文件系统
xfs_growfs /dev/mapper/cl_fedora-home
# 普通文件系统
resize2fs /dev/mapper/cl_fedora-home


# 最后验证

VG 扩容

如果 VG 卷组中的空间不够了,需要添加新的磁盘,依次运行以下命令:

# 创建物理卷
pvcreate /dev/sdc

# 查看卷组
vgs
#或者
pvs

# 将sdc添加到 vg-sdb1 卷组
vgextend vg-sdb1 /dev/sdb3

# 然后再执行扩容步骤

新建 LVM

# 创建磁盘分区
fdisk /dev/sdb

# 创建物理卷
pvcreate /dev/sdb1

# 查看物理卷信息
pvs

# 创建VG卷组
vgcreate oraclevg /dev/sdb1

# 查看卷组信息
vgs

# 创建LV
# 代码:lvcreate -n 指定新逻辑卷的名称 -L 指定LV大小的SIZE(M,G) (-l:小l指定LE的数量)vgname
lvcreate -n lvoracle -L 2G oraclevg

# 查看逻辑卷信息
lvs

# 文件系统格式与挂载
mkfs.xfs /dev/oraclevg/lvoracle
mount /dev/oraclevg/lvoracle /oracle/