如何在组合容量的同时跨快速和慢速存储配置多层文件系统?

如何在组合容量的同时跨快速和慢速存储配置多层文件系统?

我正在寻找一种方法来同时使用慢速 500GB 磁性 HDD 和快速 500GB SSD。

我希望在容量方面最终得到两者组合的合理比例[希望> 800GB],但是决定哪些文件应该存放在哪个磁盘上将非常棘手,并且几乎不可能跨越目录边界

类似的事情似乎已经以多级存储的形式被考虑过。但到目前为止,我发现的唯一机制使用快速卷作为慢速卷的缓存。这对我来说没有用,因为我最终只会在 500GB HDD 慢速驱动器上获得 500GB SSD 缓存...我不会比简单地将慢速 HDD 装箱并仅使用 SSD 更好。

假设存在一个跨越两个卷并动态地从一个卷复制到另一个卷的系统。这类似于缓存,但不需要保持一个卷完全一致,并且能够提供比任一单个卷更多的容量。

到目前为止,我所有的搜索都是空白。我发现了多个对支持缓存的 LVM 和 XFS 的引用。但显然没有什么比任何一个设备都能实现更高的容量。

因此,虽然假设这是可能的,但我没有找到实现它的方法。


请注意,这个问题的棘手之处在于仅使用一个最终文件系统来实现解决方案。对我来说,手动选择按目录放置哪些文件是不可能的。

答案1

以下答案并非基于个人经验,因此我无法确定它是否确实有效,但这些只是您可以尝试的想法。

LVM缓存

缓存逻辑卷类型使用小而快的 LV 来提高大而慢的 LV 的性能。它通过将常用块存储在更快的 LV 上来实现这一点。

如果我理解正确的话,您可以限制快速磁盘上的缓存大小,然后创建慢速磁盘的另一个逻辑卷和快速磁盘的剩余部分。

块缓存

另一种可能的解决方案是缓存:

Bcache(块缓存)允许将 SSD 用作另一个块设备(通常是旋转 HDD 或阵列)的读/写缓存(在写回模式下)或读缓存(直写或绕写)。

支持设备和缓存设备都可以是“整个设备、分区或任何其他标准块设备。”

理论上,您可以将 SSD 分成两个 200+300GB 的分区。 200GB 将用作缓存设备。

然后,您可以将 SSD 中剩余的 300GB 分区和慢速磁盘合并为一个 800GB 逻辑卷(通过使用LVM软件RAID),并使用缓存设备对其进行缓存。

再说一次,我从来没有尝试过这些。lvmcache似乎更符合您的目的。您可以尝试两者并比较它们的性能,以确定哪种解决方案更适合您。

答案2

XFS提供实时分区:

XFS 文件系统可以驻留在常规磁盘分区或逻辑卷上。 XFS 文件系统最多包含三个部分:数据部分、日志部分和实时部分。 ...

...

实时部分用于存储实时文件的数据。这些文件的属性位通过xfsctl(3)创建文件之后、将任何数据写入文件之前。实时部分被分为许多固定大小的范围(在 mkfs.xfs(8) 时间指定)。实时部分中的每个文件的扩展大小是实时部分扩展大小的倍数。

但请注意,也有限制。数据将写入实时分区或“普通”分区,因此不会像您在分区中看到的那样来回移动数据来扩展容量。分层存储系统

其次,撰写申请书需要设置实时XFS_XFLAG_REALTIME对于您希望在文件创建之后但在向其中写入任何数据之前写入实时分区的文件。

答案3

只是一个粗略的想法:您是否考虑过覆盖 FS,其中只读部分是 HDD(大概是针对不更改或很少更改的文件)而覆盖位于 SSD 上?您需要有一个离线机制,当文件被认为稳定时,将文件从覆盖移动到 HDD,并在覆盖中存在活动工作副本时从 HDD 中删除文件。当 SSD 已满时,可以运行此离线机制。显然人们以前一直在朝这个方向寻找,参见将 Linux Overlay (OverlayFS) 挂载中对上层文件系统的更改合并到下层文件系统

经过大量工作,甚至可以创建一个 FUSE 文件系统来自动在线完成此操作。也许实际上有一些方法可以解决这个问题,请参阅https://en.wikipedia.org/wiki/Filesystem_in_Userspace一些想法和指示。

答案4

看一眼合并文件系统:“mergerfs 在逻辑上将多个路径合并在一起。认为是集合的并集。通过 mergefs 执行或呈现的文件或目录基于为该特定操作选择的策略。”

左心室:“用于监视 LVM 卷并根据使用情况将块移动到更快和更慢存储的应用程序。换句话说,在 Linux 上利用 LVM 的分层存储管理器。”

相关内容