我正在运行一个小型家庭服务器来存储我的文档。此服务器中的磁盘采用 RAID 1 配置(使用 Linux md),并且还会定期将其备份到外部硬盘驱动器以确保我不会丢失它们。但是,我总是使用 SMB 共享从家庭网络上的其他计算机访问文件,这会导致速度大幅下降(尤其是通过 WLAN 连接时)。在编辑大型文件(例如数码相机 RAW)时,这非常烦人。
我一直在寻找解决这个问题的方法。它必须提供某种本地缓存来加快文件访问速度。客户端最好不要在服务器上保留所有数据的副本,因为它包含大量照片,其中大部分我不会经常访问。相反,它应该只缓存访问过的文件并在后台同步更改。理想情况下,它还会进行一些智能预读(例如,缓存与当前打开的文件位于同一目录中的文件),但我认为这要求有点高。同步应该是自动的(文件更改时)。在我的用例中,冲突的文件更改(同时在不同的客户端上)不太可能发生,但我更希望它们得到正确处理(通知用户)。
到目前为止,我遇到过以下选项:
类似于 Dropbox 的东西。文件夹似乎是唯一接近它的东西,但是它的声誉(稳定性)和要求让我望而却步。
分布式文件系统,例如开放AFS。我不确定这是否会加快文件访问速度。这可能超出了我的需要。
也许 NFS 甚至 Samba 提供了这些可能性。我读了一些关于 Windows 的脱机文件,但它的操作似乎有限(至少在 Windows XP 上)。
由于这只是个人使用,我不愿意花很多钱。最好是免费解决方案。此外,服务器需要在 Linux 上运行,并且我至少需要一个适用于 Windows 的客户端。
编辑:从那时起,我就设置了 OpenAFS(这是一个相当复杂的过程)。它似乎满足了我的大部分需求。文件在本地缓存,加快了对缓存文件的访问速度。当然,第一次访问文件仍然很慢。我期待断开 AFS计划在未来的 OpenAFS 版本中推出,因为它将允许预先缓存文件。这对于编辑大型文件集(例如相机 RAW)来说非常完美。
答案1
您可以使用 FS-Cache 缓存 NFSv4 的读取和写入。Red Hat 已编写好的文档。
FS-Cache 是一种持久本地缓存,文件系统可以使用它来获取通过网络检索的数据并将其缓存在本地磁盘上。这有助于最大限度地减少用户从通过网络安装的文件系统(例如 NFS)访问数据的网络流量。
答案2
在断开连接模式下工作的文件系统的问题是 1) 并发访问和 2) 同步。如果您不需要并发访问,只需购买可移动硬盘并随身携带即可。如果您确实需要并发访问,那么您将遇到同步问题,因为使用本地副本的客户端如何告诉其他客户端网络上的副本现已过期?如果您考虑一下,越接近同步,缓存的意义就越小。因此,通常两种极端是获胜者;您可以获得便携式驱动器或使用不缓存的文件系统。
对于您的照片,您实际上可能想要的是本地索引,这样您就可以在索引中进行本地搜索,但从网络获取实际文件。这将在比文件系统本身更高的级别上进行操作,因此您没有找到所需内容的原因是您找错了东西。 :) 您可能应该寻找图像索引程序;据我所知,这个问题已经通过多种方式得到解决。
对于更通用的解决方案,受到 Subversion 或 CVS 或类似软件启发的某些东西可能会效果很好。