RHEL 10 LVM 高级:thin pool、thin snapshot 与 merge 回滚
thin provisioning 的核心是“先分配地址空间、按写入量消耗 pool”。thin snapshot 也共享 pool,所以既能快速回滚,也可能因为 pool 满而一起挂。本页在 393 的 2G 测试盘上做一遍 pool → thin volume → snapshot → merge。
- 环境:PVE 393,RHEL 10.2;
- 测试盘:
/dev/sdb2G(原 LUKS2 测试盘,已wipefs); - 结果:VG
vgtest2G,thin pool 1G,thinvol 512M; - 测试后已清理。
E3 记录:plans/content-expansion/evidence/rhel/rhel-lvm-advanced/run.json(5 步,含 lvs/snapshot/merge 输出 sha256)。
先给结论:thin pool 是两层
Section titled “先给结论:thin pool 是两层”lvcreate --type thin-pool建的是 pool,lvs -a里会多出pool_tdata、pool_tmeta;lvcreate -V 512M --thin -n thinvol vgtest/pool才是给文件系统用的 thin volume;data_percent是 pool 的实际占用,不是 thinvol 的 512M;- snapshot 也放在同一个 pool,pool 满会影响 origin。
建 PV/VG/pool
Section titled “建 PV/VG/pool”sudo wipefs -a /dev/sdbsudo pvcreate /dev/sdbsudo vgcreate vgtest /dev/sdbsudo lvcreate --type thin-pool -L 1G -n pool vgtestsudo lvs -a vgtestLV VG LSize Pool Origin Data%[lvol0_pmspare] vgtest 4.00mpool vgtest 1.00g 6.29[pool_tdata] vgtest 1.00g[pool_tmeta] vgtest 4.00mpool 里已经有 6.29% 的元数据/初始占用。
thin volume
Section titled “thin volume”sudo lvcreate -V 512M --thin -n thinvol vgtest/poolsudo mkfs.xfs /dev/vgtest/thinvolsudo mkdir -p /mnt/thinsudo mount /dev/vgtest/thinvol /mnt/thinecho v1 | sudo tee /mnt/thin/file$ df -h /mnt/thin/dev/mapper/vgtest-thinvol 448M 35M 414M 8% /mnt/thin512M 的 thinvol 格式化后可用 448M;lvs 的 data_percent 升到 12.59。
snapshot
Section titled “snapshot”sudo lvcreate -s -n snap /dev/vgtest/thinvolecho v2 | sudo tee -a /mnt/thin/filesudo lvs -a -o lv_name,vg_name,lv_size,pool_lv,origin,data_percent vgtestthinvol vgtest 512.00m pool 12.59snap vgtest 512.00m pool thinvol 12.59此时 origin 是 v2,snapshot 保留 v1。
merge 回滚
Section titled “merge 回滚”sudo umount /mnt/thinsudo lvconvert --merge vgtest/snapsudo mount /dev/vgtest/thinvol /mnt/thincat /mnt/thin/file# v1--merge 把 snapshot 的内容合并回 origin,然后删除 snapshot;合并后 lvs 只剩 pool/thinvol。
sudo umount /mnt/thinsudo lvremove -f vgtestsudo vgremove -f vgtestsudo pvremove /dev/sdbsudo wipefs -a /dev/sdbsudo vgs vgtest # not found顺序不能反:先删 LV,再删 VG,最后删 PV。
- pool 大小与
data_percent监控; - thinvol 的虚拟大小 ≠ 实际占用;
- snapshot 与 origin 同 pool;
- merge 前确认回滚点;
- 清理按 LV→VG→PV 顺序;
- pool 满告警(
data_percent/metadata_percent)。
未实测与边界
Section titled “未实测与边界”- 未测试 pool 满导致的 I/O error;
- 未测试 thin pool 的 autoextend;
- 未测试 cache/RAID 类型;
- 未测试在线 merge(本次先 umount)。
- RHEL 10 安装期存储 — autopart 的 LVM 布局
- 官方:Configuring and managing logical volumes
以下截图来自 PVE 上的 RHEL 10.2 实测环境。

