与远程加密存储同步

与远程加密存储同步

我正在尝试在多台计算机之间保持文件夹树同步。目前,我使用的unison是星型拓扑,带有中央远程服务器。我希望服务器上的数据被加密,因此在服务器上,树unison(包括.unison文件夹)保存在encfs树内。要执行同步,每个客户端:

  • 使用以下方式安装服务器存储sshfs
  • encfssshfs本地安装存储
  • unison在文档的本地副本和已安装的文档之间执行。

该设置有许多优点:

  • 开源工具
  • 可编写脚本的命令行解决方案
  • 安全通信ssh
  • 服务器隐私,因为encfs文件夹树从未在服务器上解密
  • unison由于是在纯文本上运行,因此能够在同步期间区分修改

有一件事不太好,那就是同步速度。由于encfs服务器上的文件夹安装在客户端上,因此stat()客户端的每次调用都必须转发ssh到服务器。文档树已经有数千个文件,同步unison必须对每个文件执行至少一次stat()调用(以排除对.unison文件夹中存储的状态的修改)。有没有更快的替代方案可以保留上面列出的优点?

注意:如果我要删除最后一个条件,我可以unison通过密文运行,并且只在encfs本地安装树。然后unison将在客户端和服务器上本地运行,因此stat()调用会很快。但最好至少可以选择查看正在同步哪些文件;使用unisonencfs文,文件名将被加密。

我理解,要解决这个问题,必须在同步期间高效地将文件元数据从服务器传输到客户端。我想知道是否有办法(即现有工具的组合)将元数据存储在一个地方,这样只需发送一个(或几个)数据块就可以传输所有数据,而不是发送数千个数据块(这就是转发stat()调用所做的)。

如果我要替换存储在服务器上一个大文件内的 over 分区,并通过 over 安装在客户端上,会怎么样encfs?文件ext4系统是否会将文件元数据保存在一起,以便仅通过发送几个块即可传输?在更新期间是否知道只发送几个块,而不是重写整个加密文件?dm-cryptlosetupsshfsext4sshfs

答案1

我曾成功使用ext4over luksover sshfs。我发现在这种类型的挂载上运行比 over overunison要快得多。因此,一定是这些数千个结构以某种方式捆绑在fs 中,这样它们在同步期间需要的网络流量就更少了。encfssshfsstat()ext4

有一点有点烦人,那就是ext4文件系统需要每个文件都有一个用户 ID,当文件系统在客户端本地挂载时,这个用户 ID 用于计算访问权限ext4。就我而言,我选择将本地用户 ID 更改为特定数字全部我正在同步的客户端。另一种方法是将文件存储在ext4具有 uid 0 的 fs 中,然后使用非 root uidbindfs挂载fs。ext4

相关内容