返回归档
🚤网络与 Linux

LVM:先有 PV,再有 VG,最后才是 LV

Physical Volume 是磁盘或分区,Volume Group 是把 PV 聚成的池,Logical Volume 才是从池里切出来、再 mkfs 挂上的块设备。快照是 copy-on-write,不是只拷一份元数据指针。

文章目录

LVM(Logical Volume Manager)把「哪块盘」和「哪个文件系统看见的块设备」拆开。盘可以随时加进池子,卷可以在线扩,不必先卸文件系统再重新分区。

顺序只有一种:PV → VG → LV → mkfs → mount

自上而下是 LV、VG、PV:盘在最底下,卷在最上面

三个词不要反着记

缩写 全称 是什么
PV Physical Volume 一块盘或一个分区,pvcreate 之后才能进池子
VG Volume Group 若干 PV 拼成的存储池
LV Logical Volume 从 VG 里切出来的块设备,路径一般是 /dev/<VG>/<LV>

常见记反是:把 LV 说成「底层物理盘」,把 PV 说成「从池子里分配出来的卷」。图是对的,文字要跟图走——最底下才是 PV

块存储、文件存储、对象存储是另一条分类,和 LVM 这三层不是替代关系。LVM 做的是块设备这一层的灵活切割;上面仍然要 mkfs.ext4 / mkfs.xfs 才能当文件系统用。命令是 mkfs,没有 mkdf / mkdfs

建一套能挂上的卷

lsblk
sudo pvcreate /dev/sdb1 /dev/sdc
sudo vgcreate data_vg /dev/sdb1 /dev/sdc
sudo lvcreate --name vol01 --size 100G data_vg

sudo mkfs.ext4 -m 0 /dev/data_vg/vol01
sudo mkdir -p /mnt/data
sudo mount /dev/data_vg/vol01 /mnt/data

查看用 pvscan / vgscan / lvscan,或 pvs / vgs / lvs。一块 VG 用满了,再 pvcreate 一块新盘、vgextend 进去,然后 lvextend + resize2fs / xfs_growfs,不必先卸服务。

快照是 copy-on-write

创建 snapshot 时,LVM 不会把 LV 的数据块整份复制一份。新 LV 和源 LV 共用当前数据块;之后源卷上有写入,旧内容才拷进快照空间。所以快照要单独指定大小:它装的是「源卷后来改掉的那些块」,不是整盘镜像。只拷一份 metadata pointer、源卷随便删——恢复时会发现空间不够或数据已经对不上。

恢复常用 lvconvert --merge:把快照合回源 LV。合并期间源 LV 往往要先卸下,合完再激活、再挂上。

# 源卷已经 mkfs 并挂在 /mnt/data
sudo lvcreate -s -n vol01_snap -L 10G /dev/data_vg/vol01

# …源卷上的误删发生之后
sudo umount /mnt/data
sudo lvconvert --merge /dev/data_vg/vol01_snap
sudo lvchange -ay /dev/data_vg/vol01
sudo mount /dev/data_vg/vol01 /mnt/data

Kubernetes 1.20 之后可以用 VolumeSnapshot 从快照造新的 PVC,底层如果是 OpenEBS LVM LocalPV,走的仍是这一套 COW。