一、核心基础:LVM 三大核心概念

LVM 的存储架构由「物理卷→卷组→逻辑卷」三层组成,层层递进实现灵活管理:

  • 物理卷(PV, Physical Volume):LVM 的基础存储单元,由磁盘(如/dev/sdb)、分区或 RAID 设备创建,包含 LVM 管理元数据;
  • 卷组(VG, Volume Group):由一个或多个 PV 组成的「存储池」,将分散的物理存储整合为统一的逻辑空间;
  • 逻辑卷(LV, Logical Volume):从 VG 中划分的逻辑空间,类比 “虚拟分区”,可直接格式化并挂载使用,支持动态调整大小。

核心流程

创建 LVM 的基础流程:创建PV → 创建VG → 创建LV → 格式化挂载;后续管理:扩展/缩减VG/LV → 快照备份 → RAID逻辑卷配置

二、LVM 核心语法(操作基础)

LVM 的管理依赖pv*(PV 管理)、vg*(VG 管理)、lv*(LV 管理)三类命令,以下是文档中高频使用的核心语法:

2.1 PV 相关命令

操作目标 语法格式 关键选项说明
创建 PV pvcreate 块设备(如/dev/sdb 将磁盘 / 分区初始化为 PV,添加 LVM 元数据
查看 PV 列表 pvs(简洁)/pvdisplay [PV设备](详细) pvs快速查看所有 PV 状态;pvdisplay查看单个 PV 详情
删除 PV pvremove 块设备 清除 PV 的 LVM 元数据,仅支持未加入 VG 的 PV
迁移 PV 数据 pvmove 源PV [目标PV] 将源 PV 的数据迁移到 VG 内其他 PV,用于移除 PV 前

2.2 VG 相关命令

操作目标 语法格式 关键选项说明
创建 VG vgcreate VG名称 PV列表 将多个 PV 整合为 VG(如vgcreate webapp /dev/sdb
查看 VG 列表 vgs(简洁)/vgdisplay [VG名称](详细) vgs查看 VG 容量、PV 数量;vgdisplay查看 PE 大小等详情
扩展 VG vgextend VG名称 新PV 向 VG 添加新 PV,扩容存储池
缩减 VG vgreduce VG名称 待移除PV 从 VG 中移除未使用的 PV,需先迁移数据
删除 VG vgremove VG名称 销毁 VG,需先删除其下所有 LV

2.3 LV 相关命令

操作目标 语法格式 关键选项说明
创建 LV lvcreate -n LV名称 -L 大小 VG名称 -n指定 LV 名称;-L指定大小(如5G);支持--type raid1创建 RAID 逻辑卷
查看 LV 列表 lvs(简洁)/lvdisplay [LV路径](详细) lvs查看 LV 大小、所属 VG;lvdisplay查看 LV 路径、LE 数量等
扩展 LV lvextend -L +增量大小 LV路径 -L +2G表示增加 2G;-r选项自动扩展文件系统(推荐)
缩减 LV lvreduce -L -减量大小 LV路径 仅支持 ext4 文件系统;需先卸载并检查文件系统
创建 LV 快照 lvcreate -s -n 快照名称 -L 快照大小 原LV路径 -s表示创建快照;快照容量需不小于原 LV 的变更数据量
删除 LV lvremove LV路径 销毁 LV,需先卸载文件系统

关键术语补充

  • PE(Physical Extent):PV 的最小存储单元(默认 4MiB),VG 由多个 PE 组成;
  • LE(Logical Extent):LV 的最小存储单元,1 个 LE 对应 1 个 PE,确保 LV 数据可跨 PV 存储;
  • LV 设备路径:支持三种格式(等价):/dev/VG名称/LV名称/dev/mapper/VG名称-LV名称/dev/dm-N(如/dev/webapp/webapp01 = /dev/mapper/webapp-webapp01)。

三、实操模块 1:LVM 基础创建(PV→VG→LV→挂载)

文档用 3 块 20G 磁盘(/dev/sdb/sdc/sdd)演示基础流程,核心是 “整合物理存储→划分逻辑空间→投入使用”。

3.1 步骤 1:创建物理卷(PV)

# 1. 创建单个PV(/dev/sdb)
[root@centos7 ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.  # 创建成功

# 2. 批量创建PV(/dev/sdc、/dev/sdd,简写格式)
[root@centos7 ~]# pvcreate /dev/sd{c,d}
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.

# 3. 查看PV列表(简洁信息)
[root@centos7 ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree 
  /dev/sdb   lvm2   ---  20.00g 20.00g  # 未加入VG,空闲20G
  /dev/sdc   lvm2   ---  20.00g 20.00g
  /dev/sdd   lvm2   ---  20.00g 20.00g

# 4. 查看单个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               # 未加入任何VG
  PV Size               20.00 GiB
  Allocatable           NO  # 未加入VG时不可分配
  PE Size               0   # 未加入VG时无PE大小
  PV UUID               MBHW0w-OkJL-CasO-PYRR-sduS-U2m5-zdkQ5d  # 唯一标识
  • 解析:pvcreate会在磁盘开头写入 LVM 元数据,标记其为 PV;sd{c,d}等价于/dev/sdc /dev/sdd

3.2 步骤 2:创建卷组(VG)

bash

运行

# 1. 创建单PV的VG(名称webapp,包含/dev/sdb)
[root@centos7 ~]# vgcreate webapp /dev/sdb
Volume group "webapp" successfully created  # 创建成功

# 2. 创建多PV的VG(名称dbapp,包含/dev/sdc、/dev/sdd)
[root@centos7 ~]# vgcreate dbapp /dev/sd{c,d}
Volume group "dbapp" successfully created

# 3. 查看VG列表(简洁信息)
[root@centos7 ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree 
  dbapp    2   0   0 wz--n- 39.99g 39.99g  # 2个PV,总容量~40G,空闲40G
  webapp   1   0   0 wz--n- <20.00g <20.00g  # 1个PV,容量~20G,空闲20G

# 4. 查看单个VG详细信息(dbapp)
[root@centos7 ~]# vgdisplay dbapp
  --- Volume group ---
  VG Name               dbapp
  Format                lvm2
  VG Size               39.99 GiB  # 2个20G PV,扣除元数据后约39.99G
  PE Size               4.00 MiB   # 默认PE大小4MiB(可通过-s选项自定义)
  Total PE              10238      # 总PE数量=39.99G /4MiB≈10238
  Free PE / Size        10238 / 39.99 GiB  # 空闲PE,即VG可用容量
  VG UUID               kjY26m-D0ax-WmMq-fMJv-1Tnb-imqh-GOAWkG
  • 解析:vgcreate将多个 PV 整合为统一存储池,VG 容量 = 所有 PV 容量之和(扣除少量元数据空间);wz--n-是 VG 属性,代表 “可读写、可扩展、无快照”。

3.3 步骤 3:创建逻辑卷(LV)

bash

运行

# 1. 在webapp VG中创建LV(名称webapp01,大小5G)
[root@centos7 ~]# lvcreate -n webapp01 -L 5G webapp
Logical volume "webapp01" created.

# 2. 在dbapp VG中创建跨盘LV(名称data01,大小25G,跨/dev/sdc和/dev/sdd)
[root@centos7 ~]# lvcreate -n data01 -L 25G dbapp
Logical volume "data01" created.

# 3. 查看LV列表(简洁信息)
[root@centos7 ~]# lvs
  LV         VG     Attr       LSize
  data01     dbapp  -wi-a----- 25.00g  # 可读写、激活状态,大小25G
  webapp01   webapp -wi-a----- 5.00g

# 4. 查看LV设备路径(三种格式等价)
[root@centos7 ~]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01
lrwxrwxrwx 1 root root 7 6月 17 18:26 /dev/dbapp/data01 -> ../dm-4
lrwxrwxrwx 1 root root 7 6月 17 18:26 /dev/mapper/dbapp-data01 -> ../dm-4
  • 解析:
    • -n指定 LV 名称,-L指定大小(支持G/M/T单位);
    • 跨盘 LV:data01大小 25G,而dbapp的单个 PV 仅 20G,LVM 自动将数据分散到/dev/sdc(用完 20G)和/dev/sdd(用 5G),实现跨盘存储;
    • LV 设备路径:/dev/VG名称/LV名称是最直观的路径,推荐使用。

3.4 步骤 4:格式化与挂载(投入使用)

bash

运行

# 1. 格式化LV为xfs文件系统(CentOS7默认)
[root@centos7 ~]# mkfs.xfs /dev/webapp/webapp01

# 2. 创建挂载点并临时挂载(重启失效)
[root@centos7 ~]# mkdir /var/www/html
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html

# 3. 持久化挂载(修改/etc/fstab,重启自动挂载)
[root@centos7 ~]# echo '/dev/webapp/webapp01 /var/www/html xfs defaults 0 0' >> /etc/fstab
[root@centos7 ~]# mount -a  # 测试挂载(无报错则配置正确)

# 4. 验证挂载结果
[root@centos7 ~]# df -h /var/www/html
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01    5.0G  140M  4.9G   3% /var/www/html
  • 解析:mount -a会读取/etc/fstab中所有配置并挂载,是验证持久化配置的关键命令,避免因配置错误导致重启后挂载失效。

四、实操模块 2:VG 的扩展与缩减

VG 的扩展 / 缩减本质是 “增减存储池中的 PV”,扩展直接添加新 PV,缩减需先迁移数据(确保 PV 空闲)。

4.1 扩展 VG(增加存储池容量)

bash

运行

# 环境准备:已创建VG webapp(包含/dev/sdb)和LV webapp01(10G)
[root@centos7 ~]# vgcreate webapp /dev/sdb
[root@centos7 ~]# lvcreate -n webapp01 -L 10G webapp

# 扩展VG:向webapp添加新PV(/dev/sdc、/dev/sdd)
[root@centos7 ~]# vgextend webapp /dev/sd{c,d}
Physical volume "/dev/sdc" successfully created.  # 非PV设备会自动初始化为PV
Physical volume "/dev/sdd" successfully created.
Volume group "webapp" successfully extended

# 验证扩展结果(VG容量从20G扩展到60G)
[root@centos7 ~]# vgs webapp
  VG     #PV #LV #SN Attr   VSize   VFree 
  webapp   3   1   0 wz--n- 59.99g 49.99g  # 空闲容量=59.99G-10G=49.99G
  • 解析:vgextend支持直接添加非 PV 设备,会自动执行pvcreate初始化,简化操作流程。

4.2 缩减 VG(移除空闲 PV)

bash

运行

# 1. 查看PV使用状态(/dev/sdb已被LV占用,/dev/sdc、/dev/sdd空闲)
[root@centos7 ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree 
  /dev/sdb   webapp lvm2 a--  <20.00g <10.00g  # 已使用10G(LV占用)
  /dev/sdc   webapp lvm2 a--  <20.00g <20.00g  # 完全空闲
  /dev/sdd   webapp lvm2 a--  <20.00g <20.00g  # 完全空闲

# 2. 直接移除已使用的PV(报错)
[root@centos7 ~]# vgreduce webapp /dev/sdb
Physical volume "/dev/sdb" still in use  # 报错:PV正在使用,无法移除

# 3. 迁移PV数据(将/dev/sdb的数据迁移到/dev/sdd)
[root@centos7 ~]# pvmove /dev/sdb /dev/sdd
/dev/sdb: Moved: 100.00%  # 迁移完成

# 4. 再次查看PV状态(/dev/sdb变为空闲)
[root@centos7 ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree 
  /dev/sdb   webapp lvm2 a--  <20.00g <20.00g  # 数据已迁移,完全空闲
  /dev/sdc   webapp lvm2 a--  <20.00g <20.00g
  /dev/sdd   webapp lvm2 a--  <20.00g <10.00g  # 承接/dev/sdb的10G数据

# 5. 成功移除PV(/dev/sdb)
[root@centos7 ~]# vgreduce webapp /dev/sdb
Removed "/dev/sdb" from volume group "webapp"

# 验证结果(VG仅剩/dev/sdc、/dev/sdd)
[root@centos7 ~]# vgs webapp
  VG     #PV #LV #SN Attr   VSize   VFree 
  webapp   2   1   0 wz--n- 39.99g 29.99g
  • 解析:pvmove是缩减 VG 的关键命令,用于迁移目标 PV 上的所有数据到 VG 内其他 PV,确保目标 PV 变为空闲后才能移除。

五、实操模块 3:LV 与文件系统的扩展 / 缩减

LV 的扩展 / 缩减是 LVM 的核心优势,需注意:xfs 文件系统仅支持扩展,ext4 支持扩展和缩减

5.1 扩展 LV(xfs/ext4 通用)

场景 1:扩展 xfs 文件系统(CentOS7 默认)

bash

运行

# 环境准备:LV webapp01(10G)已挂载到/var/www/html(xfs格式)
[root@centos7 ~]# mkfs.xfs /dev/webapp/webapp01
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html

# 方法1:分步扩展(先扩LV,再扩文件系统)
# 1. 扩展LV(增加2G,总大小12G)
[root@centos7 ~]# lvextend -L +2G /dev/webapp/webapp01
Size of logical volume webapp/webapp01 changed from 10.00 GiB to 12.00 GiB.
Logical volume webapp/webapp01 successfully resized.

# 2. 扩展xfs文件系统(必须指定挂载点)
[root@centos7 ~]# xfs_growfs /var/www/html

# 验证结果
[root@centos7 ~]# df -h /var/www/html
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01    12G  140M  11.9G   2% /var/www/html

# 方法2:一键扩展(-r选项自动扩文件系统,推荐)
[root@centos7 ~]# lvextend -rL 20G /dev/webapp/webapp01  # 直接扩到20G
[root@centos7 ~]# df -h /var/www/html
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01    20G  176M  19.8G   1% /var/www/html
  • 解析:xfs_growfs仅支持扩展,需指定挂载点(而非 LV 设备);lvextend -r会自动识别文件系统类型并扩展,简化操作。
场景 2:扩展 ext4 文件系统

bash

运行

# 环境准备:格式化LV为ext4并挂载
[root@centos7 ~]# umount /var/www/html
[root@centos7 ~]# mkfs.ext4 /dev/webapp/webapp01
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html

# 一键扩展LV到30G(-r自动扩ext4文件系统)
[root@centos7 ~]# lvextend -rL 30G /dev/webapp/webapp01
[root@centos7 ~]# df -h /var/www/html
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01    30G   36K  28G   1% /var/www/html

5.2 缩减 LV(仅支持 ext4 文件系统)

注意事项:缩减有数据丢失风险,需先卸载文件系统,且缩减后容量不能小于当前已用容量。

bash

运行

# 步骤1:卸载文件系统
[root@centos7 ~]# umount /var/www/html

# 步骤2:检查文件系统(修复潜在错误,必须执行)
[root@centos7 ~]# e2fsck -f /dev/webapp/webapp01
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/webapp/webapp01:14/1966080 文件(0.0% 为非连续的), 167445/7864320 块

# 步骤3:缩减ext4文件系统到10G
[root@centos7 ~]# resize2fs /dev/webapp/webapp01 10G
resize2fs 1.45.6 (20-Mar-2020)
将 /dev/webapp/webapp01 上的文件系统调整为 2621440 个块(每块 4k)。

# 步骤4:缩减LV到10G(需与文件系统大小一致)
[root@centos7 ~]# lvreduce -L 10G /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 30.00 GiB to 10.00 GiB.
Logical volume webapp/webapp01 successfully resized.

# 步骤5:挂载验证
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html
[root@centos7 ~]# df -h /var/www/html
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/webapp-webapp01    9.7G   36K  9.3G   1% /var/www/html
  • 解析:resize2fs用于调整 ext4 文件系统大小,e2fsck -f强制检查文件系统完整性,避免缩减时数据损坏。

六、实操模块 4:LV 快照(数据备份与恢复)

LVM 快照是 “只读 / 可写” 的逻辑卷副本,用于记录某一时刻的 LV 数据,支持快速恢复。

bash

运行

# 环境准备:LV webapp01(10G)已挂载,存储有数据
[root@centos7 ~]# ls /var/www/html
host.conf hostname hosts hosts.allow hosts.deny

# 1. 创建LV快照(名称webapp01-snap1,大小10G,与原LV容量一致)
[root@centos7 ~]# lvcreate -s -n webapp01-snap1 -L 10G /dev/webapp/webapp01
Logical volume "webapp01-snap1" created.

# 2. 挂载快照(只读挂载,避免修改快照数据)
[root@centos7 ~]# mount -o ro /dev/webapp/webapp01-snap1 /mnt/snap1

# 3. 验证快照数据(与原LV一致)
[root@centos7 ~]# ls /mnt/snap1
host.conf hostname hosts hosts.allow hosts.deny

# 4. 原LV数据变更(模拟误操作)
[root@centos7 ~]# rm -rf /var/www/html/*  # 删除原LV所有数据

# 5. 从快照恢复数据(卸载原LV和快照)
[root@centos7 ~]# umount /var/www/html /mnt/snap1
[root@centos7 ~]# lvconvert --merge /dev/webapp/webapp01-snap1  # 合并快照到原LV

# 6. 重新挂载原LV,验证恢复结果
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html
[root@centos7 ~]# ls /var/www/html
host.conf hostname hosts hosts.allow hosts.deny  # 数据已恢复
  • 解析:lvcreate -s创建快照,快照容量需不小于原 LV 的变更数据量(推荐与原 LV 容量一致);lvconvert --merge将快照数据合并到原 LV,实现快速恢复。

七、实操模块 5:RAID 逻辑卷(冗余 + 性能)

LVM 支持创建 RAID 类型的逻辑卷(如 RAID1/5),结合 LVM 的灵活性和 RAID 的冗余 / 性能优势。

7.1 创建 RAID1 逻辑卷(镜像冗余)

bash

运行

# 环境准备:VG webapp包含/dev/sdb、/dev/sdc、/dev/sdd
[root@centos7 ~]# vgcreate webapp /dev/sd{b,c,d}

# 1. 创建RAID1逻辑卷(名称webapp01,大小15G,镜像存储)
[root@centos7 ~]# lvcreate --type raid1 -n webapp01 -L 15G webapp
Logical volume "webapp01" created.

# 2. 格式化并挂载
[root@centos7 ~]# mkfs.xfs /dev/webapp/webapp01
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html
[root@centos7 ~]# cp /etc/ho* /var/www/html  # 复制测试数据

# 3. 模拟磁盘故障(破坏/dev/sdd)
[root@centos7 ~]# dd if=/dev/zero of=/dev/sdd bs=1M count=256  # 覆盖磁盘开头

# 4. 验证数据可用性(故障后数据仍可访问)
[root@centos7 ~]# ls /var/www/html
host.conf hostname hosts hosts.allow hosts.deny  # 数据正常

# 5. 修复RAID1逻辑卷
# 5.1 移除故障PV(/dev/sdd)
[root@centos7 ~]# vgreduce --removemissing webapp --force
Removed "/dev/sdd" from volume group "webapp"

# 5.2 重新添加新PV(/dev/sdd,假设已更换新磁盘)
[root@centos7 ~]# vgextend webapp /dev/sdd

# 5.3 修复RAID1逻辑卷
[root@centos7 ~]# lvconvert --repair /dev/webapp/webapp01
Logical volume webapp/webapp01 successfully repaired.

# 6. 验证修复结果
[root@centos7 ~]# pvs | grep webapp
  /dev/sdb   webapp lvm2 a--  <20.00g 4.99g
  /dev/sdc   webapp lvm2 a--  <20.00g 4.99g
  /dev/sdd   webapp lvm2 a--  <20.00g <20.00g
  • 解析:--type raid1指定创建镜像逻辑卷,数据会同步存储到多个 PV;lvconvert --repair用于修复故障的 RAID 逻辑卷,自动同步数据到新 PV。

7.2 创建 RAID5 逻辑卷(条带化 + 奇偶校验)

bash

运行

# 创建RAID5逻辑卷:可用容量5G,3个条带,条带大小64KiB,4个设备(含1个校验盘)
[root@centos7 ~]# lvcreate --type raid5 -L 5G -i 3 -I 64 -n mylv vg00
# 选项说明:
# -i 3:条带数量(数据分割为3块);
# -I 64:条带大小64KiB;
# --type raid5:RAID5类型(需至少4个PV)

八、LVM 命令速查表

操作场景 核心命令
创建 PV pvcreate /dev/sd{b,c,d}
创建 VG vgcreate webapp /dev/sd{b,c,d}
创建 LV lvcreate -n webapp01 -L 10G webapp
扩展 VG vgextend webapp /dev/sde
缩减 VG pvmove /dev/sdb /dev/sdc && vgreduce webapp /dev/sdb
扩展 LV(xfs) lvextend -rL 20G /dev/webapp/webapp01
缩减 LV(ext4) umount /var/www/html && e2fsck -f /dev/webapp/webapp01 && resize2fs /dev/webapp/webapp01 10G && lvreduce -L 10G /dev/webapp/webapp01
创建 LV 快照 lvcreate -s -n snap1 -L 10G /dev/webapp/webapp01
创建 RAID1 LV lvcreate --type raid1 -n webapp01 -L 15G webapp
删除 LVM(反向流程) umount /var/www/html && lvremove /dev/webapp/webapp01 && vgremove webapp && pvremove /dev/sd{b,c,d}
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