1、LVM(Logical Volume Manager/Management)是一种 Linux 下的“逻辑卷管理”技术:
它把磁盘从“固定的一块块分区”升级成“可组合、可扩展的存储池”。
你可以把它理解成磁盘的虚拟化层(在硬盘/分区和文件系统之间加一层)。

2、LVM它解决了什么痛点?
传统分区(比如直接把 XFS 做在 /dev/sdc1 上)最大的问题是:
想扩容时,只能靠同一块盘变大(云盘原地扩容),或者重新迁移
新加一块盘 /dev/sdd,没法直接“贴”到 /dev/sdc1 上

LVM 就是为了解决这个:把多块盘的容量合并成一个“可伸缩”的逻辑盘。

3、LVM 的核心概念(你已经在现场用过)
你这次做的就是典型 LVM 三层结构:
3.1、 PV(Physical Volume,物理卷)
把磁盘/分区“初始化成 LVM 可用的砖头”

例:/dev/sdc1、/dev/sdd1
命令:pvcreate /dev/sdc1

3.2、 VG(Volume Group,卷组)
把多个 PV 组成一个“容量池/资源池”

例:vg_dbbackup(800G 的池子)
命令:vgcreate vg_dbbackup /dev/sdc1 /dev/sdd1

3.3、LV(Logical Volume,逻辑卷)
从 VG 里切出一个“逻辑硬盘”,给文件系统去格式化、挂载

例:/dev/vg_dbbackup/lv_dbbackup
命令:lvcreate -n lv_dbbackup -l 100%FREE vg_dbbackup

然后你在 LV 上做了 XFS 并挂载到 /dbbackup。

4、为什么它能“无感扩容”?
因为对文件系统来说,它只认一块“盘”——这个 LV:

之前:/dev/vg_dbbackup/lv_dbbackup 是 800G
以后:你再加盘,lvextend 让 同一个 LV 变成 1200G、1600G…

LV 设备名不变、挂载点 /dbbackup 不变,业务路径不变。
你只需要再执行一次文件系统扩容(XFS 就是 xfs_growfs),空间就变大。

5、它跟 RAID 有啥区别?
RAID 更像“底层硬件/阵列的冗余和性能方案”(可以做容错、条带、镜像)
LVM 更像“容量管理和灵活切分/扩展方案”(灵活、可扩、可做快照)
它们可以叠加:先 RAID 再 LVM(企业里很常见)。

6、前期就用 LVM,后期扩容为什么省心?
因为 LVM 把多块盘抽象成一个“容量池”,文件系统只看到一个 LV:
/dev/vg_dbbackup/lv_dbbackup(逻辑硬盘)

以后加盘扩容只需要两步:

LVM 把 LV 变大
pvcreate → vgextend → lvextend

XFS 吃掉新空间
xfs_growfs /dbbackup

✅ 挂载点不变:还是 /dbbackup
✅ 路径不变:脚本不用改
✅ 业务感知极低:基本就是几条命令
✅ 可重复:每次扩容都是同一套 SOP

适用于:
VMware / KVM / 云主机 / 物理机
适用于 / /var /home /data /u01 /backup 等所有 LVM 目录

扩容逻辑完全不看厂商,只认内核。

层级 你依赖的是什么 是否平台无关
VMware / KVM / 云 只是“给你一块新盘”
Linux 内核 LVM2
文件系统 xfs / ext4
挂载点 /var /data /u01 等

为什么任何目录都适用?

因为你扩的不是“目录”,你扩的是它背后的 LV(逻辑卷)

目录
  ↓
文件系统 FS
  ↓
逻辑卷 LV   ←← 你真正操作的对象
  ↓
卷组 VG
  ↓
物理卷 PV

只要它满足:

  1. ✔ df -h 显示的是 /dev/vg_xxx/lv_xxx
  2. ✔ FS 是 xfs / ext4
  3. ✔ 没用 raw disk / loop / docker volume

一、必须先看懂的底层概念(扩容的“世界观”)

1. LVM 是什么?

LVM(Logical Volume Manager)= 逻辑卷管理器

它是 Linux 的“虚拟磁盘调度中心”,Linux 的虚拟磁盘调度系统,用于把多块物理磁盘整合为一个可动态扩展的存储池。

让系统从:

一盘一分区一挂载点
升级为
多盘组成一个容量池 → 任意目录可在线生长。

2. LVM 三层结构说明

