TL; DR:
如果我不是直接使用LVM,而是直接使用设备映射器,那么如何扩展精简池?
详细版本:
据我所知,当我们通过dmsetup创build一个精简池时,我们可以设置一个low_water_mark;
一旦达到水印,就会发送一个dmevent,守卫守护进程可以立即扩展池。
但是,我无法find办法,以微不足道的方式执行这样的任务; 我不知道如何实现。
此外,我深入研究了dm-thin.c并发现了一个名为maybe_resize_data_dev的函数r = dm_pool_resize_data_dev(pool->pmd, data_size)如果剩余空间不足,将会通过r = dm_pool_resize_data_dev(pool->pmd, data_size)放大数据设备。
然而与此同时,Device Mapper本身阻止你通过validation数据设备的状态来做到这一点:
if (le32_to_cpu(disk_super->data_block_size) != pmd->data_block_size) { /* Verify the data block size hasn't changed */ if (le32_to_cpu(disk_super->data_block_size) != pmd->data_block_size) { DMERR("changing the data block size (from %u to %llu) is not supported", le32_to_cpu(disk_super->data_block_size), (unsigned long long)pmd->data_block_size); r = -EINVAL; goto bad_unlock_sblock; }
在提交9aec862中修补,标题为dm thin metadata: do not allow the data block size to change 。
这些代码是从drivers/md/dm-thin.c (ref-1)和drivers/md/dm-thin-metadata.c (ref-2)
而更让我困惑的是,我碰巧知道,如果池是由LVM实用程序创build的, 即lvextend -L+100M vg001/mythinpool (来自Red Hat出版的指南 ),这让我想知道如何做到这一点。
ref-1:drivers / md / dm-thin.c#L3246-L3292
ref-2:drivers / md / dm-thin-metadata.c#L617-L621
对不起,我不能发布两个以上的链接,因为我太noob。