当前位置:首页>Linux>一文吃透 Linux LVM:从原理到实战,让磁盘管理像搭积木一样简单

一文吃透 Linux LVM:从原理到实战,让磁盘管理像搭积木一样简单

  • 2026-10-11 06:46:41
一文吃透 Linux LVM:从原理到实战,让磁盘管理像搭积木一样简单
在云原生与 AI 大模型横行的 2026,存储依然是绕不开的"地基"。无论你跑的是 Kubernetes、向量数据库还是大模型训练任务,底层那块"会变魔术的磁盘技术"——LVM,依然是 Linux 运维工程师的必修课。

一、为什么我们还在聊 LVM?

很多人以为有了云盘、有了分布式存储,本地磁盘管理就过时了。事实恰恰相反:

  • 私有化部署:信创、金融、能源等场景仍以裸金属为主,LVM 是标配。

  • AI 训练节点:动辄数十块 NVMe 盘,扩缩容、快照、迁移全靠 LVM 抽象层。

  • 容器持久化:local-path-provisioner、OpenEBS LocalPV-LVM 都把 LVM 作为底座。

  • 单卷容量受限:很多存储阵列单 LUN 最大 2T、8T、16T,超过就必须靠 LVM 拼装。

一句话:LVM 不是过时的技术,而是被默默用在所有"看起来很现代"的方案里。


二、传统分区的痛,你中过几枪?

回想一下没有 LVM 的日子:

场景传统分区方案痛点指数
/var 装满了备份 → 重新分区 → 还原数据★★★★★
想把两块盘合并使用重做分区,数据搬家★★★★
业务高峰要扩容必须停机★★★★★
想做一致性备份锁库或停服★★★★

LVM 的出现,把这些痛点几乎一次性解决。


三、LVM 是什么?三层抽象搞清楚

LVM(Logical Volume Manager,逻辑卷管理器)在硬盘与文件系统之间插入了一层"逻辑层",把物理磁盘的细节屏蔽掉。

   /dev/sda1   /dev/sdb1   /dev/sdc      ← PV (物理卷)        \         |         /         \        |        /            volume group  vg0            ← VG (卷组:一个大存储池)          /       |        \         /        |         \       lv_app   lv_db    lv_log          ← LV (逻辑卷)         |        |         |       ext4     xfs      xfs             ← 文件系统

三个核心概念:

  • PV(Physical Volume)物理卷:一块硬盘、一个分区,或一个 RAID 设备。

  • VG(Volume Group)卷组:多个 PV 汇成的"存储池"。

  • LV(Logical Volume)逻辑卷:从 VG 里切出来的"虚拟分区",可随时扩缩。

还有两个"小弟"概念:

  • PE(Physical Extent):PV 上等大的最小分配单元(默认 4MB)。

  • LE(Logical Extent):LV 的最小单元,与 PE 一一映射。


四、实战速查:从零搭一套 LVM

假设有三块新盘:/dev/sdb、/dev/sdc、/dev/sdd

1️⃣ 把分区类型改成 LVM(8e)

fdisk /dev/sdb#  n → 新建分区#  t → 更改类型#  8e → Linux LVM#  w → 写入并退出

💡 如果整盘直接当 PV 用,可以省去这一步。

2️⃣ 创建物理卷 PV

pvcreate /dev/sdb /dev/sdc /dev/sddpvs        # 查看 PV 列表pvdisplay  # 查看详情

3️⃣ 创建卷组 VG

vgcreate datavg /dev/sdb /dev/sdc /dev/sddvgsvgdisplay datavg

4️⃣ 创建逻辑卷 LV

# 创建一个 100G 的 LVlvcreate -L 100G -n lv_app datavg# 把 VG 剩余空间全部用完lvcreate -l 100%FREE -n lv_data datavg

5️⃣ 创建文件系统并挂载

mkfs.xfs /dev/datavg/lv_appmkdir /data/appmount /dev/datavg/lv_app /data/app# 开机自动挂载echo "/dev/datavg/lv_app /data/app xfs defaults 0 0" >> /etc/fstab

至此,一套可弹性伸缩的存储就搭好了。


五、扩容与缩容:LVM 真正的杀手锏

在线扩容(最常用)