Physical Disk → PV → VG → LV → Mount Point
物理硬盘        物理卷   卷组   逻辑卷   挂载目录
缩写 英文全称 中文 说明
PV Physical Volume 物理卷 把真实磁盘注册为 LVM 资源
VG Volume Group 卷组 多块磁盘组成的“容量仓库”
LV Logical Volume 逻辑卷 从 VG 中划给系统使用的虚拟硬盘
FS File System 文件系统 xfs / ext4 等
MP Mount Point 挂载点 / /var /data 等

二、VMware 平台插新盘(详细版)

所有 Linux 扩容的第一步,都是:平台侧插新盘

1️⃣ 登录 vCenter / ESXi 管理端

2️⃣ 找到目标虚拟机

右键 → Edit Settings(编辑设置)

3️⃣ 点击 Add New Device(添加新设备) → Hard Disk(硬盘)

4️⃣ 设置磁盘容量(建议 ≥50G 或 100G)

5️⃣ 选择磁盘类型
Provisioning:Thin
Mode:Independent-Persistent

英文项 (Item) 中文说明 建议配置值 说明
Provisioning 磁盘分配方式 Thin(精简置备) 按需占用存储,节省存储池空间
Mode 磁盘模式 Independent-Persistent(独立-永久) 不参与快照,避免快照膨胀风险
Controller 控制器 SCSI Controller 0 保证性能与兼容性最佳
Capacity 容量 ≥50G / 100G 便于后续二次扩容复用

6️⃣ 点击 OK(确定) 完成插盘

(支持热插盘,无需重启)

三、Linux 侧统一扩容流程(任何目录通用)

Step 1:查看哪个目录空间不足

df -h

Step 2:确认该目录属于哪个 LV(逻辑卷)

  • df:disk filesystem,显示文件系统磁盘使用情况

  • -h:human-readable,把容量用 K、M、G 等人类可读的形式显示

  • -T:显示 文件系统类型(ext4、xfs、tmpfs 等)

df -hT /data

示例输出:
/dev/vg_data/lv_data   xfs   /data

Step 3:确认新磁盘设备

lsblk全称是 list block devices,意思是“列出块设备”。

lsblk

示例:
sdc   100G

Step 4:对新盘分区并标记为 LVM

  • fdisk:fixed disk 的意思,用来查看或修改 磁盘分区表

  • /dev/sdc:目标硬盘设备,这里指第三块硬盘

fdisk /dev/sdc

依次输入:
n → p → 1 → Enter → Enter → t → 8e → w

n        # 创建新分区

p        # 主分区(primary)

1        # 分区号为1(此为数字1)

回车     # 起始扇区(默认即可)

回车     # 结束扇区(使用全部可用空间)

t        # 修改分区类型

8e       # LVM 类型(8e 是 LVM 的类型 ID)

w        # 保存并写入分区表

Step 5:初始化为 PV(Physical Volume 物理卷)

  • pvcreate:创建 LVM 物理卷

  • /dev/sdc1:目标分区(注意,是 分区,不是整块硬盘)

pvcreate /dev/sdc1

Step 6:加入 VG(Volume Group 卷组)

  • vgextend:扩展卷组

  • vg_data:你要扩展的卷组名称

  • /dev/sdc1:你之前用 pvcreate 初始化的物理卷

vgextend vg_data /dev/sdc1

Step 7:扩对应的 LV(Logical Volume 逻辑卷)

lvextend [参数] 逻辑卷路径

日常常用:lvextend -L +30G -r /dev/vg_data/lv_data
= 自动判断 FS 类型
= 自动 resize
= 原子级完成

举例:
1️⃣ 安全标准扩 30G
lvextend -L +30G /dev/vg_data/lv_data
2️⃣ 仓库清仓式扩满
lvextend -l +100%FREE /dev/vg_data/lv_data
3️⃣ 扩并自动扩文件系统(xfs/ext4)
lvextend -L +30G -r /dev/vg_data/lv_data
(-r = resizefs)
4️⃣ 企业级高性能条带卷(多盘并行 IO)
lvextend -L +50G -i 2 -I 256 /dev/vg_data/lv_data
(2 块盘并行,256K 条带块)


参数字典:
| 参数  | 全称         |   中文    |            作用        |
| ----- | ------------ | --------- | -----------------------|
| -L    | Size         | 指定容量      | 以 G/M/T 为单位扩 
| -l    | Extents      | 指定 PE 数    | 用 VG 的最小单元扩  
| +     | Plus         | 增量          | 在原容量基础上增加    
| %FREE | Percent Free | 百分比        | 使用 VG 剩余百分比  
| -r    | ResizeFS     | 自动扩 FS     | 扩 LV 同时扩文件系统 
| -i    | Stripes      | 条带          | 多盘并发 IO      
| -I    | Stripe Size  | 条带块大小    | 高性能存储调优用     

