云计算百科
云计算领域专业知识百科平台

LVM逻辑卷管理实战:PV、VG、LV创建、扩容与快照

传统分区一旦划好,想扩就得备份、删分区、重划、再恢复,全程要停机。LVM(Logical Volume Manager)在物理硬盘和文件系统之间加了一层抽象:把多块盘拼成一个大池,再从池里按需切逻辑卷。扩容缩容不用动物理盘,快照做备份也方便。这一篇从创建、在线扩容、缩容到快照完整走一遍,顺带把最容易搞反的缩容顺序讲清楚。

一、先理清三层结构

概念全称是什么
PV Physical Volume 物理卷 一块盘或一个分区,pvcreate 之后的状态
VG Volume Group 卷组 把多个 PV 捆在一起的存储池
LV Logical Volume 逻辑卷 从 VG 里切出来、给文件系统用的"虚拟分区"
PE Physical Extent VG 的最小分配单元,默认 4MB

理解方式很简单:VG 是一块大画布,LV 是从画布上剪下来的画纸,文件系统就画在画纸上。新盘加进来就是往画布上添料,扩 LV 就是把画纸拉大——只要画布上还有空余,文件系统跟着长就行。

二、安装与准备

Ubuntu/Debian 上先装:

sudo apt install lvm2

CentOS/Rocky 最小化安装通常自带,缺了就 sudo dnf install lvm2。

假设新插了两块空盘 /dev/sdb、/dev/sdc,先 lsblk 确认没挂着数据,再建 PV:

sudo pvcreate /dev/sdb /dev/sdc

预期输出:

Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.

pvcreate 会抹掉盘上原有分区表和数据,只对确认不要了的盘执行。查看 PV:

sudo pvs

预期输出:

PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 — 200.00g 200.00g
/dev/sdc lvm2 — 200.00g 200.00g

三、创建 VG 和 LV

建卷组

sudo vgcreate vg_data /dev/sdb /dev/sdc

预期输出:

Volume group "vg_data" successfully created

vg_data 是自己起的名字。两块盘现在合成一个 400G 的池子:

sudo vgs

预期输出:

VG #PV #LV #SN Attr VSize VFree
vg_data 2 0 0 wz–n- 400.99g 400.99g

VFree 就是池子里还剩多少没用。

建逻辑卷并格式化

切一个 100G 的 LV:

sudo lvcreate -n lv_data -L 100G vg_data

预期输出:

Logical volume "lv_data" created.

也可以用占比方式,把整个池子一次切完:

sudo lvcreate -n lv_all -l 100%FREE vg_data

-L 按大小给(10G),-l 按 PE 数量或百分比给(100%FREE),别搞混。

格式化并挂载:

sudo mkfs.ext4 /dev/vg_data/lv_data
sudo mkdir -p /data
sudo mount /dev/vg_data/lv_data /data

LV 的设备节点有两个等价路径:/dev/vg_data/lv_data 和 /dev/mapper/vg_data-lv_data,fstab 里写哪个都行,推荐前者,可读性好。

四、在线扩容:最常用的操作

业务涨了,/data 不够用了。流程是:先加盘进 VG,再扩 LV,最后扩文件系统。

第一步:新盘加入 VG

假设又插了一块 /dev/sdd:

sudo pvcreate /dev/sdd
sudo vgextend vg_data /dev/sdd

vgs 里 VFree 会多出这 200G。

第二步:扩 LV 和文件系统

ext4 可以在线扩(挂载状态下直接长),一条命令连 LV 带文件系统一起扩:

sudo lvextend -L +50G -r /dev/vg_data/lv_data

预期输出(节选):

Size of logical volume vg_data/lv_data changed from 100.00 GiB to 150.00 GiB.
Logical volume vg_data/lv_data successfully resized.
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/vg_data-lv_data is mounted on /data; on-line resizing required

-r 是关键:它让 lvextend 自动调用 resize2fs(ext4)或 xfs_growfs(XFS),不用自己再跑一遍。

如果不加 -r,得手动分两步:

sudo lvextend -L +50G /dev/vg_data/lv_data
sudo resize2fs /dev/vg_data/lv_data # ext4

