schnellerer Weg, um ein Remote-Dateisystem als sshfs zu mounten?

72

Ich habe sshfs verwendet, um aus der Ferne zu arbeiten, aber es ist sehr langsam und ärgerlich, besonders wenn ich Eclipse verwende.

Gibt es eine schnellere Möglichkeit, das Remote-Dateisystem lokal bereitzustellen? Meine oberste Priorität ist die Geschwindigkeit.

Remote-Rechner ist Fedora 15, lokaler Rechner ist Ubuntu 10.10. Bei Bedarf kann ich auch Windows XP lokal verwenden.

Vendetta
quelle

Antworten:

14

sshfs verwendet das SSH-Dateiübertragungsprotokoll, was Verschlüsselung bedeutet.

Wenn Sie nur über NFS mounten, geht es natürlich schneller, weil nicht verschlüsselt.

Versuchen Sie, Volumes im selben Netzwerk bereitzustellen? dann benutze NFS .

Tilo
quelle
35
Es ist nicht langsam wegen der Verschlüsselung, es ist langsam, weil es sich um FUSE handelt und es überprüft ständig den Dateisystemstatus.
19.
3
@w00t Ich glaube nicht, dass es FUSE ist, das es verlangsamt, und nicht die Verschlüsselung. Das Ändern der Verschlüsselung in arcfour beschleunigte die Arbeit für mich, während das Verwenden scpgenauso langsam war wie sshfs.
Sparhawk
21
@ Sparhawk gibt es einen Unterschied zwischen Durchsatz und Latenz. FUSE bietet eine ziemlich hohe Latenz, da der Dateisystemstatus häufig mit ineffizienten Mitteln überprüft werden muss. Mit arcfour erzielen Sie einen guten Durchsatz, da die Verschlüsselung einfacher ist. In diesem Fall ist die Latenz am wichtigsten, da der Editor dadurch beim Auflisten und Laden von Dateien langsamer wird.
29.
3
@ w00t. Ah okay. Gute Argumente.
Sparhawk
41

Wenn Sie die Geschwindigkeit für sshfs-Verbindungen verbessern müssen, probieren Sie diese Optionen aus:

oauto_cache,reconnect,defer_permissions,noappledouble,nolocalcaches,no_readahead

Befehl wäre:

sshfs remote:/path/to/folder local -oauto_cache,reconnect,defer_permissions
Meetai.com
quelle
1
Danke, für mich gearbeitet! Musste allerdings entfernen defer_permissions(unbekannte Option).
Mathieu Rodic
4
nolocalcaches Verringern Sie nicht die Leistung, indem Sie bei jeder Operation Lookups erzwingen ? Widerspricht das auto_cache?
EarthMeLon
2
nolocalcaches und defer_permissions scheinen auf Debian Jessie nicht mehr gültig zu sein.
Jemand
4
Warum no_readahead?
Studgeek
1
Was meinst du mit "oauto_cache"?
ManuelSchneid3r
18

Neben den bereits vorgeschlagenen Lösungen für die Verwendung von Samba / NFS, die vollkommen gültig sind, könnten Sie auch einen gewissen Geschwindigkeitsschub erzielen, sshfsindem Sie eine schnellere Verschlüsselung verwenden (die Authentifizierung wäre genauso sicher wie gewöhnlich, die übertragenen Daten selbst wären jedoch einfacher zu entschlüsseln), indem Sie eine -o Ciphers=arcfourOption angeben zu sshfs. Dies ist besonders nützlich, wenn Ihr Computer eine schwache CPU hat.

ein Land
quelle
-oCipher=arcfourmachte keinen Unterschied in meinen Tests mit einer 141 MB großen Datei, die aus zufälligen Daten erstellt wurde.
Sparhawk
6
Das liegt daran, dass der Befehl mehrere Tippfehler enthielt. Ich habe es bearbeitet. Ich bemerkte eine 15% ige Beschleunigung von meinem Himbeer-Pi-Server. (+1)
Sparhawk
4
Die Chiffre [email protected] ist ebenfalls eine Option, die Sie in Betracht ziehen sollten, da arcfour veraltet ist. Chacha20 ist auf ARM-Prozessoren schneller als AES, auf x86-Prozessoren mit AES-Anweisungen jedoch weitaus schlechter (was heutzutage bei allen modernen Desktop-CPUs Standard ist). klingt.net/blog/ssh-cipher-performance-comparision Sie können unterstützte Chiffren mit "ssh -Q cipher"
TimSC 20.11.17
11