Step 7.1:最常用的 4 种扩容模式

目标 命令 说明
精准加 30G lvextend -L +30G /dev/vg/lv 最常用、最安全
扩到指定大小 lvextend -L 200G /dev/vg/lv 直接设定最终容量
用掉全部库存 lvextend -l +100%FREE /dev/vg/lv 把 VG 空间一次性吃完
按 PE 个数扩 lvextend -l +1024 /dev/vg/lv 高阶精细调度

Step 8:扩文件系统 FS(File System 文件系统)

注意:如果Step 7:扩对应的 LV(Logical Volume 逻辑卷)不是执行的这lvextend -L +30G -r /dev/vg_data/lv_data 自动扩 FS,那么Step 8扩文件系统 FS是“必须动作”。

LV 是仓库
FS 是货架
仓库变大了但货架不扩 = 空间不可用 = 事故预备役

层级 你刚刚做了什么
物理卷 PV 已扩大
卷组 VG 已变大
逻辑卷 LV 已变大
❌ 文件系统 FS 还是旧大小
# xfs 文件系统:
xfs_growfs /data

# ext4 文件系统:
# resize2fs /dev/vg_data/lv_data
FS 类型 命令
xfs xfs_growfs /data
ext4 resize2fs /dev/vg_data/lv_data

所以如果你不做 Step 8:

👉 df -h 看到的容量不变
👉 应用依旧报磁盘满
👉 你扩了个寂寞

Step 9:验收

df -h
df -h /data

四、LVM 逻辑卷常用操作手册

注意:“LVM 这种思路不只 Linux 有”,但你操作的这些命令(pvcreate/vgcreate/lvcreate/lvextend…)确实是 Linux LVM2 的命令,主要适用于 Linux。

LVM 的数据流向:
物理卷 PV (/dev/vdb1, /dev/vdb2)
    ↓
卷组 VG (vg01)
    ↓
逻辑卷 LV (lv01)
    ↓
挂载点 /mnt/data(最终操作系统看到的目录)

把两块物理分区 /dev/vdb1 和 /dev/vdb2 组合成一个卷组 vg01,在卷组里划出逻辑卷 lv01,然后在操作系统里挂载到 /mnt/data,就能直接读写数据。
############################################################
#               LVM + Stratis 操作手册(详细版)
# 数据流向示例:
# /dev/vdb1 /dev/vdb2  ->  VG: vg01  ->  LV: lv01  ->  挂载点: /mnt/data
# 说明:物理设备 -> 卷组 -> 逻辑卷 -> 挂载目录 -> 系统可读写
############################################################

########################
# 0. 磁盘分区(parted)
########################
# 创建 GPT 分区表(新盘首次使用;已有数据慎用,会清空分区表)
parted /dev/vdb mklabel gpt

# 创建第 1 个分区 first,1MiB ~ 258MiB,打 LVM 标记
parted /dev/vdb mkpart first 1MiB 258MiB
parted /dev/vdb set 1 lvm on

# 创建第 2 个分区 second,258MiB ~ 514MiB,打 LVM 标记
parted /dev/vdb mkpart second 258MiB 514MiB
parted /dev/vdb set 2 lvm on

# 查看分区结果,确认是否成功
parted /dev/vdb print

# 刷新 udev,让系统识别新分区
udevadm settle

########################
# 1. LVM 创建阶段
########################
# 1.1 创建物理卷 PV
pvcreate /dev/vdb1 /dev/vdb2
# 作用:把分区交给 LVM 管理,成为 PV(物理卷)

# 1.2 创建卷组 VG
vgcreate vg01 /dev/vdb1 /dev/vdb2 -s 16M
# vg01:卷组名称
# -s 16M:PE(物理扩展块)大小,影响 LV 扩展灵活性
# 作用:把多个 PV 组合成存储池

# 1.3 创建逻辑卷 LV
lvcreate -n lv01 -L 700M vg01       # 按大小创建
# 或按 PE 个数: lvcreate -n lv01 -l 70 vg01
# 作用:在 VG 中划出逻辑卷,可挂载使用

# 1.4 格式化 LV(示例使用 xfs)
mkfs -t xfs /dev/vg01/lv01
# 作用:创建文件系统,让操作系统可以读写

# 1.5 挂载 LV
mkdir -p /mnt/data                  # 创建挂载目录
mount /dev/vg01/lv01 /mnt/data      # 挂载 LV
# 作用:挂载后操作系统可直接访问 LV 上的数据

