首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法回收lvm“瘦池”空间

无法回收lvm“瘦池”空间
EN

Stack Overflow用户
提问于 2022-11-14 06:16:46
回答 1查看 46关注 0票数 -1

与lvm卷相比,池的使用非常大,但它似乎并没有被实际使用。

以前,元数据区域已满,元数据已扩展。从那时起,我就遇到了"lvm事务id不匹配“的问题,我通过vgcfgbackup -> change transaction id -> vgcfgrestore解决了这个问题。

未回收的lvm瘦池空间问题发生在vgcfgrestore之后。删除快照、fstrim用于挂载的lvm卷也没有解决这个问题。

有解决这个问题的办法吗?

代码语言:javascript
复制
$ lvs -a vg0 -o +discards
LV                 VG      Attr       LSize   Pool       Origin    Data%  Meta%  Move Log Cpy%Sync Convert Discards
  20221101.120002    vg0 Vwi-aotz-k  15.00t tpool0 tvol0 29.13                                               passdown
  20221101.180001    vg0 Vwi-aotz-k  15.00t tpool0 tvol0 29.13                                               passdown
  20221102.000001    vg0 Vwi-aotz-k  15.00t tpool0 tvol0 29.13                                               passdown
  20221102.060001    vg0 Vwi-aotz-k  15.00t tpool0 tvol0 29.13                                               passdown
  20221102.120001    vg0 Vwi-aotz-k  15.00t tpool0 tvol0 29.13                                               passdown
  tpool0             vg0 twi-aotz--  16.00t                          90.86  0.59                             passdown
  [tpool0_tdata]     vg0 Twi-ao----  16.00t                                                                      
  [tpool0_tmeta]     vg0 ewi-ao---- <15.01g                                                                      
  [tpool0_tmeta]     vg0 ewi-ao---- <15.01g                                                                      
  tvol0              vg0 Vwi-aotz--  15.00t tpool0                   29.13                                   passdown
  [lvol0_pmspare]    vg0 ewi------- <15.01g                                                                      
  [lvol0_pmspare]    vg0 ewi------- <15.01g                                                                      
  [lvol0_pmspare]    vg0 ewi------- <15.01g 

$ dmsetup ls | grep vg0 | sort -k2 -V
vg0-tpool0_tmeta    (253:4)
vg0-tpool0_tdata    (253:5)
vg0-tpool0-tpool    (253:6)
vg0-tpool0          (253:7)
vg0-tvol0           (253:8)
vg0-20221102.000001 (253:16)
vg0-20221102.060001 (253:17)
vg0-20221102.120001 (253:18)
vg0-20221101.120002 (253:19)
vg0-20221101.180001 (253:20)

$ grep . /sys/block/dm-{4..8}/queue/discard_max_bytes 
/sys/block/dm-4/queue/discard_max_bytes:0
/sys/block/dm-5/queue/discard_max_bytes:0
/sys/block/dm-6/queue/discard_max_bytes:0
/sys/block/dm-7/queue/discard_max_bytes:0
/sys/block/dm-8/queue/discard_max_bytes:17179869184
EN

回答 1

Stack Overflow用户

发布于 2022-11-24 01:10:06

在我的linux机器上,这个问题已经解决了。原因不明,但我发现vgcfg和thin_dump之间存在事务id不匹配,并通过匹配事务id来解决它。

我希望这能帮上忙。

!小心!!

如果您遵循以下步骤,您可能会覆盖LVM和dm设备中的重要信息。情况可能会变得更糟,而且可能无法解决。我不是这些问题的专家。在应用此解决方案之前,要充分考虑风险,并在另一个设备(如虚拟机)上对其进行全面测试。也要考虑你的情况可能和我的不一样。

我不承担责任。

薄转储

代码语言:javascript
复制
$ dmsetup message vg0-tpool0-tpool 0 reserve_metadata_snap
$ thin_dump -m /dev/mapper/vg0-tpool0_tmeta > meta.backup.xml ; grep transaction meta.backup.xml
<superblock uuid="" time="86" transaction="169" flags="0" version="2" data_block_size="16384" nr_data_blocks="0">
  <device dev_id="1" mapped_blocks="574203" transaction="0" creation_time="0" snap_time="86">
  <device dev_id="56" mapped_blocks="1865793" transaction="108" creation_time="55" snap_time="55">
  <device dev_id="77" mapped_blocks="572719" transaction="154" creation_time="80" snap_time="80">
  <device dev_id="80" mapped_blocks="573481" transaction="162" creation_time="83" snap_time="83">
  <device dev_id="81" mapped_blocks="573838" transaction="164" creation_time="84" snap_time="84">
  <device dev_id="82" mapped_blocks="573845" transaction="166" creation_time="85" snap_time="85">
  <device dev_id="83" mapped_blocks="574074" transaction="168" creation_time="86" snap_time="86">
$ dmsetup message vg0-tpool0-tpool 0 release_metadata_snap

vg :未找到transaction_id 108

代码语言:javascript
复制
$ vgcfgbackup vg0 -f vg0.backup.cfg ; grep transaction vg0.backup.cfg
                transaction_id = 169
                transaction_id = 0
                transaction_id = 154
                transaction_id = 162
                transaction_id = 164
                transaction_id = 166
                transaction_id = 168

修复

/etc/lvm/archive.中包含“事务id 108”的vgcfg备份

代码语言:javascript
复制
$ grep "transaction.*108" /etc/lvm/archive/* | cut -d: -f1
$ vi ${vgcfg_filename}
  ### block of vgcfg with transaction_id = 108 ###
  #### Copy this block and paste it to "vg0.backup.cfg" created in the previous process.
        20221101.000005 {
        ...
        transaction_id = 108
        ...
        }
        }

修改vg0.backup.cfg的

代码语言:javascript
复制
$ vi vg0.backup.cfg
vg0 {    
        ...
        tvol0 {
        ...
    ### ADD "transaction_id = 108" block
        20221101.000005 {
        ...
                transaction_id = 108
        ...
        }
    ###
        ...
}

从修改的vg0.backup.cfg恢复vg的

代码语言:javascript
复制
$ yes | vgcfgrestore vg0 -f vg0.221115.cfg --force
...
Volume group vg0 has active volume: 20221101.000005.
...


$ lvremove /dev/vg0/20221101.000005 ## transaction_id 108
  Logical volume "20221101.000005" successfully removed

$ lvs -a vg0
  LV                 VG      Attr       LSize   Pool       Origin    Data%  Meta%  Move Log Cpy%Sync Convert
  ...
  tpool0             vg0     twi-aotz--  16.00t                      27.82  0.29                            
  ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74427595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档