lvm精简卷自动扩容

#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 精简卷通过按需分配空间,显著提升存储利用率,适合存储需求不确定的场景。核心是先创建精简池,再从中虚拟出精简卷,使用中需注意监控精简池空间,避免耗尽。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值