#cache #fuse #fuse-filesystem

bin+lib catfs

任意内容缓存文件系统

6 个版本 (有破坏性)

使用旧的 Rust 2015

0.8.0 2018 年 1 月 9 日
0.6.0 2017 年 9 月 18 日
0.5.0 2017 年 9 月 9 日
0.4.0 2017 年 8 月 30 日
0.2.0 2017 年 8 月 17 日

#384缓存

每月 43 次下载

Apache-2.0

140KB
4K SLoC

Rust 3.5K SLoC // 0.0% comments Shell 374 SLoC // 0.0% comments Python 48 SLoC // 0.4% comments

猫文件系统是用 Rust 编写的缓存文件系统。

Build Status Crates.io Crates.io Downloads Github All Releases Twitter Follow

概述

猫文件系统允许您缓存访问另一个(可能远程的)文件系统。缓存语义是预读和写入(见 当前状态)。目前它只提供数据缓存,所有元数据操作都直接命中源文件系统。

猫文件系统是 ALPH 软件版本。如果您重视您的数据,请勿使用。

安装

:~/catfs$ cargo install catfs
$ # optimized binary now in $HOME/.cargo/bin/catfs

使用方法

猫文件系统要求在缓存文件的文件系统中启用扩展属性(xattr)。通常这意味着您需要开启 user_xattr 挂载选项。

$ catfs <from> <to> <mountpoint>

猫文件系统将在 <from> 下暴露文件,并在访问时将其缓存到 <mountpoint>。您可以使用 --free 来控制 <to> 的文件系统有多少空闲空间。

基准测试

比较使用 catfs 缓存 sshfs 与仅使用 sshfs 的区别。拓扑结构为笔记本电脑 - 802.11n - 路由器 - 1Gbps 有线 - 桌面电脑。笔记本电脑配备 SSD,而桌面电脑配备机械硬盘。

Benchmark result

比较在同一个文件系统上的两个本地目录中运行 catfs,这并不是一个现实的应用场景,但它应该能给您一个最坏情况下的速度减缓的印象。

Benchmark result

由于我们写入的量是预期的两倍,因此写入速度比预期慢了一倍。

要运行基准测试,请执行

$ sudo docker run -e SSHFS_SERVER=user@host --rm --privileged --net=host -v $PWD/target:/root/catfs/target kahing/catfs-bench
 # result is written to $PWD/target

需要将 Docker 容器配置为可以 ssh 到 user@host。通常我会通过从主机挂载 ssh 套接字来实现这一点

$ sudo docker run -e SSHFS_OPTS="-o ControlPath=/root/.ssh/sockets/%r@%h_%p -o ControlMaster=auto -o StrictHostKeyChecking=no -o Cipher=arcfour user@host:/tmp" -e SSHFS_SERVER=user@host --rm --privileged --net=host -v $HOME/.ssh/sockets:/root/.ssh/sockets  -v $PWD/target:/root/catfs/target kahing/catfs-bench

许可证

版权所有 (C) 2017 陈嘉恒

遵循Apache许可证,版本2.0

当前状态

猫文件系统是 ALPH 软件版本。如果您重视您的数据,请勿使用。

如果文件已打开用于读取,即使实际上没有读取任何内容,整个文件也会被缓存。

数据会写入到源文件,并且每次写入都会进行缓存。在非顺序写入的情况下,catfs 会检测到类似 ENOTSUP 的错误,这是由如 goofys 这样的文件系统发出的,并回退到在 close() 调用时刷新整个文件。请注意,在这种情况下,即使更改一个字节也会导致整个文件被重新写入。

参考资料

  • Catfs 与 goofys 设计为兼容
  • FS-Cache 为某些内核文件系统提供缓存,但不支持其他FUSE文件系统。
  • 其他类似的FUSE缓存文件系统,不知道它们的完整性如何

依赖

~10MB
~200K SLoC