磁盘与存储管理 — LVM 逻辑卷实战

📖 知识点简介

运维日常中,"磁盘满了"是最常见的报警之一。面对分区空间不足、扩容困难的问题,LVM(Logical Volume Manager,逻辑卷管理器) 提供了灵活的解决方案------它打破了传统分区"固定大小"的限制,支持在线扩容、缩容、快照和跨磁盘聚合。掌握 LVM 是现代 Linux 运维的必修课。

🛠 核心命令整理

1. 物理卷(PV)管理

命令 说明
pvcreate /dev/sdb1 将分区初始化为物理卷
pvs 简要查看所有物理卷
pvdisplay 查看物理卷详细信息
pvremove /dev/sdb1 移除物理卷(清空 LVM 元数据)

2. 卷组(VG)管理

命令 说明
vgcreate vg_data /dev/sdb1 /dev/sdc1 创建卷组,可包含多个 PV
vgs 简要查看所有卷组
vgdisplay vg_data 查看卷组详情(PE 大小、总量、剩余空间)
vgextend vg_data /dev/sdd1 向卷组添加新物理卷(扩容!)
vgreduce vg_data /dev/sdb1 从卷组移除物理卷

3. 逻辑卷(LV)管理

命令 说明
lvcreate -L 100G -n lv_data vg_data 创建 100GB 逻辑卷
lvcreate -l 100%FREE -n lv_data vg_data 用全部剩余空间创建
lvs 简要列出所有逻辑卷
lvdisplay vg_data/lv_data 查看逻辑卷详情
lvextend -L +50G /dev/vg_data/lv_data 在线扩容 50GB(不用卸载!)
lvextend -l +100%FREE /dev/vg_data/lv_data 用尽 VG 所有剩余空间
lvreduce -L 50G /dev/vg_data/lv_data 缩容(⚠️ 需先缩文件系统)
lvremove /dev/vg_data/lv_data 删除逻辑卷

4. 文件系统感知(重要!)

bash 复制代码
# 扩容后必须同步文件系统!

# ext4 文件系统
resize2fs /dev/vg_data/lv_data

# xfs 文件系统
xfs_growfs /dev/vg_data/lv_data

# 也可以一步到位(内核 3.6+ 支持)
lvextend -L +50G /dev/vg_data/lv_data --resizefs

📝 实操示例

示例 1:从零搭建 LVM 存储

bash 复制代码
# 查看可用磁盘
lsblk | grep -E "sd[b-z]|nvme[0-9]n[0-9]"
# 输出: sdb      8:16   0  500G  0 disk
#       sdc      8:32   0  500G  0 disk

# 创建分区并标记为 LVM(使用 parted 或 fdisk)
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart primary 0% 100%
parted /dev/sdb set 1 lvm on
# 同样操作 /dev/sdc

# 1. 创建 PV
pvcreate /dev/sdb1 /dev/sdc1

# 2. 创建 VG(将两块 500G 盘聚合为 1T 池)
vgcreate vg_data /dev/sdb1 /dev/sdc1

# 3. 创建 LV
lvcreate -L 800G -n lv_app vg_data
lvcreate -L 150G -n lv_log vg_data

# 4. 格式化并挂载
mkfs.ext4 /dev/vg_data/lv_app
mkfs.ext4 /dev/vg_data/lv_log
mkdir /data /logs
mount /dev/vg_data/lv_app /data
mount /dev/vg_data/lv_log /logs

# 5. 写入 fstab 开机自动挂载
echo "/dev/vg_data/lv_app  /data  ext4  defaults  0  2" >> /etc/fstab
echo "/dev/vg_data/lv_log  /logs  ext4  defaults  0  2" >> /etc/fstab

示例 2:磁盘快满了?在线扩容!

bash 复制代码
# 场景:/data 目录告警,使用率已达 92%

# 第一步:查看剩余空间
vgs vg_data
# 输出: VG #PV #LV #SN Attr   VSize  VFree
#           vg_data   2   2   0 wz--n- 1000G  50G

# 剩余 50G,但不够?加一块新盘
pvcreate /dev/sdd1
vgextend vg_data /dev/sdd1   # 再追加 500G

# 第二步:扩容 LV + 同步文件系统(一步到位)
lvextend -L +200G /dev/vg_data/lv_app --resizefs

# 第三步:验证
df -h /data
# /dev/mapper/vg_data-lv_app  1000G  740G  260G  74%  /data
# ✅ 在线扩容成功,无需重启、无需卸载!

示例 3:LVM 快照做临时备份

bash 复制代码
# 给正在运行的数据库 LV 打快照(只读,做备份前一致性检查)
lvcreate -L 10G -s -n lv_db_snap /dev/vg_data/lv_db

# 挂载快照检查数据一致性
mkdir /snap_mount
mount /dev/vg_data/lv_db_snap /snap_mount

# 检查完成后清理
umount /snap_mount
lvremove /dev/vg_data/lv_db_snap

⚠️ 常见坑点/注意事项

  1. XFS 不支持缩容! RedHat/CentOS 7+ 默认用 XFS,一旦扩容就不能缩。需要缩容只能用 ext4,且必须按顺序:先缩文件系统 → 再缩 LV。
  2. lvextend 后一定要 resize2fs / xfs_growfs ,否则内核仍然认旧大小,df -h 看不到变化。
  3. PV 去除前必须确认 LV 不在其上pvmove /dev/sdb1 将数据迁移到同 VG 的其他 PV 上,再 vgreduce vg_data /dev/sdb1 才能安全移除。
  4. 快照卷会随着源卷变化而增长:源卷写入越多,快照占用越大。快照满了会自动失效(变成"invalid"),定期清理。
  5. PE 大小影响容量上限:默认 PE=4MiB,单 LV 最大 4PB,一般够用。超大规模存储可酌情调整。
  6. /boot 不能放 LVM 上:GRUB(Legacy)不支持 LVM 分区。/boot 必须是标准分区。
相关推荐
星轨zb1 小时前
[Corner项目实战]Spring Boot + LangChain4j Tool Calling实战:让AI自动选择推荐策略
人工智能·spring boot·后端·langchain4j
机智的大狸子1 小时前
我给一个仓库系统写了个"会自己点界面"的 AI 测试 Agent,踩平了 WPF 自动化的所有坑
后端
未秃头的程序猿1 小时前
别再重复适配了!用MCP给AI配个"万能工具箱",Java项目接入新能力再也不改代码
后端·ai编程·mcp
Python私教1 小时前
002 Pandas 的流行原因
人工智能·后端·机器学习
Jul1en_1 小时前
【SpringCloud】SkyWalking 链路追踪知识详解及部署教程
java·后端·spring·spring cloud·skywalking
宸津-代码粉碎机1 小时前
Spring AI 企业级实战|智能记忆摘要+自动遗忘机制落地,彻底解决上下文爆炸与Token冗余
java·大数据·人工智能·后端·python·spring·云计算
摸摸芋1 小时前
Django框架(1)
后端·python·django
摇滚侠2 小时前
SSM 框架实战教程 SpringBoot 自动配置 176-179
java·spring boot·后端
ywl4708120872 小时前
spring单列bean之循环依赖核心源码解读
java·后端·spring