在 Linux 或任何其他 *NIX 平台中,是否有一种方法可以在本地安装远程文件系统,并使用本地文件系统支持的缓存进行支持。
我在 S3 上有一些需要访问的存档数据。访问这些数据的方式是:一旦触碰,应用程序就需要多次从 S3 读取这些数据。
我知道我可能会要求文件系统执行应用程序缓存数据的工作;但问题是我无法控制应用程序来修改它。
答案1
以前在 Solaris 中使用 CacheFS 时,这种方法效果很好;本地硬盘空间被分配为缓冲区,其中缓存了经常访问的 NFS 挂载文件的内容,如果 CacheFS 服务确定 NFS 服务器上的内容自缓存以来保持不变,则从该缓冲区提供这些文件。当我在 Solaris 下使用它时,效果很好。
根据CacheFS 的维基百科页面,它被移植到(重写?)Linux,最新版本是在去年发布的。
我无法评论 Linux 的实现,但假设它能完成 Solaris 曾经完成的任务,我想它可能就是你想要的。
答案2
s3fs有一个缓存选项。
如果通过“use_cache”选项启用,s3fs 会自动在 use_cache 指定的文件夹中维护文件的本地缓存。每当 s3fs 需要在 s3 上读取或写入文件时,它首先会将整个文件本地下载到 use_cache 指定的文件夹中并对其进行操作。当调用 fuse release() 时,如果文件已更改,s3fs 会将文件重新上传到 s3。s3fs 使用 md5 校验和来最大限度地减少从 s3 下载。注意:这与 stat 缓存不同(见下文)。
本地文件缓存通过计算和比较 md5 校验和(ETag HTTP 标头)来工作。
use_cache 指定的文件夹只是本地缓存。可以随时删除。s3fs 会根据需要重建它。注意:此目录会无限增长,并可能填满依赖于存储桶的文件系统并读取该存储桶。
答案3
您是否考虑过使用类似文件系统镜像文件系统DRBD? 如果没有 DRBD,那么还有其他可以使用的,它可能会给你一个跳转到 Google 的起点。
它不是真正意义上的缓存,但它会在本地复制数据并将更改传输到远程系统。它是否实用取决于您对文件进行了多少更改以及您使用 S3 的原因。
答案4
那里sshfs
可能就是你要找的东西。我对 sshfs 的粗略理解是,它有点像使用加密的 NFS 挂载。