#LVM精简卷(Thinly-Provisioned Logical Volumes)介绍
LVM 精简卷(Thin Provisioning,又称"瘦卷")是一种动态分配存储空间的技术,允许创建的逻辑卷(LV)大于实际物理存储空间,仅在数据写入时才分配真实空间,极大提高了存储利用率。
#核心概念
1.精简池(Thin Pool)
从卷组(VG)中划分的一块物理空间,作为精简卷的 “资源池”,所有精简卷共享其空间。
2.精简卷(Thin LV)
从精简池中 “虚拟” 出的逻辑卷,可指定一个较大的表观大小(如 100GB),但初始不占用实际空间,仅在写入数据时从精简池分配。
#精简卷的问题
当每个卷已使用的容量总和超过阵列的物理容量时,将无法再写入数据,并导致应用出错。于是设置空间预警的功能就相当重要,比如在物理空间占用达到85%时向管理员发出通知,或者设定自动增长策略,当达到指定阀值,比如85%时,卷自动增长10G。
#thin pool自动扩容
修改/etc/lvm/lvm.conf
thin_pool_autoextend_threshold = 30
thin_pool_autoextend_percent = 20
这意味着,只要池使用率超过30%,它就会再扩展20%。
thin_pool_autoextend_threshold设置为100将禁用自动扩展,默认设置表明该功能已被禁用
[root@Server ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─almalinux-root 253:0 0 63.9G 0 lvm /
├─almalinux-swap 253:1 0 3.9G 0 lvm [SWAP]
└─almalinux-home 253:2 0 31.2G 0 lvm /home
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sr0 11:0 1 10.6G 0 rom
#测试自动扩容
#磁盘分区
parted /dev/sdc mklabel gpt
parted /dev/sdc mkpart primary 0% 100%
# LVM配置
pvcreate /dev/sdc1
vgcreate data /dev/sdc1
lvcreate -L 10G --thinpool data_pool data
lvcreate -V 5G --thin -n thin_lv_data01 data/data_pool
# 文件系统
mkfs.xfs /dev/data/thin_lv_data01
mkdir -p /data
mount /dev/data/thin_lv_data01 /data/
#查看初始状态
查看卷组
[root@Server ~]# vgs
VG #PV #LV #SN Attr VSize VFree
almalinux 1 3 0 wz--n- <99.00g 0
data 1 2 0 wz--n- <20.00g 9.97g
查看逻辑卷
[root@Server ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home almalinux -wi-ao---- 31.19g
root almalinux -wi-ao---- <63.89g
swap almalinux -wi-ao---- <3.92g
data_pool data twi-aotz-- 10.00g 0.63 10.81
thin_lv_data01 data Vwi-aotz-- 5.00g data_pool 1.26
修改配置文件,超过50%,扩容20%
vim /etc/lvm/lvm.conf
thin_pool_autoextend_threshold = 50
thin_pool_autoextend_percent = 20
# 创建一个大文件(超过50%阈值)
[root@Server ~]# dd if=/dev/zero of=/data/testfile bs=1M count=3000
3000+0 records in
3000+0 records out
3145728000 bytes (3.1 GB, 2.9 GiB) copied, 14.3531 s, 219 MB/s
# 查看 thin pool 使用情况
[root@Server ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home almalinux -wi-ao---- 31.19g
root almalinux -wi-ao---- <63.89g
swap almalinux -wi-ao---- <3.92g
data_pool data twi-aotz-- 10.00g 29.89 19.27
thin_lv_data01 data Vwi-aotz-- 5.00g data_pool 59.78
# 再写入一些数据,让 pool 使用率超过50%
[root@Server ~]# dd if=/dev/zero of=/data/testfile2 bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 0.591317 s, 1.8 GB/s
[root@Server ~]# dd if=/dev/zero of=/data/trigger_autoextend bs=1M count=1100
dd: error writing '/data/trigger_autoextend': No space left on device
989+0 records in
988+0 records out
1035993088 bytes (1.0 GB, 988 MiB) copied, 0.852932 s, 1.2 GB/s
[root@Server ~]#
[root@Server ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home almalinux -wi-ao---- 31.19g
root almalinux -wi-ao---- <63.89g
swap almalinux -wi-ao---- <3.92g
data_pool data twi-aotz-- 10.00g 49.34 24.38
thin_lv_data01 data Vwi-aotz-- 5.00g data_pool 98.69
# 先扩展 thin 逻辑卷
lvextend -L +2G /dev/data/thin_lv_data01
xfs_growfs /data
# 然后写入数据让 pool 超过50%
dd if=/dev/zero of=/data/test2 bs=1M count=200
dd if=/dev/zero of=/data/test2 bs=1M count=200
[root@Server ~]# dd if=/dev/zero of=/data/test_threshold bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.0336881 s, 3.1 GB/s
[root@Server ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home almalinux -wi-ao---- 31.19g
root almalinux -wi-ao---- <63.89g
swap almalinux -wi-ao---- <3.92g
data_pool data twi-aotz-- 12.00g 43.56 25.07
thin_lv_data01 data Vwi-aotz-- 7.00g data_pool 74.68
# 1. 扩展 thin 逻辑卷,让 pool 使用率再次接近50%
lvextend -L +3G /dev/data/thin_lv_data01
xfs_growfs /data
# 2. 查看 pool 使用率
lvs data
# 3. 写入数据触发第二次自动扩容
dd if=/dev/zero of=/data/test_round2 bs=1M count=500
# 写入更多数据,让 pool 使用率超过50%
dd if=/dev/zero of=/data/trigger_round2 bs=1M count=300
[root@Server ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home almalinux -wi-ao---- 31.19g
root almalinux -wi-ao---- <63.89g
swap almalinux -wi-ao---- <3.92g
data_pool data twi-aotz-- 14.40g 42.74 22.88
thin_lv_data01 data Vwi-aotz-- 10.00g data_pool 61.56
✅ 第二次扩容已生效:
data_pool 的 LSize:从 12.00g 自动扩展到 14.40g(+20%)
data_pool 的 Data%:从 47.89% 下降到 42.74%
扩展幅度:2.40GB(12GB × 20% = 2.4GB)
#总结
LVM 精简卷通过按需分配空间,显著提升存储利用率,适合存储需求不确定的场景。核心是先创建精简池,再从中虚拟出精简卷,使用中需注意监控精简池空间,避免耗尽。

被折叠的 条评论
为什么被折叠?



