#cache #recently #local #locally #most #blocks

bin+lib syncer

一个文件系统,在你本地似乎拥有所有文件的同时,只缓存最近使用的文件

10 个版本 (4 个重大变更)

使用旧的 Rust 2015

0.5.1 2018年2月26日
0.4.2 2018年2月25日
0.3.0 2018年2月24日
0.2.1 2018年2月13日
0.1.2 2018年2月12日

#1279 in 文件系统

每月下载量 33 次

GPL-3.0 许可证

69KB
2K SLoC

syncer

警告:这是一个高度实验性的项目,可能会损坏你的数据。在测试之前,请确保你有良好的备份。

Build Status Crates.io

这是一个文件系统,允许你在本地保持对一个非常大的文件存储库的无缝视图,而实际上只拥有一个更小的本地缓存。适用于磁盘空间太小无法存储完整集合,但需要从远程服务器按需获取数据的场景。它构建的用例是拥有一个非常大的媒体集合(例如,多TB的照片集合),并希望在只有几GB空间的笔记本电脑上无缝访问它。

syncer 被构建为一个 FUSE 文件系统,因此它提供了一个标准的 POSIX 接口,任何应用程序都应该能够使用。文件在内部被分割成块并哈希。这些块被上传到您想要的任何 rsync 端点(通常是 SSH 服务器)。然后,当本地存储超过限制时,最不常用的块将被逐出。它们将在按需从远程服务器再次获取时被带回本地存储。

当前状态

基本程序可以正常工作,并与远程 rsync/ssh 服务器同步。这对于主要是固定文件集的照片集合来说应该足够了,因为这些文件很少更改。但这仍然是高度实验性的,可能会损坏你的数据。现有基本功能包括

  • 标准的 POSIX 文件系统可以正常工作并持久化到磁盘(在 Linux 和 OSX 上进行了测试)
  • 向远程服务器推送和按需拉取都可以正常工作
  • 速度与直接写入磁盘相当,但CPU使用率更高(请参阅性能部分)

仍在 TODO 列表中

  • 进行压力测试,并为所有 POSIX 操作构建可重复测试集
  • 更彻底地调整性能
  • 实现比仅 rsync/ssh 更好的同步端点,因为设置这些连接非常耗时。一个简单的守护进程来发送/接收块可能非常好,甚至允许多服务器故障转移和冗余。或者,可能像 S3 协议那样的东西会更合适。
  • 允许将某些文件/目录标记为始终本地可用,这样你就可以将其设置为照片应用程序的缩略图目录,并始终快速浏览
  • 提供一个类似时光机的界面,展示文件系统的只读快照(数据中已存在但未暴露)
  • 找出一种好的方法来删除旧数据(目前所有历史数据都被保留)

性能

仍然需要适当的基准测试,但当前状态应该足够满足大多数使用场景

  • 一个简单的写入基准测试(从本地文件夹复制15GB的rsync)显示,同步器在正常磁盘写入中具有竞争力。同步器达到49MB/s,而直接到磁盘的等效rsync达到54MB/s。CPU使用率较高,但不是特别令人担忧。这是可以预料的,因为同步器正在使用Blake2对所有块进行哈希处理(非常快但不是无关紧要的)。
  • 同步器有16个并行线程和细粒度锁,允许多个文件/目录并发使用而不会出现问题。
  • 从服务器获取/发送到/从服务器取决于您的特定网络特性。但鉴于小于64KB的小块数据永远不会从本地缓存中删除,读取元数据(列出目录和访问文件属性)通常相当快,小型文件也将全部是本地的。如果您的网络状况良好,则非本地的大型文件性能可忍受,因为数据块为1MB。

欢迎报告速度过慢的特定用例。

用法

要安装或升级,只需做


$ cargo install -f syncer

要启动文件系统,执行类似以下操作

$ syncer init source someserver:~/blobs/ 1000
$ syncer mount source mnt

这将为您提供一个位于 mnt 的文件系统,您可以使用它来正常使用。它的数据来自本地的 data 文件夹和服务器。最多同步器会尝试在本地使用1GB,然后根据需要从服务器获取。

贡献

欢迎在 https://github.com/pedrocr/syncer 上提交错误报告和拉取请求

如果您需要详细讨论功能或问题,或只是进行一般聊天,请前往irc.mozilla.org上的#chimper频道。

依赖项

~24MB
~467K SLoC