sshfsよりも高速にリモートファイルシステムをマウントできますか?


72

私はsshfsを使用してリモートで作業していましたが、特にEclipseを使用している場合は、非常に遅くて面倒です。

リモートファイルシステムをローカルにマウントするより速い方法はありますか?私の一番の優先事項はスピードです。

リモートマシンはFedora 15、ローカルマシンはUbuntu 10.10です。必要に応じて、Windows XPをローカルで使用することもできます。

回答:


14

sshfsは暗号化を意味するSSHファイル転送プロトコルを使用しています。

NFS経由でマウントするだけの場合、暗号化されていないため、もちろん高速です。

同じネットワークにボリュームをマウントしようとしていますか?次に、NFSを使用します


35
暗号化のために低速ではありません。FUSEであるため低速であり、ファイルシステムの状態をチェックし続けます。
w00t

3
@ w00t暗号化ではなく、FUSEがそれを遅くしているとは思わない。暗号化をarcfourに変更すると、暗号化のscp速度が上がりましたが、使用はと同じくらい遅かったsshfsです。
スパーホーク

21
@Sparhawkでは、スループットと待機時間に違いがあります。FUSEは、非常に非効率的な手段を使用してファイルシステムの状態を頻繁にチェックする必要があるため、非常に高いレイテンシを提供します。暗号化がより簡単であるため、arcfourは優れたスループットを提供します。この場合、待ち時間が最も重要です。これは、エディターがファイルの一覧表示と読み込みを遅くする原因となるためです。
w00t

3
@ w00t。あ、そう。良い点。
スパーホーク

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ただし、削除する必要がありました(不明なオプション)。
マチューロディック

4
操作ごとに検索を強制nolocalcaches することでパフォーマンスを低下させませんか?これは矛盾しますか?auto_cache
earthmeLon

2
Debian Jessieでは、nolocalcachesとdefer_permissionsは(もう?)有効ではないようです。
誰か

4
なんでno_readahead
studgeek

1
「oauto_cache」とはどういう意味ですか?
-ManuelSchneid3r

18

完全に有効なSamba / NFSを使用する既に提案されたソリューションに加えて、オプションを提供することsshfsにより、より高速な暗号化(認証は通常と同じように安全ですが、転送されたデータ自体は解読しやすくなり-o Ciphers=arcfourます)へsshfs。マシンのCPUが弱い場合に特に役立ちます。


-oCipher=arcfourランダムデータから作成された141 MBのファイルを使用したテストでは、違いはありませんでした。
スパラフーク

6
これは、コマンドに複数のタイプミスがあったためです。編集しました。raspberry piサーバーの速度が15%向上したことに気付きました。(+1)
スパーホーク

4
chacha20-poly1305@openssh.com暗号も、arcfourが廃止されたため、考慮する価値のあるオプションです。Chacha20は、AESよりもARMプロセッサで高速ですが、AES命令を備えたx86プロセッサでははるかに劣ります(最近のすべてのデスクトップCPUに標準装備されています)。klingt.net/blog/ssh-cipher-performance-comparision サポートされている暗号を「ssh -Q暗号」で一覧表示できます
TimSC

11

推奨する代替手段はありませんが、sshfsを高速化する方法を提案できます。

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

これにより、セッションの早い段階で既に取得したファイルのコンテンツまたはアクセス許可を読み取ろうとするときのラウンドトリップリクエストの一部を回避できます。

sshfsはローカルで削除と変更をシミュレートするため、キャッシュされたデータは自動的にドロップされるため、大きなタイムアウトにもかかわらず、ローカルマシンで行われた新しい変更はすぐに表示されます。

ただし、ローカルマシンが知らないうちにリモートファイルが更新される可能性がある場合(別のユーザーやリモートsshシェルなど)、これらのオプションは推奨されません。その場合は、より低いタイムアウトが望ましいでしょう。

私が試したいくつかのオプションがありますが、どれが違いを生んだかはわかりません:

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で経験するボトルネックでもあります。

複数のフォルダーのリクエストを並行して行うことでこれを支援できますが、ほとんどのアプリはそれを行いません:先読みキャッシングを備えた低レイテンシのファイルシステム向けに設計されているため、1つのファイルの統計情報が完了するのを待ってから次のファイルに移動します。

プリキャッシング

しかし、sshfsでできることは、リモートファイルシステムを先読みし、要求する前にフォルダーの統計を収集し、接続がすぐに占有されないときにそれらを送信することです。これにより、使用されることのない先読みデータからのより多くの帯域幅が使用されますが、速度は向上します。

タスクを開始する前にこれを実行するか、タスクが既に進行中のバックグラウンドで実行することにより、sshfsに先読みキャッシュを強制的に実行させることができます。

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

これにより、すべてのディレクトリエントリが事前にキャッシュされ、ラウンドトリップによる後のオーバーヘッドの一部が削減されます。(もちろん、以前に提供したような大きなタイムアウトを使用する必要があります。そうしないと、アプリがアクセスする前にこのキャッシュデータがクリアされます。)

しかし、それにfindは長い時間がかかります。他のアプリと同様に、1つのフォルダーからの結果を待ってから次のフォルダーを要求します。

複数の検索プロセスに異なるフォルダーを調べるように依頼することで、全体の時間を短縮できる場合があります。これが本当に効率的かどうかを確認するテストは行っていません。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は読み取りおよび書き込みのためにファイルを開く要求のみを表示します。ファイルのコピーを作成していることはわかりません。FUSEにとっては、一般的なファイル書き込みと何ら変わりはありません。したがって、ローカルをcpFUSE対応/ FUSEフレンドリーにしない限り、これを修正できないのではないかと心配しています。(またはcp、rsyncのようにaが疑われる場合、FUSEはブロック全体ではなくブロックハッシュを送信できる場合がありますが、それは複雑で、他の操作が遅くなる可能性があります。)
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、reconnect、defer_permissions -o Ciphers = aes128-ctr -o Compression = no maple@123.123.123.123:/ home / maple〜 / mntpoint


2

NFSはより高速になります。ファイルシステムはどのくらい離れていますか?WAN経由の場合は、直接リモートアクセスするのではなく、単にファイルを前後に同期する方がよい場合があります。


1

大きなファイルがある場合は、NFSまたはSambaのいずれか。720p MoviesやがらくたのようなものでNFSを使用するのは本当にPITAです。Sambaはより良い仕事をします。他のいくつかの理由でSambaが嫌いなので、通常はお勧めしません。

小さいファイルの場合、NFSで十分です。


1

gitファイルのステータスをチェックしているzshテーマをオフにすると非常に助けになることがわかりました。ディレクトリに入るだけで10分以上かかりました。同様に、Vimでgitステータスチェッカーをオフにします。


うわー、これは本当に良いヒントです!
ドミトリ

-2

ルートとしてログインします。

「cd /」を使用して、最上位ディレクトリにアクセスします。

次に、マウントフォルダーが作成されていることを確認するか、「mkdir folder_name」を使用してマウントフォルダーを作成します。

その後、単に「mount xxxx:/ remote_mount_directory / local_mount_directory」を使用します。

すべてがうまく機能していれば、この前にマウントに成功するはずです。「exportfs」コマンドを使用して宛先ディレクトリーが検出できることを保証することにより、宛先ディレクトリーが共有されていることを確認して確認することができます。

お役に立てれば。これはlvie環境のものではなく、VMwareとFedora 16を使用してLAN上でテストされています。


5
これは質問に答えません…
レオラム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.