Linux LVM 在线扩容标准操作流程_20260102

适用于:

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 的数据流向:
物理卷 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                            # 检查数据完整性
相关推荐
微凉的衣柜1 天前
Windows Server 使用 Nginx 反向代理实现域名访问内网 Gradio 应用
运维·windows·nginx
warton881 天前
ubuntu24.04 安装mysql8.0.36
linux·运维·mysql
CS创新实验室1 天前
《计算机网络》深入学:虚电路
服务器·计算机网络·php·虚电路
运维有小邓@1 天前
如何实现基于角色的访问控制?
运维·网络
范纹杉想快点毕业1 天前
嵌入式通信核心架构:从状态机、环形队列到多协议融合
linux·运维·c语言·算法·设计模式
小龙1 天前
【Git 报错解决】SSH 公钥认证失败(`Permission denied (publickey)`)
运维·git·ssh
白驹过隙^^1 天前
VitrualBox及ubuntu系统安装
linux·运维·ubuntu
可爱又迷人的反派角色“yang”1 天前
k8s(一)
linux·运维·网络·云原生·容器·kubernetes
可爱又迷人的反派角色“yang”1 天前
CICD持续集成Ruo-Yi项目
linux·运维·网络·ci/cd·docker·容器