linux系统中,随着数据量的不断增长,单个物理硬盘或单个磁盘分区因磁盘空间有限,可能无法满足数据存储需求。
为解决磁盘空间不足问题,linux引入了逻辑卷管理(lvm)技术,允许用户灵活地管理和扩展存储资源。
逻辑卷管理 lvm(logical volume manager)是linux系统下的一个逻辑卷管理工具,它提供了一个抽象层,允许用户对物理硬盘进行更灵活的管理。
lvm通过将物理硬盘或磁盘分区转换为物理卷(pv),然后将物理卷组合成卷组(vg),最后在卷组上创建逻辑卷(lv)来实现对存储资源的灵活管理。
一、lvm术语
物理卷(pv, physical volume)
物理卷就是指磁盘、磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如raid),是lvm的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有和lvm相关的管理参数。
比如你新添加了一块磁盘 /dev/sdb, 那么你可以将整块磁盘/dev/sdb 标记成一个pv,也可以先对/dev/sdb 分区,如分了两个主分区/dev/sdb1 和 /dev/sdb2 ,然后将这两个分区/dev/sdb1 和 /dev/sdb2 分别标记成一个pv。
卷组(vg, volume group)
lvm卷组类似于非lvm系统中的物理硬盘,其由物理卷组成,相当于磁盘容量总和的一个存储池。能在卷组上创建一个或多个“lvm分区”(逻辑卷),lvm卷组由一个或多个物理卷组成。
逻辑卷(lv, logical volume)
lvm的逻辑卷类似于非lvm系统中的硬盘分区,在逻辑卷之上能建立文件系统(比如/tmp或/var等)。
pe(physical extent)
每一个物理卷被划分为称为pe(physical extents)的基本单元,具有唯一编号的pe是可以被lvm寻址的最小单元。pe的大小是可配置的,默认为4mb。
le(logical extent)
逻辑卷也被划分为被称为le(logical extents) 的可被寻址的基本单位。在同一个卷组中,le的大小和pe是相同的,并且一一对应。
总的来说, 使用lvm 机制创建一个lv 的过程是:一块硬盘(物理存储介质)被格式化为物理卷(physical volume),其内部被分成若干个默认大小为4m的pe(physical extent),然后在pv的基础上创建卷组(volume group),可以把一个或者多个pv加到vg中,vg就好像一个空间池,有多少个pv,vg就有多大的容量,最后基于vg创建逻辑卷(logical volume) ,一个逻辑卷就是若干个pe,然后将lv格式化再挂载(将lv当成传统磁盘划分里面的磁盘分区)。

二、lvm卷类型
在 lvm 中,您可以选择使用线性逻辑卷(linear lv)或条带逻辑卷(striped lv)来管理存储空间。这两种方式在磁盘资源的利用和性能方面有所不同。

