是否可以通过设备映射器扩展精简配置池的数据设备?

是否可以通过设备映射器扩展精简配置池的数据设备?

总结:

如果我不使用 LVM 而是直接使用 Device Mapper 本身,该如何扩展 Thin-Pool?

详细版本:

据我所知,当我们通过创建一个精简池时dmsetup,我们可以设置一个low_water_mark;

一旦达到水印,就会发送 dmevent,并且守卫守护进程可以立即扩展池。

然而,我无法找到以简单的方式完成这样的任务的方法;而且我不知道如何实现它。

另外,我深入研究dm-thin.c后发现,有一个名为的函数,当剩余空间不够时,maybe_resize_data_dev它会扩大数据设备。r = dm_pool_resize_data_dev(pool->pmd, data_size)

但与此同时,Device Mapper 本身会通过验证数据设备的状态来阻止您这样做:

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 实用程序创建的,则可以做到这一点;即 lvextend -L+100M vg001/mythinpool (从指导由 Red Hat 发布,这让我很想知道它是如何实现的。

ref-1:驱动程序/md/dm-thin.c#L3246-L3292

ref-2:驱动程序/md/dm-thin-metadata.c#L617-L621

抱歉,我无法发布超过两个链接,因为我太菜鸟了。

相关内容