如何透明地缓存任何目录或挂载的文件系统以进行读写?

Fle*_*cto 29 cache fuse cloud

假设我使用 FUSE 客户端在/mnt/cloud. 但是因为直接读取和写入文件/mnt/cloud很慢,因为它必须通过互联网,所以我想缓存我正在读取和写入云存储的文件。由于我可能一次写入大量数据,因此缓存应该位于我的磁盘上而不是 RAM 中。但是我不想在我的磁盘上复制整个云存储,因为我的磁盘可能太小了。

所以我想有一个缓存视图到/mnt/cloudmount at /mnt/cloud_cache,它使用另一个路径,比如/var/cache/cloud缓存位置。

如果我现在阅读/mnt/cloud_cache/file,我希望发生以下情况:

检查是否file缓存在/var/cache/cloud/file.

  1. 如果缓存:file通过从/mnt/cloud. 如果它是最新的,则从缓存中提供文件,否则转到 2。
  2. 如果未缓存或缓存已过期:复制/mnt/cloud/file/var/cache/cloud/file缓存并从缓存中提供。

当我写信给 时/mnt/cloud_cache/file,我希望发生这种情况:

  1. 写入/var/cache/cloud/file并记录在file需要回写的日记中/mnt/cloud
  2. 等待写入/var/cache/cloud/file完成和/或之前的回写/mnt/cloud完成
  3. 复制/var/cache/cloud/file/mnt/cloud

我有以下要求和限制:

  • 免费和开源
  • 能够将缓存设置为任意缓存位置
  • 能够缓存任意位置(可能是某个 FUSE 挂载点)
  • 透明缓存,即使用/mnt/cloud_cache对缓存机制是透明的,并且像任何其他挂载的文件系统一样工作
  • 记录需要写回的内容(缓存可能会在几天内获得大量需要写回原始存储位置的数据)
  • 自动删除已写回或一段时间未访问的缓存文件
  • 一致性(即反映对 的外部更改/mnt/cloud)并不是非常重要,因为我一次可能只有一个客户端访问/mnt/cloud,但如果有的话会很好。

我花了很多时间寻找现有的解决方案,但没有找到任何令人满意的东西。

小智 7

尝试使用catfs,这是我目前正在研究的通用保险丝缓存文件系统。


agc*_*agc 1

这是一种无知的答案,因为我无法访问用于测试它的亚马逊云目录。但本着“如何做”的精神:设置Amazon 云来提供 NFS 服务,然后使用 远程登录到该 NFS 服务器cachefilesd

“说起来容易做起来难……”