创建缓存池卷(在一个命令中缓存数据和缓存元数据)

创建缓存池卷(在一个命令中缓存数据和缓存元数据)

我有一台崭新的电脑,配有一个不算大的 SSD(120GB)和两个巨大的旋转锈蚀硬盘(每个 3TB)。我想按如下方式对其进行分区:

  • 交换分区(~128GB)、操作系统分区(~128GB)和数据分区(其余所有分区)分布在硬盘上
  • SSD 上的微小启动分区
  • SSD 的其余空间都用于缓存池
  • 缓存池应该由所有 HD 分区共享,交换分区除外

我尝试使用 lvmcache 执行此操作并遇到以下问题:

  • 如果你只是以显而易见的方式创建缓存池(如下所述这里)你只能将其分配给缓存单身的原始 LV。因此,我可以将其用于操作系统或数据,但不能同时用于两者。

  • 我尝试通过创建一个覆盖所有 HD 的“精简池”来解决这个问题,以为我可以缓存整个精简池,然后从中分配操作系统和数据 LV,但被告知无法缓存精简池。(手册页lvmthin没有太多意义,我可能做错了那部分。)

我没主意了。有人能建议如何实现吗?请注意,我并没有完全依赖 lvm,如果 bcache+plain MD(用于条带化)可以做到这一点,或者我不知道的其他一些工具,那么这也很好。

答案1

您可以创建缓存卷并将其转换为精简池。

缓存池(缓存数据 + 缓存元数据) -> 缓存卷(缓存池 + 原始大慢速卷) -> 缓存精简池

在此示例中,vg0 是您的卷组,其中包含物理卷 /dev/small-fast-disk 和 /dev/big-slow-disk。所有逻辑卷都必须位于同一个卷组中。

创建缓存池卷(在一个命令中缓存数据和缓存元数据)

lvcreate --type cache-pool --name cachepool --size 128G vg0 /dev/smal-fast-disk

创建缓存卷

lvcreate --type cache --cachepool vg0/cachepool --size 3T --name thincachevol vg0 /dev/big-slow-disk

将缓存卷转换为精简卷

lvconvert --thinpool vg0/thincachevol

答案2

在主线内核中,dm-cache(lvmcache 底层使用的缓存)不支持对多个原始设备使用相同的缓存,因为存在访问元数据的竞争。请参阅回复:[dm-devel] dm-cache:同一个缓存可以用于多个原始设备吗?查看 2013 年一位开发人员的评论。

然而,为了完整性原始 dm-cache 开发人员有一个废弃的测试仓库,支持“同一缓存设备上的多个源设备”(看https://groups.google.com/forum/#!topic/dm-cache/q-lM1t438PU了解详情),但此代码不在主线内核中。

相关内容