线性逻辑卷(linear lv)
线性逻辑卷是 lvm 中的一种基本形式,它将物理卷上的数据按照线性顺序进行存储。换句话说,数据从一个物理卷的末尾延伸到下一个物理卷的开始,依次类推,直到所有物理卷都被使用完毕。
特点:
- 数据按照线性顺序存储,从一个物理卷延伸到下一个物理卷。
- 简单直观,易于管理。
- 适用于小型环境或者对数据读取顺序要求不高的场景。
条带逻辑卷(striped lv)
条带逻辑卷是一种高级形式的逻辑卷,它将数据分布在多个物理卷之间,以提高读写性能和并发能力,数据被分成固定大小的条带(或块),依次存储在不同的物理卷上。
特点:
- 数据被分割成条带,并分布在多个物理卷上,增加了读写并发能力和性能。
- 更好地利用了磁盘资源,提高了磁盘io
- 适用于对性能要求较高、需要大量并发读写操作的场景。
数据安全性对比
线性逻辑卷和条带逻辑卷在数据安全性上差异显著,主要体现在故障影响范围和数据恢复可能性上。
线性卷在磁盘故障时仍有望恢复部分数据,而条带卷一旦有一块磁盘损坏,则可能导致卷内所有数据的丢失。
| 特性维度 | 线性逻辑卷 (linear logical volume) | 条带逻辑卷 (striped logical volume) |
|---|---|---|
| 基本原理 | 数据按顺序写入磁盘,写满第一个才写入第二个 | 数据被分割成小块(条带),并行写入多个磁盘,类似raid 0 |
| 主要目标 | 方便地聚合多个磁盘的存储空间 | 追求极致i/o性能,通过并行读写提升吞吐量 |
| 数据安全性 | 提供有限的数据恢复可能性 | 灾难性数据丢失风险极高 |
| 故障影响 | 单个磁盘故障,仅损失该磁盘上的数据 | 单个磁盘故障,可能导致整个卷的数据都不可访问或损坏 |
| 数据恢复 | 有机会恢复幸存的、未被损坏的文件 | 几乎所有文件都会丢失,恢复难度极大 |
| 应用场景 | 通用存储、文件服务器(对性能要求不高) | 高性能计算、数据库日志、临时数据(单点故障影响小的场景) |
综上,不过是线性卷还是条带卷都不适合存储对数据安全性要求高的数据,只适合存储一些对容量要求较高,对数据安全性风险要求低或可有可无的数据,如应用日志。
三、lvm操作
硬盘分区
首先,使用fdisk、parted等工具检测系统中的新硬盘,并对其进行分区,根据需要选择合适的分区类型和大小,不分区也可用整块磁盘创建物理卷,所以分区不是必选项,看实际情况而定。
创建物理卷
使用pvcreate命令将新硬盘的分区转换成物理卷(pv)。例如,假设新硬盘的设备路径为/dev/sdc和/dev/sde,执行以下命令将其转换为物理卷:
pvcreate /dev/sdc /dev/sde
创建卷组
使用vgcreate命令将创建好的物理卷处理成卷组(vg)。例如,创建一个名为testvg的卷组,包含/dev/sdc和/dev/sde这两个物理卷:
vgcreate testvg /dev/sdc /dev/sde
创建逻辑卷
使用lvcreate命令将卷组分成若干个逻辑卷(lv)。例如,在myvg卷组上创建一个名为mylv的逻辑卷,大小为10gb:
lvcreate -l 10g -n testlv testvg
格式化逻辑卷
使用mkfs命令对逻辑卷进行格式化,以便存储数据。例如,将testlv逻辑卷格式化为ext4文件系统:
mkfs.ext4 /dev/testvg/testlv
挂载逻辑卷
创建一个目录作为逻辑卷的挂载点,然后使用mount命令将逻辑卷挂载到该目录。例如,将testlv逻辑卷挂载到/testdir目录:
mkdir /testdir echo "/dev/testvg/testlv /testdir ext4 defaults 0 0" >> /etc/fstab mount -a df -h

现在,新硬盘已经成功挂载到linux系统中,并且可以通过lvm进行灵活的管理和扩展。
四、lvm扩容操作
当需要扩展逻辑卷的大小时,可以使用lvextend命令进行扩容。例如,将testlv逻辑卷的大小扩展为20gb:
lvextend -l 20g /dev/testvg/testlv

扩容后,需要更新文件系统的容量以识别新的空间。对于ext2、ext3、ext4文件系统,可以使用resize2fs命令;对于xfs文件系统,可以使用xfs_growfs命令。例如,更新testlv逻辑卷上的ext4文件系统:
resize2fs /dev/testvg/testlv

testlv逻辑卷的大小已经成功扩展为20gb,并且文件系统已经更新了容量。
若lv使用的是xfs文件系统,例如,更新testlv2逻辑卷上的xfs文件系统则执行以下命令进行更新:
xfs_growfs /dev/testvg/testlv2


完成以上步骤后,testlv2逻辑卷的大小已经成功扩展为20gb,并且文件系统已经更新了容量。
五、lvm常用命令
pvdisplay #显示物理卷的属性信息 vgdisplay [卷组名] #显示卷组的属性信息 lvdisplay #查看逻辑卷属性信息 pvs #查看卷组 lvs #查看逻辑卷 pvcreate #创建物理卷 vgcreate 卷组名 物理卷全路径名[物理卷全路径名] #创建卷组 lvcreate #创建逻辑卷 vgrename 原卷组名 新卷组名 #卷组重命名 vgcfgbackup [卷组名] #把卷组中的vgda信息备份到“/etc/lvmconf”目录中的文件 vgcfgrestore -n 卷组名 物理卷全路命名 #从备份文件中必得指定物理卷的信息卷组的建立与删除命令 vgremove 卷组名 #删除卷组 vgextend 卷组名 物理卷全路径名[物理卷全路径名] #将物理卷加入卷组 vgreduce 卷组名 物理卷全路径名[物理卷全路径名] #将物理卷从卷组中移除 lvremove #删除逻辑卷 lvextend -l|--size +逻辑卷大小增量 逻辑卷全路径名 lvreduce q -l|--size +逻辑卷减小量 逻辑卷全路径名 pvremove #移除物理卷 lvscan #扫描逻辑卷 pvmove /dev/sdb /dev/sdd #迁移pv,可以不停机检修
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论