lvm的概念和操作(linux)
LVM(Logical Volume Manager,逻辑卷管理器)是 Linux 中一套非常强大、灵活的磁盘管理机制。它彻底改变了传统“一个分区 = 一个文件系统”的刚性模式,让你像搭积木一样自由组合、动态调整存储空间。
下面我用 通俗易懂 + 实战导向 的方式,带你从零搞懂 LVM 的核心概念和完整操作流程
🌟 一、为什么需要 LVM?—— 先看痛点
❌ 传统分区的困境:
- 你给
/home分了 50GB,结果用户数据暴涨到 60GB → 空间不足,只能重装或迁移数据 - 你给
/var分了 100GB,结果只用了 20GB → 大量空间浪费 - 想扩容?必须停机、备份、重新分区、恢复……服务中断,风险高
✅ LVM 的优势:
- 在线扩容/缩容:不用卸载分区(ext4 缩容除外),服务不中断
- 跨物理磁盘:可以把
/dev/sdb和/dev/sdc合并成一个“大池子” - 快照备份:秒级创建数据快照,升级前备份超安心
- 弹性分配:今天给 A 应用 20GB,明天回收给 B 应用 30GB
💡 一句话理解 LVM:
它把物理硬盘“虚拟化”成一个可伸缩的存储池,你从中“切蛋糕”(逻辑卷),想切多大就多大,还能随时改!
🧱 二、LVM 三层架构(核心概念)
LVM 采用 三层抽象结构,像搭积木一样层层构建:
物理磁盘/分区
↓
【物理卷 PV】 ← 最底层,原材料
↓
【卷组 VG】 ← 存储池(把多个 PV 合并)
↓
【逻辑卷 LV】 ← 虚拟分区(从 VG 切出来,直接挂载使用)
↓
文件系统(ext4/xfs)→ 挂载到 /data、/app 或扩容根目录等
1️⃣ 物理卷(PV, Physical Volume)
- 是 LVM 的最底层单元
- 可以是:
- 整块硬盘(如
/dev/sdb) - 硬盘分区(如
/dev/sda3,类型设为8e) - RAID 设备(如
/dev/md0)
- 整块硬盘(如
- 创建后,LVM 会在其末尾写入元数据(不影响已有数据,但建议先清空)
2️⃣ 卷组(VG, Volume Group)
- 由 1个或多个 PV 组成,形成一个统一的存储池
- 所有 PV 的空间被合并,VG 总容量 = 所有 PV 容量之和
- 可随时添加新 PV 扩展 VG(比如加新硬盘)
3️⃣ 逻辑卷(LV, Logical Volume)
- 从 VG 中“切”出来的虚拟分区
- 可以格式化为 ext4、xfs 等文件系统
- 直接挂载使用(如
mount /dev/vg_data/lv_app /app) - 关键特性:大小可动态调整!
🔍 补充概念:
- PE(Physical Extent):PV 中的最小分配单位,默认 4MB
- LE(Logical Extent):LV 中的最小单位,与 PE 一一对应
🛠️ 三、LVM 基本操作流程
# 1. 创建物理卷(PV) sudo pvcreate /dev/sdb1 # 2. 创建卷组(VG) sudo vgcreate vg_data /dev/sdb1 # 3. 创建逻辑卷(LV) sudo lvcreate -L 50G -n lv_app vg_data # 4. 格式化或重新扩容 sudo mkfs.xfs /dev/vg_data/lv_app 或 resize2fs /dev/mapper/vg_node003-lv_root # 5. 挂载(如果扩容就不用挂载了) sudo mkdir /app sudo mount /dev/vg_data/lv_app /app
四. 辅助命令(必会!)
| 命令 | 作用 |
|---|---|
lsblk |
查看所有块设备(磁盘+分区+挂载点) |
df -Th |
查看已挂载分区的使用情况 |
blkid |
查看分区 UUID 和文件系统类型 |
mount /dev/sdXN /mnt |
临时挂载分区 |
umount /mnt |
卸载分区 |
|
查看物理卷 |
vgs / vgdisplay |
查看卷组 |
lvs / lvdisplay |
查看逻辑卷 |
| vgextend vg_node003 /dev/sdb | 追加到已有卷组 |
| lvextend -l +100%FREE /dev/mapper/vg_node003-lv_root | 扩大跟目录或已有目录(df -Th可以查出名称) |
| resize2fs/xfs_growfs | 扩大后,重新调整文件系统大小 |
| sudo vgremove vg_old |
删除空的 VG |
| 操作 | 作用 |
|---|---|
pvmove |
在线迁移数据,不中断服务(核心!) |
vgreduce |
从 VG 中移除空 PV |
vgextend |
将 PV 加入新 VG |
vgremove |
删除空 VG |
一句话总结流程
新硬盘 →pvcreate→vgextend→ (可选)lvextend+resize2fs/xfs_growfs
🛠️ 五、LVM 完整操作流程(实战演示)
假设你ubuntu系统本身已有硬盘/dev/sda(20G),再安装系统时已经做了lvm,已经给系统盘分10G左右,lv有8G空闲,现在要如下操作,
新增硬盘
/dev/sdb( 20GB),追加到原有的vg中,全部分给根目录。1.现在磁盘状态:

2.加硬盘


# 1. 扩容 VG(如有新盘) sudo pvcreate /dev/sdb #创建pv #sudo vgcreate YOUR_VG #创建vg卷组 #sudo vgextend YOUR_VG /dev/sdb #给已有卷组追加 sudo vgextend ubuntu-vg /dev/sdb #给已有卷组追加 # 2. 扩容 LV #sudo lvextend -L +20G /dev/YOUR_VG/YOUR_LV #给分区扩容 #sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv #扩容全部空间 sudo lvextend -L +20G /dev/mapper/ubuntu--vg-ubuntu--lv #给根目录扩容 # 3. 扩展文件系统 df -T / | awk 'NR==2 {print $2}' | \ if grep -q "xfs"; then sudo xfs_growfs /; else sudo resize2fs /dev/YOUR_VG/YOUR_LV; fi
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
# 4. 验证 df -h /
最后的结果



浙公网安备 33010602011771号