欢迎光临
我们一直在努力

磁盘满了没法扩容?Linux LVM 逻辑卷全套实操,在线扩容不宕机

前言💡小白运维痛点直击

有没有小伙伴踩过这些存储大坑?

  • 服务器硬盘分区空间满了,分区后面没有空余空间,根本没法扩容,业务被迫停机删文件🤦‍
  • 多块 20G 硬盘,想合并成 40G 大容量存储,普通分区完全做不到
  • 想备份某个时刻磁盘数据,又不想关机打虚拟机快照
  • 单块硬盘损坏直接丢全部业务数据,无冗余方案
  • 传统固定分区存在致命缺陷,而LVM 逻辑卷管理就是企业运维标准解决方案!

    本篇全程小白友好,先讲运维实际用途、完整实验思路,所有命令逐行带详细注释、输出结果完整保留,搭配大量对比表格、警示文本框,零基础也能跟着实操落地。

    一、为什么要用 LVM?传统分区 VS LVM 逻辑卷对比

    🎯生产运维实际作用

  • 弹性扩容:业务增长磁盘不够,随时新增硬盘扩充容量,无需重新分区重装系统
  • 多盘合并:多块物理硬盘整合为一个大存储池,突破单盘容量限制
  • 在线调整:XFS 文件系统支持不停机扩容,业务无中断
  • 数据快照:瞬间备份卷内全部数据,故障快速回滚
  • RAID 冗余:支持 raid1/raid5,单盘损坏数据不丢失
  • 传统分区缺陷

    ⚠️固定分区致命短板

  • 空间连续要求:扩容必须分区后方有空闲空间,磁盘规划错误就无法扩容
  • 不能跨硬盘:一个文件系统只能在单块硬盘,多硬盘无法合并使用
  • 无快照 / 冗余机制,硬盘故障数据直接丢失
  • LVM 逻辑卷优势

    ✅LVM 核心优势

  • 存储池化:多块硬盘统一做成资源池,按需分配空间
  • 弹性伸缩:随时加硬盘扩容,支持在线扩容
  • 快照备份:秒级创建数据快照,用于数据备份、测试环境
  • RAID 逻辑卷:硬件无 RAID 卡也能实现磁盘冗余
  • 传统分区 vs LVM 对比表

    对比维度普通磁盘分区(/dev/sda1)LVM 逻辑卷
    扩容限制 分区后方必须有空余空间,无法跨硬盘 可新增硬盘加入存储池,无限扩容
    多硬盘合并 不支持,单文件系统只能存一块盘 多 PV 合并 VG,统一分配空间
    在线扩容 多数场景需要停机 XFS 支持不停机在线扩容
    数据快照 无原生快照功能 支持创建读写快照,快速回滚
    磁盘冗余 不支持 内置 raid1/raid5 逻辑卷
    运维灵活性 极差,前期规划失误后期无解 极高,业务扩容零停机

    二、LVM 三大核心概念通俗拆解

    三层结构逻辑(PV→VG→LV)

  • PV(物理卷):底层物理硬盘 / 分区,给 LVM 做底层存储单元
  • VG(卷组):多个 PV 合并成统一存储资源池
  • LV(逻辑卷):从 VG 池中划分空间,格式化挂载给业务使用
  • 三层概念通俗表格

    名词全称通俗理解对应设备示例
    PV Physical Volume 物理卷 一块块单独硬盘原材料 /dev/sdb /dev/sdc
    VG Volume Group 卷组 材料堆,把所有硬盘合并成大仓库 vg 名称 webapp、dbapp
    LV Logical Volume 逻辑卷 从仓库划出独立分区,存放业务数据 /dev/webapp/webapp01

    LVM 完整操作总流程

  • 准备空闲硬盘 → 2. pvcreate 创建 PV → 3. vgcreate 创建 VG 存储池 → 4. lvcreate 划分 LV → 5. mkfs 格式化 → 6. mount 挂载使用
  • 扩容场景:新增硬盘→pvcreate→vgextend 扩容 VG→lvextend 扩容 LV→更新文件系统
  • 备份场景:lvcreate -s 创建快照卷
  • 三、实验环境准备

    实验环境说明

    虚拟机新增 3 块 20G 空闲硬盘,设备名称:/dev/sdb/dev/sdc/dev/sdd

    # lsblk列出三块硬盘,{b..d}批量匹配sdb sdc sdd
    # lsblk:查看块设备树形工具
    # /dev/sd{b..d} shell批量简写,一次性查看三块硬盘
    [root@centos7 ~]# lsblk /dev/sd{b..d}
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sdb 8:16 0 20G 0 disk
    sdc 8:32 0 20G 0 disk
    sdd 8:48 0 20G 0 disk

    输出解读:三块硬盘均为 20G 本地磁盘,无分区、无挂载,可全部用于 LVM 实验

    四、LVM 基础创建全套实操(PV/VG/LV 创建、格式化挂载)

    4.1 创建物理卷 PV

    pvcreate:将裸硬盘 / 分区初始化为 LVM 物理卷,写入 LVM 标识,才能加入卷组

    # 单块硬盘创建PV
    # pvcreate:初始化物理卷;/dev/sdb 目标裸硬盘
    [root@centos7 ~]# pvcreate /dev/sdb
    Physical volume "/dev/sdb" successfully created.

    # 批量多块硬盘创建PV,{c,d}匹配sdc、sdd两块硬盘
    [root@centos7 ~]# pvcreate /dev/sd{c,d}
    Physical volume "/dev/sdc" successfully created.
    Physical volume "/dev/sdd" successfully created.

    查看所有物理卷 pvs

    pvs:精简输出 PV 列表,快速查看 PV 归属 VG、剩余空闲空间

    [root@centos7 ~]# pvs
    PV VG Fmt Attr PSize PFree
    /dev/sdb lvm2 — 20.00g 20.00g
    /dev/sdc lvm2 — 20.00g 20.00g
    /dev/sdd lvm2 — 20.00g 20.00g

    输出字段解释表格

    字段含义
    PV 物理卷设备名
    VG 所属卷组,空白代表未加入任何 VG
    Fmt 格式 lvm2(CentOS7 默认 LVM 格式)
    Attr 属性,— 代表未加入卷组
    PSize 硬盘总容量
    PFree 硬盘剩余空闲空间

    查看单块 PV 详细信息 pvdisplay

    pvdisplay:打印 PV 完整底层参数、UUID、PE 块信息

    # pvdisplay:查看详细PV信息;/dev/sdb 指定设备
    [root@centos7 ~]# pvdisplay /dev/sdb
    "/dev/sdb" is a new physical volume of "20.00 GiB"
    — NEW Physical volume —
    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-zdkQ5d

    关键字段解释:

    PE:物理最小存储单元,创建 VG 时指定,默认 4M;未加入 VG 则 PE Size 为 0

    4.2 创建卷组 VG

    vgcreate:将 1 个或多个 PV 合并为统一存储池(卷组)

    示例 1:单硬盘创建 VG webapp(业务网站存储池)

    # vgcreate 卷组名 物理卷设备
    # webapp:自定义卷组名称;/dev/sdb 作为底层PV
    [root@centos7 ~]# vgcreate webapp /dev/sdb
    Volume group "webapp" successfully created

    示例 2:两块硬盘合并创建 dbapp 数据库存储池

    # /dev/sd{c,d} 两块20G硬盘合并成40G存储池dbapp
    [root@centos7 ~]# vgcreate dbapp /dev/sd{c,d}
    Volume group "dbapp" successfully created

    查看 VG 列表 vgs

    vgs:精简展示所有卷组 PV 数量、LV 数量、总容量、空闲容量

    [root@centos7 ~]# pvs
    PV VG Fmt Attr PSize PFree
    /dev/sdb webapp lvm2 a– <20.00g <20.00g
    /dev/sdc dbapp lvm2 a– <20.00g <20.00g
    /dev/sdd dbapp lvm2 a– <20.00g <20.00g

    [root@centos7 ~]# vgs
    VG #PV #LV #SN Attr VSize VFree
    dbapp 2 0 0 wz–n- 39.99g 39.99g
    webapp 1 0 0 wz–n- <20.00g <20.00g

    vgs 字段说明表

    字段含义
    VG 卷组名称
    #PV 该卷组包含几块物理硬盘
    #LV 已创建逻辑卷数量
    VSize 卷组总容量
    VFree 卷组剩余空闲空间

    查看 VG 详细信息 vgdisplay

    # vgdisplay 卷组名,输出PE大小、总PE、空闲PE
    [root@centos7 ~]# vgdisplay dbapp
    — Volume group —
    VG Name dbapp
    System ID
    Format lvm2
    Metadata Areas 2
    Metadata Sequence No 1
    VG Access read/write
    VG Status resizable
    MAX LV 0
    Cur LV 0
    Open LV 0
    Max PV 0
    Cur PV 2
    Act PV 2
    VG Size 39.99 GiB
    PE Size 4.00 MiB # PE最小存储块,默认4M
    Total PE 10238
    Alloc PE / Size 0 / 0
    Free PE / Size 10238 / 39.99 GiB
    VG UUID kjY26m-D0ax-WmMq-fMJv-1Tnb-imqh-GOAWkG

    4.3 创建逻辑卷 LV

    lvcreate:从 VG 空闲空间划分逻辑卷

    参数说明文本框

    lvcreate 核心参数

    -n:指定逻辑卷名称

    -L:指定逻辑卷总容量(支持 G/M)

    末尾参数:卷组名称

    示例 1:webapp 卷组创建 5G 网站逻辑卷 webapp01

    # -n webapp01 逻辑卷名称;-L 5G 分配5G空间;webapp 来源卷组
    [root@centos7 ~]# lvcreate -n webapp01 -L 5G webapp
    Logical volume "webapp01" created.

    示例 2:dbapp 双硬盘卷组创建 25G 跨盘数据库卷 data01

    # 两块20G硬盘合并池,划出25G逻辑卷,自动跨两块硬盘存储
    [root@centos7 ~]# lvcreate -n data01 -L 25G dbapp
    Logical volume "data01" created.

    查看逻辑卷 lvs

    [root@centos7 ~]# lvs
    LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
    data01 dbapp -wi-a—– 25.00g
    webapp01 webapp -wi-a—– 5.00g

    逻辑卷三种访问路径说明

    # 三种等价设备路径,全部指向同一个逻辑卷
    [root@centos7 ~]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01
    lrwxrwxrwx 1 root root 7 617 18:26 /dev/dbapp/data01 –> ../dm-4
    lrwxrwxrwx 1 root root 7 617 18:26 /dev/mapper/dbapp-data01 –> ../dm-4

  • /dev/VG 名 / LV 名(最直观,推荐日常使用)
  • /dev/mapper/VG-LV(系统底层映射文件)
  • /dev/dm-N(内核原始设备号,运维极少使用)
  • lvdisplay 查看 LV 完整信息

    [root@centos7 ~]# lvdisplay /dev/dbapp/data01
    — Logical volume —
    LV Path /dev/dbapp/data01
    LV Name data01
    VG Name dbapp
    LV UUID W8UafB-A7RJ-dBjM-bsA2-8Obc-p8gE-bMZgmm
    LV Write Access read/write
    LV Creation host, time centos7.linux.com, 2022-12-26 11:42:40 +0800
    LV Status available
    # open 0
    LV Size 25.00 GiB
    Current LE 6400
    Segments 2 # 2个物理段,代表跨两块硬盘存储
    Allocation inherit
    Read ahead sectors auto
    – currently set to 8192
    Block device 253:4

    Segments=2:代表该 25G 逻辑卷同时占用 sdc、sdd 两块硬盘,完美实现跨盘存储

    验证 PV 空间占用

    [root@centos7 ~]# pvs
    PV VG Fmt Attr PSize PFree
    /dev/sdb webapp lvm2 a– <20.00g <15.00g
    /dev/sdc dbapp lvm2 a– <20.00g 0 # sdc全部用完
    /dev/sdd dbapp lvm2 a– <20.00g 14.99g # sdd剩余15G

    lsblk 树形查看跨盘结构

    [root@centos7 ~]# lsblk /dev/sd{b..d}
    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sdb 8:16 0 20G 0 disk
    └─webapp-webapp01 253:3 0 5G 0 lvm
    sdc 8:32 0 20G 0 disk
    └─dbapp-data01 253:4 0 25G 0 lvm
    sdd 8:48 0 20G 0 disk
    └─dbapp-data01 253:4 0 25G 0 lvm

    清晰看到 data01 横跨 sdc、sdd 两块物理磁盘

    4.4 格式化逻辑卷并挂载

    # mkfs.xfs:将逻辑卷格式化为XFS文件系统(CentOS7默认,仅支持扩容)
    [root@centos7 ~]# mkfs.xfs /dev/webapp/webapp01

    # mount:挂载逻辑卷到网站根目录
    # /usr/share/nginx/html Nginx网页存放目录
    [root@centos7 ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html

    持久化开机自动挂载:修改 /etc/fstab 写入 LV 的 UUID,服务器重启自动挂载

    4.5 LVM 全套清理(实验复原)

    完整销毁流程:卸载 → 删除 LV → 删除 VG → 删除 PV

    # umount 卸载挂载点,不卸载无法删除LV
    [root@centos7 ~]# umount /dev/webapp/webapp01

    # lvremove 删除逻辑卷,交互输入y确认删除
    [root@centos7 ~]# lvremove /dev/webapp/webapp01 /dev/dbapp/data01
    Do you really want to remove active logical volume webapp/webapp01? [y/n]: y
    Logical volume "webapp01" successfully removed
    Do you really want to remove active logical volume dbapp/data01? [y/n]: y
    Logical volume "data01" successfully removed

    # vgremove 删除卷组
    [root@centos7 ~]# vgremove webapp dbapp
    Volume group "webapp" successfully removed
    Volume group "dbapp" successfully removed

    # pvremove 擦除硬盘LVM标识,恢复普通裸硬盘
    [root@centos7 ~]# pvremove /dev/sd{b..d}
    Labels on physical volume "/dev/sdb" successfully wiped.
    Labels on physical volume "/dev/sdc" successfully wiped.
    Labels on physical volume "/dev/sdd" successfully wiped.

    五、卷组 VG 扩容与缩减实操

    5.1 扩容卷组 vgextend

    业务增长,VG 空间不足,新增硬盘加入存储池

    # 先创建单盘VG webapp
    [root@centos7 ~]# pvcreate /dev/sdb
    [root@centos7 ~]# vgcreate webapp /dev/sdb
    [root@centos7 ~]# lvcreate -n webapp01 -L 10G webapp

    # vgextend:将sdc、sdd两块硬盘加入webapp卷组,扩容VG总容量
    [root@centos7 ~]# vgextend webapp /dev/sd{c,d}
    Physical volume "/dev/sdc" successfully created.
    Physical volume "/dev/sdd" successfully created.
    Volume group "webapp" successfully extended

    5.2 缩减卷组 vgreduce

    核心前置⚠️警示文本

    ⚠️缩减 VG 前提:要移除的 PV 上无任何数据占用,否则命令直接报错

    若 PV 存有数据,必须先用 pvmove 把数据迁移到同 VG 其他硬盘,再剔除 PV

    完整缩容流程

    # 查看PV占用状态
    [root@centos7 ~]# pvs
    PV VG Fmt Attr PSize PFree
    /dev/sdb webapp lvm2 a– <20.00g <10.00g # 有数据占用,无法直接剔除
    /dev/sdc webapp lvm2 a– <20.00g <20.00g
    /dev/sdd webapp lvm2 a– <20.00g <20.00g

    # pvmove /dev/sdb:把sdb上全部数据迁移到VG内其他空闲硬盘
    [root@centos7 ~]# pvmove /dev/sdb
    # 指定目标硬盘迁移:pvmove /dev/sdb /dev/sdd
    [root@centos7 ~]# pvmove /dev/sdb /dev/sdd
    /dev/sdb: Moved: 0.51%
    /dev/sdb: Moved: 100.00%

    # 迁移完成,sdb无数据,执行vgreduce移除PV
    [root@centos7 ~]# vgreduce webapp /dev/sdb
    Removed "/dev/sdb" from volume group "webapp"

    # 验证sdb已脱离卷组
    [root@centos7 ~]# pvs
    PV VG Fmt Attr PSize PFree
    /dev/sdb lvm2 — 20.00g 20.00g
    /dev/sdc webapp lvm2 a– <20.00g <20.00g
    /dev/sdd webapp lvm2 a– <20.00g <10.00g

    六、逻辑卷 LV 扩容、缩容

    6.1 扩容逻辑卷 lvextend

    方式 1:增加指定容量(+2G 代表扩容 2G)

    # -L +2G 在原有基础上加2G空间
    [root@centos7 ~]# lvextend -L +2G /dev/webapp/webapp01
    Size of logical volume webapp/webapp01 changed from 10.00 GiB (2560 extents) to 12.00 GiB (3072 extents).
    Logical volume webapp/webapp01 successfully resized.
    [root@centos7 ~]# lvs /dev/webapp/webapp01
    LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
    webapp01 webapp -wi-a—– 12.00g

    6.2 缩减逻辑 lvreduce

    ⚠️高危提示:缩容会删除超出空间内数据,生产严禁随意执行!

    # -L -2G 减少2G容量,交互输入y确认
    [root@centos7 ~]# lvreduce -L -2G /dev/webapp/webapp01
    WARNING: Reducing active logical volume to 10.00 GiB.
    THIS MAY DESTROY YOUR DATA (filesystem etc.)
    Do you really want to reduce webapp/webapp01? [y/n]: y
    Size of logical volume webapp/webapp01 changed from 12.00 GiB (3072 extents) to 10.00 GiB (2560 extents).
    Logical volume webapp/webapp01 successfully resized.
    [root@centos7 ~]# lvs /dev/webapp/webapp01
    LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
    webapp01 webapp -wi-a—– 10.00g

    七、文件系统扩容(XFS/EXT4 区分)

    7.1 XFS 文件系统(CentOS7 默认,仅支持扩容,不可缩容)

    两步扩容流程:lvextend 扩容 LV → xfs_growfs 刷新文件系统

    # 1. 将LV扩容至15G
    [root@centos7 ~]# lvextend -L 15G /dev/webapp/webapp01
    [root@centos7 ~]# lvs /dev/webapp/webapp01
    LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
    webapp01 webapp -wi-ao—- 15.00g

    # 2. xfs_growfs 在线刷新挂载点,无需卸载
    [root@centos7 ~]# xfs_growfs /usr/share/nginx/html
    [root@centos7 ~]# df -h /usr/share/nginx/html
    文件系统 容量 已用 可用 已用% 挂载点
    /dev/mapper/webapp-webapp01 15G 140M 15G 1% /usr/share/nginx/html

    一键合并扩容(-r 自动同步文件系统)

    # -r 参数:扩容LV同时自动刷新文件系统,简化操作
    [root@centos7 ~]# lvextend -rL 20G /dev/webapp/webapp01
    [root@centos7 ~]# df -h /usr/share/nginx/html
    文件系统 容量 已用 可用 已用% 挂载点
    /dev/mapper/webapp-webapp01 20G 176M 20G 1% /usr/share/nginx/html

    7.2 EXT4 文件系统(支持扩容 + 缩容)

    扩容操作

    [root@centos7 ~]# lvextend -L 25G /dev/webapp/webapp01
    # resize2fs 刷新ext4文件系统
    [root@centos7 ~]# resize2fs /dev/webapp/webapp01

    EXT4 缩容强制流程文本框

    🚨EXT4 缩容四步硬性要求,顺序不能乱

  • umount 卸载文件系统(不能在线缩容)
  • e2fsck -f 强制检测磁盘错误
  • resize2fs 缩减文件系统容量
  • lvreduce 缩减逻辑卷容量
  • # 1 卸载
    [root@centos7 ~]# umount /usr/share/nginx/html
    # 2 强制磁盘检测
    [root@centos7 ~]# e2fsck -f /dev/webapp/webapp01
    # 3 文件系统缩至10G
    [root@centos7 ~]# resize2fs /dev/webapp/webapp01 10G
    # 4 LV缩容
    [root@centos7 ~]# lvreduce -L 10G /dev/webapp01
    # 5 重新挂载验证
    [root@centos7 ~]# mount /usr/share/nginx/html

    八、LVM 快照(数据备份神器)

    快照作用🎯

    瞬间复制逻辑卷当前全部数据,用于升级、测试前备份,故障一键恢复;快照占用空间仅记录变更数据,节省存储。

    创建快照命令参数

    -s:snapshot 创建快照卷;-L 指定快照容量(不小于源 LV 使用空间)

    # 创建webapp01快照webapp01-snap1,分配10G快照空间
    [root@centos7 ~]# lvcreate -s -n webapp01-snap1 -L 10G /dev/webapp/webapp01
    Logical volume "webapp01-snap1" created.

    # 挂载快照查看备份数据
    [root@centos7 ~]# mount /dev/webapp/webapp01-snap1 /webapp/webapp01/

    九、LVM RAID1 冗余卷(单盘不坏数据)

    运维场景

    服务器无硬件 RAID 卡,使用 LVM 软 RAID1 实现双盘镜像,一块硬盘损坏数据不丢失

    # –type raid1 创建镜像逻辑卷
    [root@centos7 ~]# lvcreate –type raid1 -n webapp01 -L 15G webapp
    [root@centos7 ~]# mkfs.xfs /dev/webapp/webapp01
    [root@centos7 ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html/

    硬盘故障修复流程

    # 1 移除损坏硬盘
    [root@centos7 ~]# vgreduce –removemissing webapp –force
    # 2 新增硬盘加入VG
    [root@centos7 ~]# vgextend webapp /dev/sdd
    # 3 重建raid镜像
    [root@centos7 ~]# lvconvert –repair /dev/webapp/webapp01

    十、全文运维速查表格

    LVM 全套命令汇总表

    操作目标命令核心作用
    初始化硬盘为 PV pvcreate /dev/sdb 裸硬盘转为 LVM 物理卷
    查看 PV pvs / pvdisplay 查看物理卷信息
    创建卷组 vgcreate vg 名 /dev/sdb 多 PV 合并存储池
    扩容 VG vgextend vg 名 /dev/sdc 新增硬盘加入 VG
    缩减 VG pvmove + vgreduce 迁移数据后移除 PV
    创建逻辑卷 lvcreate -n 名 -L 容量 VG 划分业务存储卷
    扩容 LV lvextend +/- 容量 设备 扩大逻辑卷空间
    XFS 刷新扩容 xfs_growfs 挂载点 在线生效扩容
    EXT4 刷新 resize2fs 设备 ext 文件系统调整
    创建快照 lvcreate -s -n 快照名 数据瞬时备份
    创建 RAID1 lvcreate –type raid1 双盘数据镜像
    删除 LV/VG/PV lvremove/vgremove/pvremove 销毁 LVM 结构
    赞(0)
    未经允许不得转载:171主机测评 » 磁盘满了没法扩容?Linux LVM 逻辑卷全套实操,在线扩容不宕机
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址