比sshfs更快的方式来安装远程文件系统?


72

我一直在使用sshfs进行远程工作,但这确实很慢且令人讨厌,特别是当我在其上使用eclipse时。

有没有更快的方法在本地安装远程文件系统?我的第一要务是速度。

远程计算机是Fedora 15,本地计算机是Ubuntu 10.10。如果需要,我也可以在本地使用Windows XP。

Answers:


14

sshfs使用SSH文件传输协议,这意味着加密。

如果仅通过NFS挂载,则由于未加密,因此当然会更快。

您是否要在同一网络上装载卷然后使用NFS


35
它不会因为加密而变慢,而是因为它是FUSE而变慢,并且会不断检查文件系统状态。
w00t

3
@ w00t我不认为这是保险丝使它变慢,而不是加密。将加密更改为arcfour为我加快了速度,而使用scp速度却和一样慢sshfs
Sparhawk

21
@Sparhawk在吞吐量和延迟之间存在差异。FUSE给您带来相当高的延迟,因为它必须使用一些相当低效的方法来检查文件系统状态。由于加密更简单,arcfour为您提供了良好的吞吐量。在这种情况下,延迟是最重要的,因为这就是导致编辑器列出和加载文件的速度很慢的原因。
w00t 2013年

3
@ w00t。啊好吧。好点。
Sparhawk

41

如果需要提高sshfs连接的速度,请尝试以下选项:

oauto_cache,reconnect,defer_permissions,noappledouble,nolocalcaches,no_readahead

命令将是:

sshfs remote:/path/to/folder local -oauto_cache,reconnect,defer_permissions

1
谢谢,为我工作!不得不删除defer_permissions(未知选项)。
Mathieu Rodic'3

4
不会通过强制每个操作查找来nolocalcaches 降低性能吗?这有矛盾吗?auto_cache
EarthmeLon

2
在Debian Jessie上,nolocalcaches和defer_permissions似乎无效(不再吗?)。
某人2015年

4
为什么no_readahead
studgeek '16

1
“ oauto_cache”是什么意思?
ManuelSchneid3r

18

除了已经提出的完全有效的使用Samba / NFS的解决方案外,您还sshfs可以通过提供-o Ciphers=arcfour选项来实现更快的坚持速度(通过使用更快的加密(身份验证将像往常一样安全,但是传输的数据本身将更容易解密))到sshfs。如果您的计算机的CPU较弱,此功能特别有用。


-oCipher=arcfour使用随机数据创建的141 MB文件对我的测试没有影响。
Sparhawk

6
那是因为命令中有多个错别字。我已经编辑了 我注意到树莓派服务器的速度提高了15%。(+1)
Sparhawk

4
chacha20-poly1305@openssh.com密码也是一个值得考虑的选择,现在arcfour已过时。Chacha20在ARM处理器上比AES快,但在带有AES指令的x86处理器上却差得多(当今所有现代台式机CPU都已将它们作为标准)。klingt.net/blog/ssh-cipher-performance-comparision 您可以使用“ ssh -Q cipher”列出受支持的密码
TimSC '17

11

我没有其他推荐的方法,但是我可以提供有关如何加快sshfs速度的建议:

sshfs -o cache_timeout=115200 -o attr_timeout=115200 ...

当您尝试读取会话中早先已检索到的文件的内容或权限时,这应该避免某些往返请求。

sshfs在本地模拟删除和更改,因此,尽管超时很大,但由于将自动删除缓存的数据,因此应立即显示在本地计算机上进行的新更改。

但是,如果远程文件可能在本地机器不知情的情况下(例如,由其他用户或远程ssh shell进行)更新,则不建议使用这些选项。在这种情况下,较低的超时时间将是可取的。

这是我尝试过的一些其他选项,尽管我不确定它们是否有所作为:

sshfs_opts="-o auto_cache -o cache_timeout=115200 -o attr_timeout=115200   \
-o entry_timeout=1200 -o max_readahead=90000 -o large_read -o big_writes   \
-o no_remote_lock"

您还应该查看Meetai在其答案中推荐的选项

递归

