szybszy sposób zamontowania zdalnego systemu plików niż sshfs?


72

Używam sshfs do pracy zdalnej, ale jest to naprawdę powolne i denerwujące, szczególnie gdy używam na nim zaćmienia.

Czy istnieje szybszy sposób na lokalny montaż zdalnego systemu plików? Moim priorytetem nr 1 jest szybkość.

Zdalna maszyna to Fedora 15, lokalna to Ubuntu 10.10. W razie potrzeby mogę także używać systemu Windows XP lokalnie.

Odpowiedzi:


14

sshfs używa protokołu przesyłania plików SSH, co oznacza szyfrowanie.

Jeśli montujesz tylko przez NFS, jest to oczywiście szybsze, ponieważ nie jest szyfrowane.

próbujesz zamontować woluminy w tej samej sieci? następnie użyj NFS .


35
Nie jest wolny z powodu szyfrowania, jest wolny, ponieważ jest BEZPIECZNY i ciągle sprawdza stan systemu plików.
w00t

3
@ w00t Nie sądzę, że to BEZPIECZNIK spowalnia go, a nie szyfrowanie. Zmiana szyfrowania na arcfour przyspieszyła dla mnie, podczas gdy używanie scpbyło tak samo powolne jak sshfs.
Sparhawk

21
@Sparhawk istnieje różnica między przepływnością a opóźnieniem. BEZPIECZNIK daje dość duże opóźnienie, ponieważ musi bardzo często sprawdzać stan systemu plików za pomocą dość nieefektywnych środków. arcfour zapewnia dobrą przepustowość, ponieważ szyfrowanie jest prostsze. W tym przypadku opóźnienie jest najważniejsze, ponieważ powoduje to, że edytor spowalnia wyświetlanie i ładowanie plików.
w00t 29.09.13

3
@ w00t. Ah, dobrze. Słuszne uwagi.
Sparhawk

41

Jeśli chcesz poprawić szybkość połączeń sshfs, wypróbuj następujące opcje:

oauto_cache,reconnect,defer_permissions,noappledouble,nolocalcaches,no_readahead

polecenie byłoby:

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

1
Dzięki, pracowałeś dla mnie! Musiałem usunąć defer_permissions(nieznana opcja).
Mathieu Rodic

4
Czy nie nolocalcaches zmniejszy wydajności przez wymuszanie wyszukiwania przy każdej operacji? Czy to jest sprzeczne auto_cache?
earthmeLon

2
nolocalcaches i defer_permissions wydają się nieważne (już?) na Debian Jessie.
Ktoś

4
Dlaczego no_readahead?
studgeek

1
Co rozumiesz przez „oauto_cache”?
ManuelSchneid3r

18

Oprócz już zaproponowanych rozwiązań korzystania z Samby / NFS, które są całkowicie poprawne, można również osiągnąć pewne przyspieszenie przy sshfsużyciu szybszego szyfrowania (uwierzytelnianie byłoby tak bezpieczne, jak zwykle, ale same przesłane dane łatwiej byłoby odszyfrować) poprzez podanie -o Ciphers=arcfouropcji do sshfs. Jest to szczególnie przydatne, jeśli komputer ma słaby procesor.


-oCipher=arcfournie zmieniło to moich testów z plikiem 141 MB utworzonym z losowych danych.
Sparhawk

6
To dlatego, że w poleceniu było wiele literówek. Zredagowałem to. Zauważyłem 15% przyspieszenie z mojego serwera Raspberry Pi. (+1)
Sparhawk

4
Szyfrowanie chacha20-poly1305@openssh.com jest również opcją wartą rozważenia, teraz arcfour jest przestarzały. Chacha20 jest szybszy na procesorach ARM niż AES, ale znacznie gorzej na procesorach x86 z instrukcjami AES (które obecnie wszystkie współczesne procesory do komputerów stacjonarnych mają standardowo). klingt.net/blog/ssh-cipher-performance-comparision Możesz wyświetlić obsługiwane szyfry z „ssh -Q cipher”
TimSC

11

Nie mam żadnych alternatyw, które mogę polecić, ale mogę podać sugestie dotyczące przyspieszenia sshfs:

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

Powinno to uniknąć niektórych żądań podróży w obie strony, gdy próbujesz odczytać zawartość lub uprawnienia do plików, które już pobrałeś wcześniej w sesji.

sshfs symuluje usuwanie i zmiany lokalnie, więc nowe zmiany wprowadzone na komputerze lokalnym powinny pojawić się natychmiast, pomimo dużych limitów czasu, ponieważ dane w pamięci podręcznej są automatycznie usuwane.

Jednak te opcje niezalecane, jeśli zdalne pliki mogą zostać zaktualizowane bez wiedzy komputera lokalnego, np. Przez innego użytkownika lub zdalną powłokę ssh. W takim przypadku preferowane byłyby niższe limity czasu.

Oto kilka innych opcji, z którymi eksperymentowałem, chociaż nie jestem pewien, czy któraś z nich zrobiła różnicę:

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"

Powinieneś także sprawdzić opcje zalecane przez Meetai w jego odpowiedzi.

Rekurencja

