在 GNU/Linux 环境中,LVM(Logical Volume Management)或逻辑卷管理是一种通过虚拟块轻松管理块设备的解决方案。Linux 环境中使用 LVM 的磁盘管理提供了系统上存在的磁盘结构的高级视图,为应用程序和用户分配存储提供了更大的灵活性。使用 LVM 创建的卷几乎可以随意调整大小和移动,使得存储空间的管理变得更加简便和高效。
本文瑞哥就带大家了解LVM。
目录:
[TOC]
LVM 的基本概念
LVM 的三个重要元素:物理卷(PV)、卷组(VG)和逻辑卷(LV)。
物理卷(Physical Volume)
物理卷是 LVM 中的基本单元,它可以是硬盘的整个分区或者未分区的硬盘空间。物理卷是 LVM 中存储数据的实际载体,它们通常是硬盘、SSD 或 NVMe 等块设备。
创建物理卷的步骤通常包括使用 pvcreate
命令将磁盘或磁盘分区标记为物理卷,以供后续使用。
pvcreate /dev/sdb
卷组(Volume Group)
卷组是由一个或多个物理卷组成的逻辑存储池,它为逻辑卷提供了抽象和灵活性。在卷组中,物理卷的存储空间汇总在一起,以供后续使用。
创建卷组的步骤包括使用 vgcreate
命令创建一个卷组,并将一个或多个物理卷添加到卷组中。
vgcreate vg_data /dev/sdb
逻辑卷(Logical Volume)
逻辑卷是从卷组中划分出的逻辑存储空间,它可以看作是虚拟的硬盘分区。逻辑卷是用户实际上用来存储数据的部分,它们可以根据需要动态调整大小,并且可以跨越多个物理卷。
创建逻辑卷的步骤包括使用 lvcreate
命令在指定的卷组上创建逻辑卷,并指定逻辑卷的大小。
lvcreate -L 100G -n lv_data vg_data
LVM 架构示意图
物理卷 (PV) 卷组 (VG) 逻辑卷 (LV)
| | |
| | |
+-----------------+----------------+
| |
+------------------+
|
|
文件系统(/、/var、/home 等)
在 LVM 架构中,物理卷被组织成卷组,而卷组上创建逻辑卷以供文件系统使用。这种层次结构使得管理和扩展存储空间变得更加灵活和方便。
遵循创建顺序,首先创建物理卷,然后将它们分组为一个或多个卷组,最后在卷组上创建逻辑卷。这种顺序保证了逻辑卷可以充分利用物理卷和卷组的灵活性和可用性。
线性逻辑卷和条带逻辑卷
在 LVM 中,您可以选择使用线性逻辑卷(Linear LV)或条带逻辑卷(Striped LV)来管理存储空间。这两种方式在磁盘资源的利用和性能方面有所不同。
线性逻辑卷(Linear LV)
线性逻辑卷是 LVM 中的一种基本形式,它将物理卷上的数据按照线性顺序进行存储。换句话说,数据从一个物理卷的末尾延伸到下一个物理卷的开始,依次类推,直到所有物理卷都被使用完毕。
特点:
- 数据按照线性顺序存储,从一个物理卷延伸到下一个物理卷。
- 简单直观,易于管理。
- 适用于小型环境或者对数据读取顺序要求不高的情况。
条带逻辑卷(Striped LV)
条带逻辑卷是一种高级形式的逻辑卷,它将数据分布在多个物理卷之间,以提高读写性能和并发能力。数据被分成固定大小的条带(或块),依次存储在不同的物理卷上。
特点:
- 数据被分割成条带,并分布在多个物理卷上,增加了读写并发能力和性能。
- 更好地利用了磁盘资源,提高了 IOP(每秒输入/输出操作数)。
- 适用于对性能要求较高、需要大量并发读写操作的情况,如数据库、视频编辑等应用场景。
假设我们有两个 1 TiB 的物理卷,分别为 /dev/sdb
和 /dev/sdc
。我们可以创建一个线性逻辑卷和一个条带逻辑卷,以比较它们之间的不同。
创建线性逻辑卷
lvcreate -l 100%FREE -n linear_lv vg_data /dev/sdb /dev/sdc
创建条带逻辑卷
lvcreate -i2 -I64 -l 100%FREE -n striped_lv vg_data /dev/sdb /dev/sdc
在上面的示例中,-i2
表示使用两个物理卷进行条带化,-I64
表示条带大小为 64KB。您可以根据实际需求调整条带数量和大小。
文件系统管理与挂载
一旦我们创建了逻辑卷,接下来就是将其格式化为文件系统,并挂载到系统中的目录上,以便用户可以访问和使用该存储空间。
格式化逻辑卷
在创建逻辑卷后,需要使用适当的文件系统格式化它,以便在其上创建文件并存储数据。常见的文件系统格式包括 ext4、XFS、NTFS 等。
例如,要将 lv_data
逻辑卷格式化为 ext4 文件系统,可以执行以下命令:
mkfs.ext4 /dev/vg_data/lv_data
挂载逻辑卷
格式化完成后,需要将逻辑卷挂载到文件系统的目录上,以便用户可以访问其中的数据。
# 创建挂载点(如果不存在)
mkdir /mnt/data
# 将逻辑卷挂载到挂载点上
mount /dev/vg_data/lv_data /mnt/data
现在,逻辑卷 lv_data
已经成功挂载到 /mnt/data
目录上,用户可以通过该目录来访问和管理存储在其中的数据。
LVM 的扩展与管理
LVM 不仅可以帮助我们管理已有的存储空间,还可以在需要时进行扩展和调整,以满足不断增长的存储需求。
扩展逻辑卷
当系统中的存储空间不足时,可以通过扩展现有的逻辑卷来增加可用空间。
# 扩展逻辑卷
lvextend -L +50G /dev/vg_data/lv_data
# 调整文件系统大小
resize2fs /dev/vg_data/lv_data
添加物理卷到卷组
如果卷组中的存储空间不足,可以通过添加更多的物理卷来扩展其容量。
# 创建新的物理卷
pvcreate /dev/sdc1
# 将新的物理卷添加到卷组
vgextend vg_data /dev/sdc1
移除物理卷或逻辑卷
在一些情况下,可能需要移除不再需要的物理卷或逻辑卷,以释放存储空间或进行系统优化。
# 移除物理卷
vgreduce vg_data /dev/sdb1
# 移除逻辑卷
lvremove /dev/vg_data/lv_data
LVM 的实际应用场景
在实际的系统管理中,LVM 可以应用于许多场景,以提高系统的灵活性、可用性和性能。
容量管理
LVM 提供了灵活的容量管理功能,可以动态地调整逻辑卷和卷组的大小,以满足不同应用场景下的存储需求。
假设我们的数据库存储空间不足,需要扩展。我们可以通过增加物理卷、扩展卷组和逻辑卷的方式来满足需求。
# 创建新的物理卷
pvcreate /dev/sdc1
# 将新的物理卷添加到卷组
vgextend vg_data /dev/sdc1
# 扩展逻辑卷
lvextend -L +100G /dev/vg_data/lv_data
# 调整文件系统大小
resize2fs /dev/vg_data/lv_data
数据备份与恢复
LVM 的快照功能可以用于创建存储卷的快照,以便进行数据备份、测试或者回滚操作,而无需中断服务。
在数据库升级之前,我们可以先创建一个逻辑卷的快照,以便在升级失败时快速回滚。
# 创建快照
lvcreate -L 20G -s -n lv_data_snapshot /dev/vg_data/lv_data
# 在快照上进行操作(如升级数据库)
# ...
# 恢复快照
lvconvert --merge /dev/vg_data/lv_data_snapshot
磁盘故障恢复
LVM 支持 RAID 技术,可以在物理卷之间创建镜像或条带,以提高数据的容错性和可用性,同时在硬盘故障时实现数据自动恢复。
在卷组中创建一个镜像卷,以保证数据在一块硬盘故障时的可靠性。
# 创建镜像卷
lvcreate -L 100G -m1 -n lv_data_mirror vg_data /dev/sdd1
数据迁移与整合
通过 LVM,可以将多个物理卷整合到一个逻辑卷中,以提高存储资源的利用率,并简化管理工作。
将两个物理卷整合到一个卷组中,以便统一管理和利用存储空间。
# 创建新的物理卷
pvcreate /dev/sdc1 /dev/sdd1
# 将新的物理卷添加到卷组
vgextend vg_data /dev/sdc1 /dev/sdd1
# 扩展逻辑卷(如果需要)
lvextend -l +100%FREE /dev/vg_data/lv_data
LVM 中磁盘已满问题解决
清理不必要的文件和日志
首先,您可以尝试清理系统中不必要的文件和日志,以释放磁盘空间。您可以使用 du
和 rm
命令来查找和删除占用空间较大的文件。
du -sh /mnt/var_log/* # 查看/var/log目录下各文件占用空间
rm /mnt/var_log/large_file # 删除占用空间较大的文件
扩展逻辑卷的大小
如果清理文件后仍然没有足够的空间,您可以考虑扩展逻辑卷的大小,以增加可用空间。首先,您需要检查逻辑卷的当前大小和可用空间。
lvdisplay /dev/vg_data/lv_data # 查看逻辑卷的信息
然后,您可以使用 lvextend
命令来扩展逻辑卷的大小。假设您想要将逻辑卷的大小增加 100 GiB,您可以执行以下命令:
lvextend -L +100G /dev/vg_data/lv_data # 扩展逻辑卷的大小
调整文件系统大小
扩展逻辑卷后,您需要调整文件系统的大小,以使其能够利用新的空间。对于 ext4 文件系统,您可以使用 resize2fs
命令来调整大小。
resize2fs /dev/vg_data/lv_data # 调整文件系统大小
挂载新空间
最后,您需要重新挂载逻辑卷,以使其生效。
umount /mnt/data # 卸载逻辑卷
mount /dev/vg_data/lv_data /mnt/data # 挂载逻辑卷
总结
LVM 是磁盘管理方面的强大盟友,尽管大多数云技术不直接使用 LVM,但它们仍然使用 LVM 的某些变体,例如用于集群解决方案的 cLVM。了解如何使用 LVM 不仅可以增强您有效管理磁盘资源的能力,还可以为理解更高级的概念(例如 cLVM)奠定坚实的基础,这些概念是复杂集群解决方案中不可或缺的一部分。