Ich habe keine Alternativen zu empfehlen, kann aber Vorschläge zur Beschleunigung von sshfs machen:

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

Dies sollte einige Roundtrip-Anforderungen vermeiden, wenn Sie versuchen, Inhalte oder Berechtigungen für Dateien zu lesen, die Sie bereits zu einem früheren Zeitpunkt in Ihrer Sitzung abgerufen haben.

sshfs simuliert Löschvorgänge und Änderungen lokal, sodass neue Änderungen, die auf dem lokalen Computer vorgenommen wurden, trotz der großen Zeitüberschreitungen sofort angezeigt werden, da zwischengespeicherte Daten automatisch gelöscht werden.

Diese Optionen werden jedoch nicht empfohlen, wenn die Remote-Dateien möglicherweise aktualisiert werden, ohne dass der lokale Computer dies weiß, z. B. durch einen anderen Benutzer oder eine Remote-SSH-Shell. In diesem Fall sind geringere Timeouts vorzuziehen.

Hier sind einige weitere Optionen, mit denen ich experimentiert habe, obwohl ich nicht sicher bin, ob sie einen Unterschied gemacht haben:

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"

Sie sollten auch die von Meetai in seiner Antwort empfohlenen Optionen prüfen .

Rekursion

Das größte Problem in meinem Workflow besteht darin, dass ich versuche, viele Ordner zu lesen, z. B. in einem tiefen Baum, da sshfs für jeden Ordner eine Roundtrip-Anforderung separat ausführt. Dies kann auch der Engpass sein, den Sie mit Eclipse haben.

Das parallele Anfordern mehrerer Ordner könnte hier Abhilfe schaffen, aber die meisten Apps tun dies nicht: Sie wurden für Dateisysteme mit geringer Latenz und Read-Ahead-Caching entwickelt. Daher warten sie, bis ein Dateistatus abgeschlossen ist, bevor sie mit dem nächsten fortfahren .

Vor-Zwischenspeicherung

Aber etwas sshfs könnte , wäre tun , um nach vorne schaut auf dem Remote - Dateisystem, Ordner Statistiken sammeln , bevor ich sie bitten, und sie mir zu schicken , wenn die Verbindung nicht sofort besetzt. Dies würde mehr Bandbreite verbrauchen (von Lookahead-Daten, die nie verwendet werden), könnte aber die Geschwindigkeit verbessern.

Wir können sshfs zwingen, ein Read-Ahead-Caching durchzuführen, indem wir dies ausführen, bevor Sie mit Ihrer Aufgabe beginnen, oder sogar im Hintergrund, wenn Ihre Aufgabe bereits ausgeführt wird:

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

Dadurch sollten alle Verzeichniseinträge vorab zwischengespeichert werden, wodurch der spätere Overhead durch Roundtrips verringert wird. (Natürlich müssen Sie die großen Zeitlimits verwenden, die ich zuvor angegeben habe. Andernfalls werden die zwischengespeicherten Daten gelöscht, bevor Ihre App darauf zugreift.)

Aber das findwird lange dauern. Wie bei anderen Apps wartet es auf die Ergebnisse aus einem Ordner, bevor es das nächste anfordert.

Möglicherweise können Sie die Gesamtzeit verkürzen, indem Sie mehrere Suchvorgänge auffordern, verschiedene Ordner zu durchsuchen. Ich habe nicht getestet, ob dies wirklich effizienter ist. Es hängt davon ab, ob sshfs Anforderungen parallel zulässt. (Ich denke schon.)

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 &

Wenn Sie auch Dateiinhalte vorab zwischenspeichern möchten, können Sie Folgendes versuchen:

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