Największym problemem w moim przepływie pracy jest próba odczytania wielu folderów, na przykład w głębokim drzewie, ponieważ sshfs wykonuje żądanie podróży w obie strony dla każdego folderu osobno. Może to być również wąskie gardło występujące w środowisku Eclipse.

Zgłaszanie próśb o wiele folderów równolegle mogłoby pomóc, ale większość aplikacji tego nie robi: zostały one zaprojektowane dla systemów plików o niskim opóźnieniu z buforowaniem z wyprzedzeniem odczytu, więc czekają na zakończenie statystyki jednego pliku przed przejściem do następnego .

Głoszenie

Ale coś, co sshfs mógłby zrobić, to spojrzeć w przyszłość na zdalny system plików, zebrać statystyki folderów, zanim ich zażądam, i wysłać je do mnie, gdy połączenie nie zostanie natychmiast zajęte. Zużyłoby to większą przepustowość (z danych nigdy wcześniej nieużywanych), ale mogłoby poprawić prędkość.

Możemy zmusić sshfs do wykonania buforowania z wyprzedzeniem odczytu, uruchamiając to przed rozpoczęciem zadania lub nawet w tle, gdy zadanie jest już w toku:

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

To powinno wstępnie buforować wszystkie wpisy katalogu, zmniejszając część późniejszych kosztów związanych z podróżami w obie strony. (Oczywiście musisz użyć dużych limitów czasu, takich jak te, które podałem wcześniej, w przeciwnym razie dane w pamięci podręcznej zostaną usunięte, zanim aplikacja uzyska do nich dostęp).

Ale to findzajmie dużo czasu. Podobnie jak inne aplikacje, czeka na wyniki z jednego folderu, zanim zażąda następnego.

Może być możliwe skrócenie ogólnego czasu poprzez poproszenie wielu procesów wyszukiwania o przejrzenie różnych folderów. Nie testowałem, czy to naprawdę jest bardziej wydajne. Zależy, czy sshfs zezwala na równoległe żądania. (Myślę, że tak.)

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 &

Jeśli chcesz również wstępnie buforować zawartość pliku, możesz spróbować:

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

Oczywiście zajmie to znacznie więcej czasu, przeniesie dużo danych i wymaga dużej pamięci podręcznej. Ale kiedy to się skończy, dostęp do plików powinien być przyjemny i szybki.


4

SSHFS jest naprawdę wolny, ponieważ przenosi zawartość pliku, nawet jeśli nie musi (podczas wykonywania cp). Zgłosiłem to do Debiana, ale nie otrzymałem odpowiedzi: /


2
Jest wydajny z mv. Niestety podczas uruchamiania cplokalnego FUSE widzi tylko żądania otwarcia plików do odczytu i zapisu. Nie wie, że tworzysz kopię pliku. Aby BEZPIECZNIK nie wygląda inaczej niż ogólny zapis pliku. Obawiam się, że nie da się tego naprawić, chyba że lokal cpbędzie bardziej przyjazny dla FUSE / FUSE. (Lub FUSE może wysyłać skróty bloków zamiast całych bloków, gdy podejrzewa cp, że tak jak rsync, ale byłoby to skomplikowane i mogłoby spowolnić inne operacje.)
joeytwiddle

3

Po przeszukaniu i próbie. Właśnie odkryłem, -o Compression=noże szybkość jest bardzo duża. Opóźnienie może być spowodowane procesem kompresji i dekompresji. Poza tym użycie „Ciphers = aes128-ctr” wydaje się szybsze niż inne, podczas gdy niektóre posty przeprowadziły na tym temat pewne eksperymenty. Zatem moje polecenie jest jakoś tak:

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 powinien być szybszy. Jak zdalny jest system plików? Jeśli jest to w sieci WAN, lepiej byłoby po prostu zsynchronizować pliki tam iz powrotem, zamiast bezpośredniego dostępu zdalnego.


1

NFS lub Samba, jeśli masz duże pliki. Używanie NFS z czymś takim jak filmy 720p i bzdury to naprawdę PITA. Samba wykona lepszą robotę, chociaż nie lubię Samby z wielu innych powodów i zwykle nie polecałbym tego.

W przypadku małych plików NFS powinien działać poprawnie.


1

Odkryłem, że wyłączenie mojego motywu zsh, który sprawdzał status pliku git, pomogło wspaniale - samo wejście do katalogu zajęło ponad 10 minut. Podobnie wyłączenie sprawdzania statusu git w Vimie.


Wow, to naprawdę dobra wskazówka!
Dmitri

-2

Zaloguj się jako root.

Uzyskaj dostęp do katalogu najwyższego poziomu, używając „cd /”.

Następnie upewnij się, że masz utworzony folder montowania lub utwórz go przy użyciu „mkdir nazwa_folderu”.

Następnie wystarczy użyć „mount xxxx: / remote_mount_directory / local_mount_directory.

jeśli wszystko działało po twojej stronie, wcześniej powinieneś mieć udane zamontowanie. Możesz sprawdzić i upewnić się, że katalog docelowy jest udostępniony za pomocą polecenia „exportfs”, aby zagwarantować, że można je znaleźć.

Mam nadzieję że to pomoże. To nie pochodzi ze środowiska lvie, zostało przetestowane w sieci LAN przy użyciu VMware i Fedory 16.


5
To nie odpowiada na pytanie…
Léo Lam
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.