Linux LVM 知识文档

目录

[1. LVM 是什么](#1. LVM 是什么)

[2. LVM 解决的主要问题](#2. LVM 解决的主要问题)

[3. LVM 整体架构](#3. LVM 整体架构)

[4. 核心概念](#4. 核心概念)

[4.1 PV:Physical Volume,物理卷](#4.1 PV:Physical Volume,物理卷)

[4.2 VG:Volume Group,卷组](#4.2 VG:Volume Group,卷组)

[4.3 LV:Logical Volume,逻辑卷](#4.3 LV:Logical Volume,逻辑卷)

[4.4 PE:Physical Extent,物理扩展块](#4.4 PE:Physical Extent,物理扩展块)

[4.5 LE:Logical Extent,逻辑扩展块](#4.5 LE:Logical Extent,逻辑扩展块)

[5. LVM 设备命名](#5. LVM 设备命名)

[6. LVM 基本使用流程](#6. LVM 基本使用流程)

[6.1 创建分区](#6.1 创建分区)

[6.2 创建 PV](#6.2 创建 PV)

[6.3 创建 VG](#6.3 创建 VG)

[6.4 创建 LV](#6.4 创建 LV)

[6.5 格式化](#6.5 格式化)

[6.6 挂载](#6.6 挂载)

[7. LVM 扩容](#7. LVM 扩容)

[7.1 添加新 PV](#7.1 添加新 PV)

[7.2 扩展 VG](#7.2 扩展 VG)

[7.3 扩展 LV](#7.3 扩展 LV)

[7.4 扩展文件系统](#7.4 扩展文件系统)

[8. LVM 缩容](#8. LVM 缩容)

[9. LVM 删除流程](#9. LVM 删除流程)

[10. 常用查看命令](#10. 常用查看命令)

[10.1 查看 PV](#10.1 查看 PV)

[10.2 查看 VG](#10.2 查看 VG)

[10.3 查看 LV](#10.3 查看 LV)

[10.4 查看块设备](#10.4 查看块设备)

[10.5 查看 device-mapper 设备](#10.5 查看 device-mapper 设备)

[11. LVM 工作原理简述](#11. LVM 工作原理简述)

[12. LVM 写入模式](#12. LVM 写入模式)

[12.1 线性模式](#12.1 线性模式)

[12.2 条带模式](#12.2 条带模式)

[13. LVM 高级特性](#13. LVM 高级特性)

[13.1 快照 Snapshot](#13.1 快照 Snapshot)

[13.2 Thin Provisioning,精简配置](#13.2 Thin Provisioning,精简配置)

[13.3 数据迁移](#13.3 数据迁移)

[13.4 缓存加速](#13.4 缓存加速)

[13.5 镜像与 RAID](#13.5 镜像与 RAID)

[14. LVM 优点](#14. LVM 优点)

[15. LVM 缺点与风险](#15. LVM 缺点与风险)

[16. 常见运维场景](#16. 常见运维场景)

[16.1 /var/lib/docker 空间不足](#16.1 /var/lib/docker 空间不足)

[16.2 日志目录写满](#16.2 日志目录写满)

[16.3 新增磁盘扩容 VG](#16.3 新增磁盘扩容 VG)

[17. 常用命令速查表](#17. 常用命令速查表)

[18. 生产最佳实践](#18. 生产最佳实践)

[19. 一份最小实践示例](#19. 一份最小实践示例)

[20. 总结](#20. 总结)



1. LVM 是什么

LVM 全称 Logical Volume Manager,即逻辑卷管理,是 Linux 下对磁盘分区进行管理的一种机制。

它在物理磁盘和文件系统之间增加一个逻辑抽象层,使文件系统不再直接受限于物理磁盘或分区的大小,从而提升磁盘空间管理的灵活性。

传统磁盘分区的大小在创建时基本固定,后续调整代价较高;LVM 可以动态扩缩容、跨磁盘聚合空间,并支持快照等能力。


2. LVM 解决的主要问题

LVM 主要解决传统分区方案的几个痛点:

  1. 分区大小固定,扩容困难
    传统分区扩容通常需要停机、备份、删除分区、重建分区、恢复数据。
  2. 单个分区无法跨物理磁盘
    多块磁盘无法直接合并成一个连续的大分区。
  3. 磁盘空间利用率低
    为了避免后续扩容,管理员可能预留大量空间,导致浪费。
  4. 业务需要动态存储
    数据库、容器、日志目录等场景经常需要在线扩容。

3. LVM 整体架构

LVM 的典型结构如下:

复制代码
文件系统 ext4 / xfs
        ↑
逻辑卷 LV
        ↑
卷组 VG
        ↑
物理卷 PV
        ↑
物理磁盘 / 分区

也可以理解为:

复制代码
/dev/sdb1、/dev/sdc1
        ↓
       PV
        ↓
       VG
        ↓
       LV
        ↓
     挂载使用

LVM 通过 PV、VG、LV 三层抽象管理存储空间。


4. 核心概念

4.1 PV:Physical Volume,物理卷

PV 是 LVM 的最底层抽象。

它可以是:

复制代码
整块磁盘
磁盘分区
RAID 设备
Loopback 设备

例如:

复制代码
/dev/sdb
/dev/sdb1

初始化 PV 后,LVM 会在设备上写入标签和元数据信息。

常用命令:

复制代码
pvcreate /dev/sdb1
pvs
pvdisplay

4.2 VG:Volume Group,卷组

VG 是由一个或多个 PV 组成的存储池。

它把多个物理卷的空间合并成一个统一的逻辑磁盘池,然后再从 VG 中划分 LV。

例如:

复制代码
vgcreate datavg /dev/sdb1 /dev/sdc1

表示把 /dev/sdb1/dev/sdc1 合并成名为 datavg 的卷组。

常用命令:

复制代码
vgcreate datavg /dev/sdb1
vgextend datavg /dev/sdc1
vgs
vgdisplay

4.3 LV:Logical Volume,逻辑卷

LV 是从 VG 中划分出来的逻辑空间,类似传统分区。

LV 可以格式化并挂载使用:

复制代码
lvcreate -L 100G -n appdata datavg
mkfs.ext4 /dev/datavg/appdata
mount /dev/datavg/appdata /data

常用命令:

复制代码
lvcreate
lvextend
lvreduce
lvremove
lvs
lvdisplay

4.4 PE:Physical Extent,物理扩展块

PE 是 PV 中可用于分配的最小存储单元。

默认大小通常是:

复制代码
4 MB

可以在创建 VG 时指定 PE 大小。


4.5 LE:Logical Extent,逻辑扩展块

LE 是 LV 中的最小存储单元。

LE 和 PE 之间存在映射关系。LVM 通过 PE 到 LE 的映射来管理数据写入位置。


5. LVM 设备命名

LVM 逻辑卷常见路径有两种:

复制代码
/dev/VG名/LV名
/dev/mapper/VG名-LV名

例如:

复制代码
/dev/vg_apsara_paas/paasdata
/dev/mapper/vg_apsara_paas-paasdata

其中:

复制代码
vg_apsara_paas 是 VG 名
paasdata 是 LV 名

lsblk 中看到的:

复制代码
vg_apsara_paas-paasdata

通常是 device-mapper 设备名,格式为:

复制代码
VG名-LV名

6. LVM 基本使用流程

一个典型的 LVM 创建流程如下:

复制代码
磁盘分区
  ↓
修改分区类型为 LVM
  ↓
创建 PV
  ↓
创建 VG
  ↓
创建 LV
  ↓
格式化文件系统
  ↓
挂载使用

6.1 创建分区

可以使用:

复制代码
fdisk /dev/sdb

或:

复制代码
parted /dev/sdb

如果使用 MBR 分区表,通常需要将分区类型修改为 Linux LVM,类型 ID 常为 8e


6.2 创建 PV

复制代码
pvcreate /dev/sdb1

查看:

复制代码
pvs
pvdisplay

6.3 创建 VG

复制代码
vgcreate datavg /dev/sdb1

查看:

复制代码
vgs
vgdisplay

6.4 创建 LV

创建 100G 的逻辑卷:

复制代码
lvcreate -L 100G -n appdata datavg

使用 VG 全部剩余空间:

复制代码
lvcreate -l 100%FREE -n appdata datavg

查看:

复制代码
lvs
lvdisplay

6.5 格式化

ext4:

复制代码
mkfs.ext4 /dev/datavg/appdata

XFS:

复制代码
mkfs.xfs /dev/datavg/appdata

6.6 挂载

复制代码
mkdir /data
mount /dev/datavg/appdata /data

查看挂载:

复制代码
df -h
mount | grep appdata

7. LVM 扩容

LVM 扩容通常分为三步:

复制代码
扩展 VG
扩展 LV
扩展文件系统

7.1 添加新 PV

复制代码
pvcreate /dev/sdc1

7.2 扩展 VG

复制代码
vgextend datavg /dev/sdc1

7.3 扩展 LV

增加 50G:

复制代码
lvextend -L +50G /dev/datavg/appdata

使用 VG 所有剩余空间:

复制代码
lvextend -l +100%FREE /dev/datavg/appdata

7.4 扩展文件系统

如果是 ext4:

复制代码
resize2fs /dev/datavg/appdata

如果是 XFS:

复制代码
xfs_growfs /data

XFS 文件系统扩容时使用挂载点,而不是设备名。


8. LVM 缩容

LVM 缩容风险较高,生产环境建议谨慎操作。

一般流程:

复制代码
卸载文件系统
检查文件系统
缩小文件系统
缩小 LV

例如 ext4:

复制代码
umount /data
e2fsck -f /dev/datavg/appdata
resize2fs /dev/datavg/appdata 50G
lvreduce -L 50G /dev/datavg/appdata
mount /data

注意:

复制代码
XFS 通常不支持在线或离线缩容。

如果要缩小 XFS,通常需要备份数据、删除 LV、重建 LV、恢复数据。


9. LVM 删除流程

删除 LVM 一般按照相反顺序进行:

复制代码
卸载 LV
删除 LV
删除 VG
删除 PV

示例:

复制代码
umount /data
lvremove /dev/datavg/appdata
vgremove datavg
pvremove /dev/sdb1

如果 VG 中还有 LV,需要先删除 LV。


10. 常用查看命令

10.1 查看 PV

复制代码
pvs
pvdisplay

输出示例:

复制代码
PV         VG      Fmt  Attr PSize  PFree
/dev/sdb1  datavg  lvm2 a--  100.00g 20.00g

10.2 查看 VG

复制代码
vgs
vgdisplay

输出示例:

复制代码
VG      #PV #LV #SN Attr   VSize  VFree
datavg    1   1   0 wz--n- 100.00g 20.00g

字段含义:

|-------|---------|
| 字段 | 含义 |
| VG | 卷组名 |
| #PV | PV 数量 |
| #LV | LV 数量 |
| #SN | 快照数量 |
| VSize | VG 总大小 |
| VFree | VG 剩余空间 |


10.3 查看 LV

复制代码
lvs
lvdisplay

输出示例:

复制代码
LV      VG      Attr       LSize
appdata datavg -wi-ao---- 80.00g

常见属性含义:

|----|--------------|
| 属性 | 含义 |
| w | 可写 |
| a | active,已激活 |
| o | open,已打开或已挂载 |


10.4 查看块设备

复制代码
lsblk

查看 LVM 相关设备:

复制代码
lsblk | grep datavg

10.5 查看 device-mapper 设备

复制代码
dmsetup ls

查看映射关系:

复制代码
ls -l /dev/mapper/

11. LVM 工作原理简述

LVM 在每个 PV 头部维护元数据,其中包括 VG 布局、PV 信息、LV 信息以及 PE 到 LE 的映射关系。

当上层文件系统写入 LV 时,LVM 会根据映射关系把数据写入对应的 PE。

这种映射机制使 LVM 可以动态调整逻辑卷大小,而不必直接移动整个分区。


12. LVM 写入模式

LVM 常见写入模式包括:

12.1 线性模式

数据先写满一个 PV,再写下一个 PV。

这是默认模式。

优点:

复制代码
结构相对简单
单个 PV 故障时,其他 PV 上的数据仍可能保留

12.2 条带模式

数据分散写入多个 PV,类似 RAID 0。

优点:

复制代码
可能提升顺序读写性能

缺点:

复制代码
可靠性较低
任一成员设备故障都可能导致数据不可用

13. LVM 高级特性

13.1 快照 Snapshot

LVM 支持基于写时复制 Copy-on-Write 的快照机制,可以快速创建一致性副本。

常用于:

复制代码
备份
测试环境克隆
数据回滚

示例:

复制代码
lvcreate -s -L 10G -n appdata_snap /dev/datavg/appdata

13.2 Thin Provisioning,精简配置

LVM 支持精简配置,允许逻辑卷的名义容量超过实际物理容量,按需分配空间。

适用于:

复制代码
虚拟机磁盘
容器存储
多租户环境

13.3 数据迁移

可以使用 pvmove 在线将数据从一个 PV 迁移到另一个 PV。

示例:

复制代码
pvmove /dev/sdb1 /dev/sdc1

迁移完成后可从 VG 中移除旧 PV:

复制代码
vgreduce datavg /dev/sdb1

13.4 缓存加速

LVM 可以使用 SSD 作为 HDD 的缓存层,加速热点数据访问。


13.5 镜像与 RAID

LVM 支持镜像等方式提高数据冗余能力。

常见用途:

复制代码
关键数据冗余
提高可用性

14. LVM 优点

LVM 的主要优点包括:

  1. 动态扩容
    可以在系统运行状态下扩展逻辑卷和文件系统。
  2. 跨磁盘聚合
    多块磁盘可以合并成一个大存储池。
  3. 灵活分配
    可按需创建不同大小的 LV。
  4. 便于迁移
    可通过 pvmove 迁移底层磁盘数据。
  5. 支持快照
    适合备份和测试。
  6. 提高磁盘利用率
    避免传统分区预留空间造成的浪费。

15. LVM 缺点与风险

LVM 虽然灵活,但也有注意事项:

  1. 增加抽象层
    故障排查比传统分区更复杂。
  2. 缩容风险高
    尤其是 XFS 通常不支持缩容。
  3. 元数据损坏影响较大
    PV/VG/LVM metadata 损坏可能导致 LV 无法识别。
  4. 条带模式可靠性较低
    类似 RAID 0,没有冗余。
  5. 生产操作需谨慎
    扩容相对安全,缩容和删除操作建议先备份。

16. 常见运维场景

16.1 /var/lib/docker 空间不足

查看挂载:

复制代码
df -h /var/lib/docker

查看 LV:

复制代码
lvs

扩容 LV:

复制代码
lvextend -L +100G /dev/vg_apsara_paas/paasdata

扩展文件系统:

ext4:

复制代码
resize2fs /dev/vg_apsara_paas/paasdata

XFS:

复制代码
xfs_growfs /var/lib/docker

16.2 日志目录写满

可以将日志目录单独挂载到独立 LV,例如:

复制代码
/var/lib/docker/logs

这样可以避免日志占满主数据盘。


16.3 新增磁盘扩容 VG

复制代码
pvcreate /dev/sdc1
vgextend vg_apsara_paas /dev/sdc1
lvextend -l +100%FREE /dev/vg_apsara_paas/paasdata
resize2fs /dev/vg_apsara_paas/paasdata

如果是 XFS:

复制代码
xfs_growfs /var/lib/docker

17. 常用命令速查表

|---------|----------------------------------------|
| 操作 | 命令 |
| 创建 PV | pvcreate /dev/sdb1 |
| 查看 PV | pvs / pvdisplay |
| 创建 VG | vgcreate datavg /dev/sdb1 |
| 查看 VG | vgs / vgdisplay |
| 扩展 VG | vgextend datavg /dev/sdc1 |
| 创建 LV | lvcreate -L 100G -n appdata datavg |
| 查看 LV | lvs / lvdisplay |
| 扩展 LV | lvextend -L +50G /dev/datavg/appdata |
| 扩展 ext4 | resize2fs /dev/datavg/appdata |
| 扩展 XFS | xfs_growfs /挂载点 |
| 删除 LV | lvremove /dev/datavg/appdata |
| 删除 VG | vgremove datavg |
| 删除 PV | pvremove /dev/sdb1 |
| 查看块设备 | lsblk |
| 查看映射 | dmsetup ls |


18. 生产最佳实践

  1. 重要操作前备份数据

    rsync -avh /data/ /backup/data/

  2. 优先使用扩容,谨慎缩容

  3. 日志目录和数据目录分离

    /data
    /logs

  4. VG 预留一定空闲空间
    便于后续扩容和快照使用。

  5. 使用稳定设备名
    生产环境建议使用:

    /dev/mapper/VG-LV
    UUID

  6. fstab 中建议使用 UUID

    blkid

  7. 定期检查 LVM 状态

    pvs
    vgs
    lvs
    df -h

  8. 不要随意执行 pvremove vgremove lvremove


19. 一份最小实践示例

假设新增磁盘 /dev/sdb,需要创建 LVM 并挂载到 /data

复制代码
pvcreate /dev/sdb1
vgcreate datavg /dev/sdb1
lvcreate -l 100%FREE -n appdata datavg
mkfs.ext4 /dev/datavg/appdata
mkdir /data
mount /dev/datavg/appdata /data
df -h /data

写入开机挂载:

复制代码
blkid /dev/datavg/appdata

编辑:

复制代码
vi /etc/fstab

示例:

复制代码
UUID=xxxx-xxxx  /data  ext4  defaults  0 0

20. 总结

LVM 的核心价值是把物理磁盘抽象成可动态管理的存储池。

最核心的三个对象是:

复制代码
PV:物理卷
VG:卷组
LV:逻辑卷

最常见的使用路径是:

复制代码
pvcreate → vgcreate → lvcreate → mkfs → mount

最常见的运维操作是:

复制代码
vgextend → lvextend → resize2fs / xfs_growfs

对于生产环境,LVM 扩容通常比较安全,但缩容、删除、迁移等操作需要谨慎,建议操作前确认文件系统类型、挂载状态和数据备份。

相关推荐
小小的木头人2 小时前
Ubuntu 使用 udev + systemd + UUID 实现 USB 硬盘自动挂载
linux·运维·ubuntu
布鲁飞丝3 小时前
彩笔运维勇闯机器学习--cpu与qps的线性关系
运维·人工智能·机器学习
kaoa0003 小时前
Linux入门攻坚——84、网络虚拟化技术-1
linux·运维·服务器
RisunJan3 小时前
Linux命令-shutdown(安全关闭或重启系统)
linux·服务器·安全
2601_965798474 小时前
MTDb Movie & TV Database Script Setup, Caching, and SEO Guide
linux·服务器·数据库·php
我头发多我先学4 小时前
linux系统编程:初识进程
linux·运维·服务器
Freak嵌入式5 小时前
版本混乱 / 依赖缺失?uPyPi:MicroPython 版 PyPI,彻底解决库管理混乱
linux·服务器·数据库·单片机·嵌入式硬件·性能优化·依赖倒置原则
云飞云共享云桌面5 小时前
SolidWorks—天津智能装备工厂1台高配主机共享给10个研发用
运维·服务器·自动化·汽车·制造
苍狗T5 小时前
LVS相关知识总结
linux·运维·服务器·lvs