# 1. 给 VG 加新盘pvcreate /dev/sdevgextend datavg /dev/sde# 2. 扩大 LVlvextend -L +50G /dev/datavg/lv_app# 或一次性吃掉 VG 所有剩余空间lvextend -l +100%FREE /dev/datavg/lv_app# 3. 扩容文件系统(无需卸载)xfs_growfs /data/app                    # XFSresize2fs /dev/datavg/lv_app            # ext4

整个过程业务零中断,这就是 LVM 的核心价值。

缩容(谨慎操作)

⚠️ XFS 不支持在线缩容;ext4 可以,但建议先备份。

umount /data/appe2fsck -f  /dev/datavg/lv_appresize2fs /dev/datavg/lv_app 50Glvreduce -L  50G /dev/datavg/lv_appmount  /data/app

六、快照(Snapshot):一致性备份的神器

业务场景:夜里 2 点要备份数据库,但又不能停服——快照就是为此而生。

# 创建一个 10G 的快照lvcreate -L 10G -s -n lv_app_snap /dev/datavg/lv_app# 挂载快照,拷出来备份mkdir /backup/snapmount -o ro,nouuid /dev/datavg/lv_app_snap /backup/snaptar czf /backup/app_$(date +%F).tar.gz -C /backup/snap .# 备份完删除快照umount /backup/snaplvremove -f /dev/datavg/lv_app_snap

原理:CoW(Copy-on-Write,写时复制)。快照只记录"差异块",所以创建非常快、占用空间少。

⚠️ 如果快照空间被写满,会自动失效。建议预留够,或用 lvextend 在线扩容。


七、进阶玩法:LVM2 不只是分区工具

1. 在线数据迁移

要换一块新盘,把旧盘上的数据迁走:

pvmove /dev/sdb /dev/sde     # 把 sdb 上的数据搬到 sdevgreduce datavg /dev/sdb     # 从 VG 中移除pvremove /dev/sdb            # 拔掉 PV

全程业务不停——这在传统分区时代是不可想象的。

2. 镜像(高可用)

lvconvert -m 1 /dev/datavg/lv_db    # 给 lv_db 加一个镜像

一块盘坏了,业务依然可用。

3. 条带化(高性能)

lvcreate -i 3 -I 64 -L 500G -n lv_fast datavg# -i  3:跨 3 个 PV 条带化# -I  64:条带大小 64KB

类似软 RAID0,适合 AI 训练、日志写入等吞吐密集场景。

4. 透明加密

cryptsetup luksFormat  /dev/datavg/lv_secret

配合 dm_crypt,可以对任意 LV 做透明加密,满足等保合规。


八、踩坑笔记

  1. XFS 不能缩容:选文件系统前想清楚业务是否可能缩容。

  2. pvmove 不可中断:尤其是条带化 LV,中断可能导致数据损坏,务必先备份。

  3. 快照空间要预估:变化量大的卷,快照至少给原卷的 10%~20%。

  4. /boot 不要放 LVM 上:老 GRUB 不识别,新版虽然支持,但排障麻烦。

  5. 多路径环境用 multipath 设备名:不要直接用 /dev/sdX,重启后会漂移。

  6. 生产环境一律 vgchange -a n 后再拔盘:避免脏元数据。


九、写在最后

LVM 已经诞生 20 多年,但在 2026 年的今天,它依然是 Linux 存储栈中最稳、最实用的那一层。无论你是在维护一台老古董服务器,还是在搭建 AI 训练集群,掌握 LVM 都能让你在关键时刻"救场"。

记住这张速查图:

pvcreate  →  vgcreate  →  lvcreate  →  mkfs  →  mount   ↑                          ↑            ↑ 加盘做PV    PV组成VG    从VG切LV

把它收藏起来,下一次半夜被磁盘告警叫醒时,你会感谢自己。


📌 命令速查表

操作命令
查看 PV / VG / LVpvs / vgs / lvs
详细信息pvdisplay / vgdisplay / lvdisplay
扩 VGvgextend <vg> <pv>
缩 VGvgreduce <vg> <pv>
扩 LVlvextend -L +10G <lv>
缩 LVlvreduce -L -10G <lv>
XFS 扩容xfs_growfs <挂载点>
ext4 扩缩resize2fs <lv> [size]
创建快照lvcreate -s -L 5G -n snap <lv>
迁移数据pvmove <src> <dst>

觉得有用?点个在看,转发给身边的运维兄弟,关键时刻能救命

最新文章

随机文章