XFS 注意:XFS 只能扩不能缩,而且 xfs_growfs 后面跟的是挂载点,不是设备:

sudo lvextend -L +50G -r /dev/vg_data/lv_data # -r 会自动调 xfs_growfs
# 手动写法:
sudo xfs_growfs /data

五、缩容:顺序错了会丢数据

缩容比扩容危险得多,而且 XFS 根本不支持缩,下面只讲 ext4。顺序必须是:先缩文件系统,再缩 LV。反过来——先把 LV 切小,文件系统还以为自己占着更大的地盘,直接损坏。

完整步骤:

sudo umount /data
sudo e2fsck -f /dev/vg_data/lv_data # 必须先检查
sudo resize2fs /dev/vg_data/lv_data 80G # 文件系统缩到 80G
sudo lvreduce -L 80G /dev/vg_data/lv_data # LV 再缩到 80G
sudo mount /data

预期输出(resize2fs,节选):

Resizing the filesystem on /dev/mapper/vg_data-lv_data to 20971520 (4k) blocks.
The filesystem on /dev/mapper/vg_data-lv_data is now 20971520 (4k) blocks long.

几个硬规矩:

  • 必须先 umount,挂载状态下缩 ext4 会出问题。
  • 必须先 e2fsck -f,文件系统不干净时 resize2fs 拒绝干活。
  • 新大小要给文件系统留余量:resize2fs 写 80G,lvreduce 也写 80G,别让 LV 比文件系统还小。
  • 缩容前把 /data 里的重要数据备份一份。这是少数"操作前必须备份"的场景。

六、快照:给 LV 拍个照

LVM 快照在某一瞬间冻结 LV 的视图,适合备份前先打个快照,在快照上跑备份,不影响业务盘。

sudo lvcreate -s -n lv_data_snap -L 2G /dev/vg_data/lv_data

预期输出:

Logical volume "lv_data_snap" created.

预期输出里 -L 2G 是快照本身的容量,存"原 LV 在快照期间被改动的数据块"。原盘写得越多,快照占用越大,撑满了快照就作废。数据库类场景快照大小按预期变更量估。

快照挂上来看看:

sudo mkdir -p /mnt/snap
sudo mount -o ro /dev/vg_data/lv_data_snap /mnt/snap
ls /mnt/snap

备份完,删掉快照:

sudo umount /mnt/snap
sudo lvremove /dev/vg_data/lv_data_snap

七、⚠️ 常见错误

  • 缩容顺序搞反:先 lvreduce 再 resize2fs,文件系统直接损坏。牢记"文件系统先行"。
  • XFS 上跑 resize2fs:XFS 不认,报 Bad magic number。XFS 用 xfs_growfs,而且不能缩。
  • 忘了 -r 以为扩完了:LV 大了,文件系统没长,df -h 一看空间没变。要么加 -r,要么手动补一句 resize2fs / xfs_growfs。
  • 快照长期不删:快照占的是 VG 的空间,忘了删会把池吃满。
  • pvcreate 用在有数据的盘:分区表直接被抹。执行前 lsblk、blkid 再确认一遍。
  • 八、知识扩展:PE 大小选错的代价

    建 VG 时可以用 -s 指定 PE(物理块)大小,默认 4MB:

    sudo vgcreate -s 16M vg_data /dev/sdb /dev/sdc

    PE 是 VG 分配的最小颗粒。一个 VG 最多支持 65534 个 PE,所以 PE 大小直接决定 VG 总容量上限:4MB × 65534 ≈ 256GB,16MB ≈ 1TB,对现代动不动几十 T 的存储池就不够看了。大容量池子一般建 VG 时就把 PE 设成 32MB 或 64MB。

    建 VG 时没指定,之后想改 PE 大小只能重建 VG,所以规划阶段就算好。这也是为什么 LVM 适合"长期规划"的存储池,而不是临时玩玩。

    另一个省事命令:vgs、pvs、lvs 是简表,写脚本用;vgdisplay、pvdisplay、lvdisplay 是详情,排障时看完整信息用。日常记 pvs / vgs / lvs 三条就够。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » LVM逻辑卷管理实战:PV、VG、LV创建、扩容与快照
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!