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 卸载分区
pvs/pvdisplay 查看物理卷
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.现在磁盘状态:

image

2.加硬盘

image

 

image

 

 

# 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 /

最后的结果

image

 

image

 

 
 
 
 
 
 
 
posted @ 2026-01-09 11:40  与f  阅读(3)  评论(0)    收藏  举报