Offensichtlich dauert dies viel länger, überträgt eine Menge Daten und erfordert eine enorme Cache-Größe. Aber wenn es fertig ist, sollte sich der Zugriff auf die Dateien angenehm und schnell anfühlen.

joeytwiddle
quelle
4

SSHFS ist sehr langsam, da es den Dateiinhalt überträgt, auch wenn dies nicht erforderlich ist (bei Ausführung von cp). Ich habe dies Upstream und Debian gemeldet, aber keine Antwort: /

Daniel Milde
quelle
2
Es ist effizient mit mv. Wenn Sie cplokal ausführen , werden in FUSE leider nur Anforderungen zum Öffnen von Dateien zum Lesen und Schreiben angezeigt. Es ist nicht bekannt, dass Sie eine Kopie einer Datei erstellen. Für FUSE unterscheidet es sich nicht von einem allgemeinen Dateischreibvorgang. Ich fürchte, dies kann nur behoben werden, wenn das lokale cpSystem FUSE-fähiger / FUSE-freundlicher gemacht wird. (Oder FUSE ist möglicherweise in der Lage, Block-Hashes anstelle ganzer Blöcke zu senden, wenn der Verdacht auf a besteht cp, wie dies bei rsync der Fall ist.
Dies
3

Nach der Suche und Prüfung. Ich habe gerade festgestellt, dass -o Compression=noes viel schneller geht. Die Verzögerung kann durch den Komprimierungs- und Dekomprimierungsprozess verursacht werden. Außerdem verwenden ‚Chiffren = aes128-ctr‘ scheint schneller als andere , während einige Post einige Experimente auf das getan hat. Dann ist mein Befehl irgendwie so:

sshfs -o Erlaube_andere, transformiere_symlinks, folge_symlinks, IdentityFile = / Users / maple / .ssh / id_rsa -o Auto_Cache, verbinde dich neu, verschiebe_Berechtigungen -o Chiffren = aes128-ctr -o Komprimierung = no [email protected]: / home / maple ~ / mntpoint

Ahorn
quelle
2

NFS sollte schneller sein. Wie fern ist das Dateisystem? Wenn es über das WAN geht, ist es möglicherweise besser, die Dateien nur hin und her zu synchronisieren, als den direkten Remotezugriff.

Adam Wagner
quelle
1

Entweder NFS oder Samba, wenn Sie große Dateien haben. Die Verwendung von NFS mit so etwas wie 720p-Filmen und Mist ist wirklich eine PITA. Samba wird einen besseren Job machen, obwohl ich Samba aus einer Reihe anderer Gründe nicht mag und ich es normalerweise nicht empfehlen würde.

Für kleine Dateien sollte NFS in Ordnung sein.

Franz Bettag
quelle
1

Ich fand, dass das Ausschalten meines zsh-Themas, bei dem der Status der Git-Datei überprüft wurde, enorm hilfreich war - das bloße Eingeben des Verzeichnisses dauerte mehr als 10 Minuten. Ebenso deaktivieren Sie Git Status Checker in Vim.

bloke_zero
quelle
Wow, das ist ein wirklich guter Tipp!
Dmitri
-2

Melden Sie sich als root an.

Greifen Sie mit "cd /" auf Ihr oberstes Verzeichnis zu.

Stellen Sie dann sicher, dass Sie einen Mount-Ordner erstellt haben, oder erstellen Sie einen mit "mkdir folder_name".

Verwenden Sie danach einfach "mount xxxx: / remote_mount_directory / local_mount_directory".

Wenn alles geklappt hat, sollten Sie zuvor ein erfolgreiches Reittier haben. Sie können überprüfen und sicherstellen, dass das Zielverzeichnis freigegeben ist, indem Sie den Befehl "exportfs" verwenden, um sicherzustellen, dass sie gefunden werden.

Hoffe das hilft. Dies ist keine Lvie-Umgebung, sondern wurde in einem LAN mit VMware und Fedora 16 getestet.

JasonN
quelle
5
Dies beantwortet nicht die Frage…
Léo Lam