Linux LVM逻辑卷管理完全指南:从基础概念到实战操作
Linux LVM 逻辑卷管理完全指南:从基础概念到实战操作
前言
在 Linux 系统运维中,传统的磁盘分区方案虽然简单直接,但在容量弹性、跨盘管理、数据冗余等方面存在明显短板。LVM(Logical Volume Manager,逻辑卷管理器)作为 Linux 原生的存储管理层,能够在物理磁盘之上构建抽象的逻辑存储层,实现存储空间的动态伸缩、跨盘整合、快照备份等高级能力,是生产环境中磁盘管理的主流方案。
本文将从传统分区的痛点出发,系统讲解 LVM 的核心概念、基础管理操作、卷组与逻辑卷的扩缩容、文件系统适配,以及快照、RAID 逻辑卷等高级用法,覆盖日常运维中绝大多数 LVM 使用场景。
一、为什么选择 LVM 逻辑卷管理
1.1 传统硬盘分区方案的缺点
传统的 MBR/GPT 分区方案直接在物理磁盘上划分固定大小的分区,存在三个核心痛点:
扩容困难:分区必须使用连续的磁盘空间,若分区后方无剩余空间,无法直接扩容,只能备份数据后重新分区。
容量受限:单个文件系统只能建立在单个分区 / 磁盘上,无法跨越多个物理磁盘,受单盘容量上限约束。
数据风险高:单块物理磁盘损坏时,该盘上的所有分区数据都会丢失,无原生冗余能力。
1.2 LVM 逻辑卷方案的优势
LVM 在物理磁盘与文件系统之间增加了一层逻辑抽象,彻底解决了传统分区的痛点:
弹性伸缩:可以在线扩展或缩减逻辑卷的容量,无需停机重建分区,适配业务容量变化。
跨盘整合:可以将多块物理磁盘的空间整合到同一个卷组中,构建远超单盘容量的逻辑卷。
数据冗余:支持创建镜像类型的逻辑卷,单块磁盘损坏时数据不会丢失,保障业务连续性。
快照备份:支持创建逻辑卷快照,快速保存某一时刻的数据状态,可用于数据备份、版本回滚。
二、LVM 核心概念
LVM 采用分层的存储架构,从下到上依次为物理卷、卷组、逻辑卷,核心概念如下:
| 概念 | 全称 | 说明 |
|---|---|---|
| PV | Physical Volume,物理卷 | LVM 的底层存储单元,由物理磁盘、磁盘分区或 RAID 设备转换而来,包含 LVM 管理元数据 |
| VG | Volume Group,卷组 | 由一个或多个 PV 组成的逻辑存储池,是 LVM 的中间管理层,所有存储空间统一管理 |
| LV | Logical Volume,逻辑卷 | 从 VG 中划分出的逻辑存储空间,类比传统分区,可在其上创建文件系统并挂载使用 |
| PE | Physical Extent,物理块 | PV 中的最小存储单元,默认 4MB,是 VG 中存储空间分配的最小单位 |
| LE | Logical Extent,逻辑块 | LV 中的最小存储单元,与 PE 一一对应,大小一致 |
简单类比:PV 是砖块,VG 是用砖块砌成的整面墙,LV 是从墙上隔出来的房间。我们可以随时加砖块扩建墙体,也可以调整房间的大小,不需要拆墙重建。
三、LVM 基础管理流程
LVM 的标准创建流程为:创建物理卷 (PV) → 创建卷组 (VG) → 创建逻辑卷 (LV) → 格式化文件系统 → 挂载使用。
3.1 创建物理卷(PV)
将块设备(磁盘 / 分区)初始化为 LVM 物理卷,支持单个或批量创建。
# 创建单个PVpvcreate /dev/sdb# 批量创建多个PVpvcreate /dev/sdc /dev/sdd查看物理卷信息:
# 简要列表pvs# 查看单个PV详细信息pvdisplay /dev/sdb输出示例:
PV Name /dev/sdb VG Name PV Size 20.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID MBHW0w-OkJL-CasO-PYRR-sduS-U2m5-zdkQ5d3.2 创建卷组(VG)
将一个或多个 PV 组合成卷组,形成统一的存储资源池。
# 单PV创建VGvgcreate webapp /dev/sdb# 多PV创建VGvgcreate dbapp /dev/sdc /dev/sdd查看卷组信息:
# 简要列表vgs# 查看单个VG详细信息vgdisplay dbapp创建 VG 时可通过
-s参数指定 PE 大小,默认 4MB,大存储场景可适当调大以减少元数据开销。
3.3 创建逻辑卷(LV)
从卷组中划分指定大小的逻辑卷,用于后续创建文件系统。
# 创建指定大小的LV:-n 指定名称,-L 指定容量lvcreate-nwebapp01-L5G webapp# 创建跨多盘的LV:只要VG容量足够,自动跨PV分配空间lvcreate-ndata01-L25G dbapp查看逻辑卷信息:
# 简要列表lvs# 查看单个LV详细信息lvdisplay /dev/dbapp/data013.4 逻辑卷的设备路径
LVM 逻辑卷在系统中有三种等价的设备路径,日常使用推荐前两种:
/dev/卷组名/逻辑卷名:如/dev/webapp/webapp01,最直观易读/dev/mapper/卷组名-逻辑卷名:如/dev/mapper/webapp-webapp01,系统内部映射路径/dev/dm-N:设备映射编号,不固定,不建议在配置中使用
可通过以下命令验证路径关系:
ls-l/dev/dbapp/data01 /dev/mapper/dbapp-data013.5 格式化与挂载
逻辑卷创建完成后,即可像普通分区一样格式化文件系统并挂载。
# 格式化为XFS文件系统mkfs.xfs /dev/webapp/webapp01# 创建挂载点并挂载mkdir-p/usr/share/nginx/htmlmount/dev/webapp/webapp01 /usr/share/nginx/html# 验证挂载df-h/usr/share/nginx/html生产环境建议将挂载配置写入
/etc/fstab实现开机自动挂载,推荐使用 UUID 以避免盘符漂移问题。
四、LVM 清理流程
清理 LVM 遵循逆向操作原则:卸载文件系统 → 删除 LV → 删除 VG → 删除 PV。
# 1. 卸载文件系统umount/dev/webapp/webapp01# 2. 删除逻辑卷lvremove /dev/webapp/webapp01 /dev/dbapp/data01# 交互时输入 y 确认删除# 3. 删除卷组vgremove webapp dbapp# 4. 删除物理卷,清除LVM元数据pvremove /dev/sdb /dev/sdc /dev/sdd五、卷组的扩展与缩减
卷组作为存储池,支持动态加入新磁盘扩容,也可以剔除闲置磁盘缩容。
5.1 扩展卷组(增加容量)
当卷组剩余空间不足时,添加新的物理卷即可完成扩容。
# 将新磁盘加入指定VG,vgcreate会自动将设备初始化为PVvgextend webapp /dev/sdc /dev/sdd# 验证VG容量变化vgs webapp5.2 缩减卷组(移除 PV)
从卷组中移除物理卷前,必须先将该 PV 上的数据迁移到同 VG 的其他空闲 PV 上,否则会报错。
查看 PV 使用状态
pvs迁移 PV 上的数据
# 将/dev/sdb上的数据迁移到同VG的其他空闲PVpvmove /dev/sdb# 也可以指定目标PVpvmove /dev/sdb /dev/sdd从 VG 中剔除空闲 PV
vgreduce webapp /dev/sdb# 验证结果pvs
注意:被移除的 PV 必须处于完全空闲状态,且 VG 剩余空间需足够容纳该 PV 上的所有数据。
六、逻辑卷与文件系统的扩缩容
逻辑卷的容量调整需要配合文件系统一起操作,不同文件系统的支持能力不同。
6.1 扩展逻辑卷
卷组有空闲空间时,可直接扩展逻辑卷容量。
# 增加指定大小:+2G 表示在原有基础上增加2GBlvextend-L+2G /dev/webapp/webapp01# 直接指定最终大小lvextend-L15G /dev/webapp/webapp016.2 缩减逻辑卷
缩减逻辑卷有数据丢失风险,操作前务必确认文件系统已缩减到目标容量以下。
# 缩减指定大小:-2G 表示在原有基础上减少2GBlvreduce-L-2G/dev/webapp/webapp01# 直接指定最终大小lvreduce-L10G /dev/webapp/webapp016.3 XFS 文件系统扩容
XFS 文件系统只支持在线扩展,不支持缩减,是生产环境的主流选择。
# 1. 先扩展逻辑卷lvextend-L15G /dev/webapp/webapp01# 2. 在线扩展XFS文件系统,参数为挂载点xfs_growfs /usr/share/nginx/html# 验证df-h/usr/share/nginx/html便捷操作:
lvextend -r可一步完成逻辑卷 + 文件系统的同步扩容lvextend-rL20G /dev/webapp/webapp01
6.4 EXT4 文件系统扩容
EXT4 支持在线扩展,无需卸载。
# 1. 扩展逻辑卷lvextend-L25G /dev/webapp/webapp01# 2. 扩展EXT4文件系统,参数为设备路径resize2fs /dev/webapp/webapp01同样支持一步扩容:
lvextend-rL30G /dev/webapp/webapp016.5 EXT4 文件系统缩减
EXT4 支持缩减,但必须卸载文件系统离线操作,且缩减后的容量不能小于已使用空间。
标准操作步骤:
# 1. 卸载文件系统umount/usr/share/nginx/html# 2. 强制检测文件系统完整性(必须步骤)e2fsck-f/dev/webapp/webapp01# 3. 缩减文件系统到目标大小resize2fs /dev/webapp/webapp01 10G# 4. 缩减逻辑卷到对应大小lvreduce-L10G /dev/webapp/webapp01# 5. 重新挂载并验证mount/dev/webapp/webapp01 /usr/share/nginx/htmldf-h/usr/share/nginx/html注意:先缩文件系统,再缩逻辑卷,顺序不能颠倒,否则会导致文件系统损坏。
七、LVM 快照
LVM 快照是一种轻量级的数据备份机制,它可以保存逻辑卷某一时刻的数据状态,创建后可挂载读取,常用于数据备份、回滚、测试等场景。
7.1 创建快照
快照本身也是一个逻辑卷,容量建议不小于源 LV 的变化数据量。
# -s 表示创建快照,-n 指定快照名称,-L 指定快照大小lvcreate-s-nwebapp01-snap1-L10G /dev/webapp/webapp017.2 挂载与使用快照
快照可以像普通逻辑卷一样挂载读取,查看创建时刻的数据。
mkdir-p/webapp/webapp01-snapmount/dev/webapp/webapp01-snap1 /webapp/webapp01-snap# 查看快照中的数据ls/webapp/webapp01-snap快照是写时复制(COW)机制:源 LV 数据变化时,才会将旧数据复制到快照卷中。因此快照占用空间随源数据变化而增长,空间耗尽后快照会失效。
八、LVM RAID 逻辑卷
LVM 原生支持 RAID 类型的逻辑卷,无需额外硬件 RAID 卡,即可实现数据冗余。常用的有 RAID1、RAID5 等。
8.1 创建 RAID1 逻辑卷
RAID1 为镜像模式,数据双写,单盘损坏不丢失数据。
# 创建RAID1类型的LV,VG中至少需要2个PVlvcreate--typeraid1-nwebapp01-L15G webapp# 格式化并挂载mkfs.xfs /dev/webapp/webapp01mount/dev/webapp/webapp01 /usr/share/nginx/html8.2 模拟磁盘故障与修复
# 模拟磁盘损坏:覆写磁盘元数据ddif=/dev/zeroof=/dev/sddbs=1Mcount=256# 此时文件系统仍可正常访问ls/usr/share/nginx/html修复步骤:
# 1. 从VG中移除故障磁盘vgreduce--removemissingwebapp--force# 2. 加入新的替换磁盘vgextend webapp /dev/sdd# 3. 修复RAID逻辑卷,触发数据同步lvconvert--repair/dev/webapp/webapp01# 4. 扫描物理卷状态pvscan# 5. 验证修复结果pvs|grepwebapp8.3 创建 RAID5 逻辑卷
RAID5 采用分布式奇偶校验,兼顾性能与冗余,适合大容量存储。
# -i 3 指定条带数,-I 64 指定条带大小64KB# 共需4块设备:3块数据盘+1块校验盘,可用容量为3块盘的大小lvcreate--typeraid5-L5G-i3-I64-nmylv vg00九、总结
LVM 是 Linux 系统中极具灵活性的磁盘管理方案,核心价值与使用要点可归纳为:
分层抽象:PV→VG→LV 三层架构,解耦物理存储与逻辑使用,实现容量弹性管理。
动态扩容:支持在线扩展卷组与逻辑卷,配合 XFS 可实现业务无感知扩容。
文件系统适配:XFS 只扩不缩,适合绝大多数生产场景;EXT4 支持缩容但需离线操作。
高级特性:快照适合快速备份回滚,LVM RAID 可实现软冗余,替代低端硬件 RAID 卡。
操作原则:缩容操作风险高,务必先备份数据;所有容量调整遵循 “先文件系统,后逻辑卷” 的顺序。
