LVM 解决什么

普通分区 = 固定大小,满了就要重新分区(停机 + 数据迁移)。

LVM(Logical Volume Manager)= 在物理盘和文件系统中间加一层抽象:

物理盘                  PV(Physical Volume)
                          ↓ 组成
                       VG(Volume Group)
                          ↓ 分出
                       LV(Logical Volume)
                          ↓ 格式化
                       文件系统
                          ↓ 挂载
                       /data

好处:

  • 多盘组合成大池子
  • 在线扩容(不停机)
  • 快照(备份用)
  • 精简配置(thin provisioning)

完整流程

1. 装 LVM

sudo apt install lvm2

2. 把物理盘转 PV

sudo pvcreate /dev/sdb /dev/sdc

sudo pvs
# PV         VG  Fmt  Attr PSize   PFree
# /dev/sdb       lvm2 ---  100.00g 100.00g
# /dev/sdc       lvm2 ---  100.00g 100.00g

3. 多个 PV 组成 VG

sudo vgcreate datavg /dev/sdb /dev/sdc

sudo vgs
# VG     #PV #LV #SN Attr   VSize   VFree
# datavg   2   0   0 wz--n- 200.00g 200.00g

4. 从 VG 分 LV

sudo lvcreate -L 50G -n datalv datavg
# 或按百分比
sudo lvcreate -l 50%FREE -n applv datavg

sudo lvs
# LV     VG     Attr       LSize
# datalv datavg -wi-a----- 50.00g

5. 格式化 + 挂载

sudo mkfs.ext4 /dev/datavg/datalv
sudo mkdir /data
sudo mount /dev/datavg/datalv /data

加到 fstab(用 LV 路径,不是 UUID):

/dev/datavg/datalv  /data  ext4  defaults  0  2

在线扩容(LVM 最爽的功能)

数据盘满了——VG 还有空间:

# 1. 扩 LV(多分 50G)
sudo lvextend -L +50G /dev/datavg/datalv

# 2. 扩文件系统
sudo resize2fs /dev/datavg/datalv          # ext4
sudo xfs_growfs /data                       # xfs

# 完成!不停机不卸载
df -h /data

VG 加新盘

# 新插了 /dev/sdd
sudo pvcreate /dev/sdd
sudo vgextend datavg /dev/sdd
# 现在 VG 多 100G 可用

快照(备份神器)

# 建一个 10G 的快照
sudo lvcreate -L 10G -s -n datasnap /dev/datavg/datalv

# 用快照备份(数据库 / 大文件备份不停机)
sudo mount -o ro /dev/datavg/datasnap /mnt/snap
cp -a /mnt/snap/important /backup/
sudo umount /mnt/snap

# 删快照
sudo lvremove /dev/datavg/datasnap

⚠ 快照的"大小"是预留变化空间——原 LV 改的越多,快照占用越多。改超过快照大小 → 快照失效。

缩 LV(少用 + 危险)

sudo umount /data
sudo e2fsck -f /dev/datavg/datalv
sudo resize2fs /dev/datavg/datalv 30G       # 先缩文件系统
sudo lvreduce -L 30G /dev/datavg/datalv     # 再缩 LV
sudo mount /data

先缩文件系统再缩 LV,反过来数据丢光操作前必须备份

删除(清干净)

sudo umount /data
sudo lvremove /dev/datavg/datalv
sudo vgremove datavg
sudo pvremove /dev/sdb /dev/sdc

实战:云上扩盘的标准做法

1. 云控制台扩盘 100G → 150G
2. 服务器看到 /dev/vda(系统盘)已经 150G 但分区还是 100G

3. sudo growpart /dev/vda 1     # 扩分区
4. sudo resize2fs /dev/vda1     # 扩文件系统
5. df -h                        # 验证

云上系统盘通常用普通分区不用 LVM——growpart + resize2fs 直接搞定。数据盘建议 LVM。

下一篇:磁盘配额。