![是否可以通过设备映射器扩展精简配置池的数据设备?](https://linux22.com/image/677952/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E8%AE%BE%E5%A4%87%E6%98%A0%E5%B0%84%E5%99%A8%E6%89%A9%E5%B1%95%E7%B2%BE%E7%AE%80%E9%85%8D%E7%BD%AE%E6%B1%A0%E7%9A%84%E6%95%B0%E6%8D%AE%E8%AE%BE%E5%A4%87%EF%BC%9F.png)
总结:
如果我不使用 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
抱歉,我无法发布超过两个链接,因为我太菜鸟了。