工作流中最大的问题是,当我尝试读取许多文件夹(例如在一棵深树中)时,因为sshfs分别为每个文件夹执行往返请求。这也可能是您遇到Eclipse的瓶颈。

并行请求多个文件夹可以帮助解决此问题,但是大多数应用程序却不这样做:它们是为具有预读缓存的低延迟文件系统设计的,因此它们在等待一个文件状态完成之前便转到下一个。

预缓存

但是sshfs可以做的是先查看远程文件系统,在我请求它们之前收集文件夹统计信息,并在不立即占用连接时将它们发送给我。这将使用更多带宽(来自从未使用的前瞻数据),但可以提高速度。

我们可以通过在开始执行任务之前甚至在后台进行任务时运行sshfs来进行一些预读缓存:

find project/folder/on/mounted/fs > /dev/null &

这应该预先缓存所有目录条目,从而减少往返后的一些开销。(当然,您需要像我之前提供的那样使用较大的超时,否则此缓存的数据将在您的应用访问之前被清除。)

但这find将花费很长时间。与其他应用程序一样,它在请求下一个文件夹之前等待一个文件夹的结果。

通过要求多个查找过程查找不同的文件夹,可以减少总时间。我还没有测试过,看看是否真的更有效。这取决于sshfs是否允许并行请求。(我认为是。)

find project/folder/on/mounted/fs/A > /dev/null &
find project/folder/on/mounted/fs/B > /dev/null &
find project/folder/on/mounted/fs/C > /dev/null &

如果您还想预缓存文件内容,则可以尝试以下操作:

tar c project/folder/on/mounted/fs > /dev/null &

显然,这将花费更长的时间,将传输大量数据,并要求您拥有巨大的缓存大小。但是,完成后,访问文件应该会感觉很好且快速。


4

SSHFS确实很慢,因为它即使不需要传输文件内容(执行cp时)也可以传输文件内容。我向上游和Debian报告了此问题,但没有回应:/


2
使用可以有效mv。不幸的是,当您在cp本地运行时,FUSE仅看到打开文件进行读写的请求。它不知道您正在复制文件。熔断它看起来与普通文件写入没有什么不同。因此,我担心除非本地cp变得更加支持FUSE / FUSE,否则无法解决此问题。(或者FUSE cp像rsync一样怀疑a时可能会发送块哈希而不是整个块,但这会很复杂,并且可能会使其他操作变慢。)
joeytwiddle

3

经过搜索和试用。我刚刚发现增加-o Compression=no速度很多。延迟可能是由压缩和解压缩过程引起的。此外,使用“ Ciphers = aes128-ctr”似乎比其他人快,而一些帖子对此做了一些实验。然后,我的命令是这样的:

sshfs -o allow_other,transform_symlinks,follow_symlinks,IdentityFile = / Users / maple / .ssh / id_rsa -o auto_cache,重新连接,defer_permissions -o Ciphers = aes128-ctr -o Compression = no maple@123.123.123.123〜/ home / map / mntpoint


2

NFS应该更快。文件系统有多远?如果是通过WAN,最好直接来回同步文件,而不是直接远程访问。


1

如果文件很大,则使用NFS或Samba。将NFS与720p电影和废话结合使用确实是一种PITA。Samba会做得更好,由于其他许多原因,我不喜欢Samba,因此通常不推荐这样做。

对于小文件,NFS应该可以。


1

我发现关闭检查git文件状态的zsh主题非常有帮助-进入目录仅需10分钟以上。同样在Vim中关闭git status checkers。


哇,这是一个非常好的提示!
德米特里

-2

以root身份登录。

通过使用“ cd /”访问顶级目录。

然后,确保已创建一个安装文件夹,或使用“ mkdir folder_name”创建一个安装文件夹。

之后,只需使用“ mount xxxx:/ remote_mount_directory / local_mount_directory”。

如果一切都顺利进行,那么在此之前您应该已经成功安装了。您可能要检查并确保使用“ exportfs”命令共享目标目录,以确保能够找到它们。

希望这可以帮助。这不是来自lvie环境,它已经在使用VMware和Fedora 16的LAN上进行了测试。


5
这不能回答问题……
Lao Lam
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.