# 1.6 配置开机自动挂载
# 按 LV 名称挂载:
# /dev/vg01/lv01  /mnt/data  xfs  defaults 0 0
# 或按 UUID 挂载(更安全):
# UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /mnt/data  xfs  defaults 0 0

# 1.7 查看当前状态
pvdisplay      # 查看 PV 属性
vgdisplay      # 查看 VG 属性
lvdisplay      # 查看 LV 属性
pvs; vgs; lvs  # 快速概览
df -h          # 查看文件系统使用情况

########################
# 2. LVM 扩容操作
########################
# 场景:新增 PV /dev/vdb3,给 lv01 扩容 300M

# 2.1 扩展 PV
pvcreate /dev/vdb3
# 作用:把新盘交给 LVM 管理

# 2.2 扩展 VG
vgextend vg01 /dev/vdb3
# 作用:把新 PV 加入卷组,增加可用空间

# 2.3 扩展 LV
lvextend -L +300M /dev/vg01/lv01    # 增加 300M
# 或扩到固定大小: lvextend -L 2G /dev/vg01/lv01
# 作用:增加逻辑卷容量

# 2.4 扩展文件系统
xfs_growfs /mnt/data                # xfs 文件系统必须挂载后扩展
# ext4 文件系统: resize2fs /dev/vg01/lv01
# swap LV 扩展: mkswap /dev/vg01/lv01
# 作用:扩展 LV 后,必须扩展文件系统才能使用新增空间

########################
# 3. LVM 缩减 / 删除操作(高危,务必备份)
########################
# 3.1 删除 LV
umount /mnt/data                   # 先卸载
lvremove /dev/vg01/lv01            # 删除逻辑卷

# 3.2 从 VG 移除 PV
pvmove /dev/vdb3                    # 迁移数据到其他 PV
vgreduce vg01 /dev/vdb3             # 从 VG 移除 PV
pvremove /dev/vdb3                   # 清理 PV

# 3.3 删除 VG(确保 VG 内无 LV)
vgremove vg01

# 3.4 删除 PV(不再使用的物理卷)
pvremove /dev/vdb1 /dev/vdb2

########################
# 4. Swap LV 示例
########################
lvcreate -n swap_lv -L 4G vg01
mkswap /dev/vg01/swap_lv
swapon /dev/vg01/swap_lv
# /etc/fstab 增加:
# /dev/vg01/swap_lv  swap  swap  defaults 0 0

########################
# 5. 日常排查命令
########################
pvs; vgs; lvs                       # 快速概览 PV/VG/LV
pvdisplay; vgdisplay; lvdisplay     # 查看详细属性
lsblk                               # 查看磁盘和挂载结构
df -h                               # 查看文件系统使用情况

########################
# 6. 高级存储 Stratis(详细注释)
########################
yum install stratis-cli stratisd
# 安装 Stratis 命令行工具和守护进程
systemctl enable --now stratisd
# 启动 Stratis 并设置开机自启,守护进程必须运行

stratis pool create pool1 /dev/vdb
# 创建存储池 pool1,使用 /dev/vdb
# 作用:池类似 LVM 的卷组 VG

stratis pool add-data pool1 /dev/vdc
# 向池添加额外设备,增加容量

stratis pool list
# 查看系统中所有池及状态

stratis blockdev list pool1
# 查看 pool1 中的物理设备详细信息

stratis filesystem create pool1 filesystem1
# 在池中创建逻辑文件系统 filesystem1(类似 LV)
# 文件系统挂载后可直接使用

stratis filesystem snapshot pool1 filesystem1 snapshot1
# 创建快照 snapshot1,可用于备份或回滚

stratis filesystem list
# 查看池内所有逻辑文件系统及状态

########################
# 7. LV 缩减实操示例
########################
du -sh /data/                                  # 查看目录占用大小
umount /data                                   # 卸载挂载点
e2fsck -f /dev/servera_group/servera_volume    # 文件系统检查
resize2fs /dev/servera_group/servera_volume 100M   # 缩小文件系统
lvresize --size 100M /dev/servera_group/servera_volume   # 缩减 LV
lvdisplay                                      # 查看 LV/VG 信息
mount /dev/servera_group/servera_volume /data/ # 再次挂载,系统可访问数据
ls -l /data/ | wc -l                            # 检查数据是否完整

# 迁移数据、缩减 VG、删除 PV
pvmove /dev/vdb2                               # 数据迁移
vgreduce servera_group /dev/vdb2               # 从 VG 移除 PV
pvremove /dev/vdb2                             # 删除 PV
mount /dev/servera_group/servera_volume /data/ # 再次挂载
ls -l /data/ | wc -l                            # 检查数据完整性
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