cara yang lebih cepat untuk me-mount sistem file jarak jauh dari sshfs?

72

Saya telah menggunakan sshfs untuk bekerja dari jarak jauh, tetapi ini sangat lambat dan menyebalkan, terutama ketika saya menggunakan gerhana di atasnya.

Apakah ada cara yang lebih cepat untuk memasang sistem file jarak jauh secara lokal? Prioritas no. 1 saya adalah kecepatan.

Mesin jarak jauh adalah Fedora 15, mesin lokal adalah Ubuntu 10.10. Saya juga dapat menggunakan Windows XP secara lokal jika perlu.

Vendetta
sumber

Jawaban:

14

sshfs menggunakan protokol transfer file SSH, yang berarti enkripsi.

Jika Anda hanya me-mount melalui NFS, tentu saja lebih cepat, karena tidak dienkripsi.

apakah Anda mencoba memasang volume di jaringan yang sama? kemudian gunakan NFS .

Tilo
sumber
35
Tidak lambat karena enkripsi, lambat karena FUSE dan terus memeriksa status sistem file.
w00t
3
@ w00t Saya tidak berpikir itu SEKERING memperlambatnya, dan bukan enkripsi. Mengubah enkripsi ke arcfour mempercepatnya bagi saya, sedangkan menggunakan scpsama lambatnya sshfs.
Sparhawk
21
@Sparhawk ada perbedaan antara throughput dan latensi. FUSE memberi Anda latensi yang cukup tinggi karena harus sering memeriksa status sistem file menggunakan beberapa cara yang tidak efisien. arcfour memberi Anda throughput yang baik karena enkripsi lebih sederhana. Dalam hal ini latensi adalah yang paling penting karena itulah yang menyebabkan editor lambat dalam mendaftarkan dan memuat file.
w00t
3
@ w00t. Ah baiklah. Poin bagus.
Sparhawk
41

Jika Anda perlu meningkatkan kecepatan untuk koneksi sshfs, coba opsi ini:

oauto_cache,reconnect,defer_permissions,noappledouble,nolocalcaches,no_readahead

perintahnya adalah:

sshfs remote:/path/to/folder local -oauto_cache,reconnect,defer_permissions
Meetai.com
sumber
1
Terima kasih, berhasil untuk saya! Harus menghapus defer_permissionsmeskipun (opsi tidak dikenal).
Mathieu Rodic
4
Tidak akan nolocalcaches menurunkan kinerja dengan memaksa pencarian setiap operasi? Apakah ini bertentangan auto_cache?
earthmeLon
2
nolocalcaches dan defer_permissions tampaknya tidak berlaku (lagi?) di Debian Jessie.
Seseorang
4
Mengapa no_readahead?
studgeek
1
Apa yang Anda maksud dengan "oauto_cache"?
ManuelSchneid3r
18

Selain solusi yang sudah diusulkan untuk menggunakan Samba / NFS, yang benar-benar valid, Anda juga dapat mencapai peningkatan kecepatan dengan sshfsmenggunakan enkripsi yang lebih cepat (otentikasi akan seaman seperti biasanya, tetapi data yang ditransfer itu sendiri akan lebih mudah untuk didekripsi) dengan menyediakan -o Ciphers=arcfouropsi untuk sshfs. Ini sangat berguna jika mesin Anda memiliki CPU yang lemah.

sebuah daratan
sumber
-oCipher=arcfourtidak membuat perbedaan dalam pengujian saya dengan file 141 MB yang dibuat dari data acak.
Sparhawk
6
Itu karena ada beberapa kesalahan ketik dalam perintah. Saya sudah mengeditnya. Saya perhatikan speedup 15% dari server raspberry pi saya. (+1)
Sparhawk
4
Cipher [email protected] juga merupakan opsi yang layak dipertimbangkan karena sekarang arcfour sudah usang. Chacha20 lebih cepat pada prosesor ARM daripada AES tetapi jauh lebih buruk pada prosesor x86 dengan instruksi AES (yang dimiliki semua CPU desktop modern sebagai standar akhir-akhir ini). klingt.net/blog/ssh-cipher-performance-comparision Anda dapat membuat daftar cipher yang didukung dengan "ssh -Q cipher"
TimSC
11

Saya tidak punya alternatif untuk direkomendasikan, tetapi saya bisa memberikan saran untuk cara mempercepat sshfs:

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

Ini harus menghindari beberapa permintaan pulang pergi ketika Anda mencoba membaca konten atau izin untuk file yang sudah Anda ambil sebelumnya di sesi Anda.

sshfs mensimulasikan penghapusan dan perubahan secara lokal, sehingga perubahan baru yang dibuat pada mesin lokal akan segera muncul, meskipun waktu habis yang besar, karena data yang di-cache dihapus secara otomatis.

Tetapi opsi ini tidak direkomendasikan jika file jarak jauh mungkin diperbarui tanpa mesin lokal mengetahui, misalnya oleh pengguna yang berbeda, atau shell ssh jarak jauh. Dalam hal itu, batas waktu lebih rendah akan lebih disukai.

Berikut adalah beberapa opsi yang saya coba, meskipun saya tidak yakin apakah ada di antara mereka yang membuat perbedaan:

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"

Anda juga harus memeriksa opsi yang direkomendasikan oleh Meetai dalam jawabannya.

Pengulangan

Masalah terbesar dalam alur kerja saya adalah ketika saya mencoba membaca banyak folder, misalnya di pohon yang dalam, karena sshfs melakukan permintaan perjalanan pulang pergi untuk setiap folder secara terpisah. Ini mungkin juga menjadi hambatan yang Anda alami dengan Eclipse.

Membuat permintaan untuk beberapa folder secara paralel dapat membantu dengan ini, tetapi sebagian besar aplikasi tidak melakukan itu: mereka dirancang untuk sistem file latensi rendah dengan cache baca-depan, jadi mereka menunggu satu file stat untuk diselesaikan sebelum pindah ke yang berikutnya .

Berkhotbah

Tetapi sesuatu yang sshf bisa lakukan adalah melihat ke depan pada sistem file jarak jauh, mengumpulkan statistik folder sebelum saya meminta mereka, dan mengirimkannya kepada saya ketika koneksi tidak segera terisi. Ini akan menggunakan lebih banyak bandwidth (dari data lookahead yang tidak pernah digunakan) tetapi dapat meningkatkan kecepatan.

Kami dapat memaksa sshfs untuk melakukan caching baca-depan, dengan menjalankan ini sebelum Anda memulai tugas Anda, atau bahkan di latar belakang saat tugas Anda sedang berjalan:

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

Itu harus pra-cache semua entri direktori, mengurangi beberapa overhead kemudian dari perjalanan pulang pergi. (Tentu saja, Anda perlu menggunakan batas waktu besar seperti yang saya berikan sebelumnya, atau data cache ini akan dihapus sebelum aplikasi Anda mengaksesnya.)

Tapi itu findakan memakan waktu lama. Seperti aplikasi lain, ia menunggu hasil dari satu folder sebelum meminta yang berikutnya.

Dimungkinkan untuk mengurangi waktu keseluruhan dengan meminta beberapa proses pencarian untuk melihat ke folder yang berbeda. Saya belum diuji untuk melihat apakah ini benar-benar lebih efisien. Itu tergantung apakah sshf memungkinkan permintaan secara paralel. (Saya pikir begitu.)

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 &

Jika Anda juga ingin melakukan pra-cache konten file, Anda dapat mencoba ini:

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

Tentunya ini akan memakan waktu lebih lama, akan mentransfer banyak data, dan mengharuskan Anda untuk memiliki ukuran cache yang besar. Tetapi ketika sudah selesai, mengakses file harus terasa enak dan cepat.

joeytwiddle
sumber
4

SSHFS benar-benar lambat karena mentransfer konten file walaupun tidak harus (saat melakukan cp). Saya melaporkan ini ke hulu dan ke Debian, tetapi tidak ada respons: /

Daniel Milde
sumber
2
Ini efisien dengan mv. Sayangnya ketika Anda menjalankan cpsecara lokal, FUSE hanya melihat permintaan untuk membuka file untuk membaca dan menulis. Tidak tahu bahwa Anda sedang membuat salinan file. Untuk FUSE, tampilannya tidak berbeda dengan penulisan file umum. Jadi saya khawatir ini tidak dapat diperbaiki kecuali lokal cpdibuat lebih FUSE-aware / FUSE-friendly. (Atau FUSE mungkin dapat mengirim hash blok alih-alih seluruh blok ketika mencurigai cp, seperti rsync, tetapi itu akan rumit dan mungkin memperlambat operasi lainnya.)
joeytwiddle
3

Setelah mencari dan mencoba. Saya baru saja menemukan menambah -o Compression=nokecepatan itu banyak. Penundaan mungkin disebabkan oleh proses kompresi dan tidak terkompresi. Selain itu, menggunakan 'Ciphers = aes128-ctr' tampaknya lebih cepat daripada yang lain sementara beberapa posting telah melakukan beberapa percobaan tentang ini. Lalu, perintah saya entah bagaimana seperti ini:

sshfs -o allow_other, transform_symlinks, follow_symlinks, IdentityFile = / Pengguna / maple / .ssh / id_rsa -o auto_cache, hubungkan kembali, defer_permissions -o Ciphers = aes128-ctr -o Compression = no [email protected]: / mntpoint

maple
sumber
2

NFS harus lebih cepat. Seberapa jauh sistem file? Jika lebih dari WAN, Anda mungkin lebih baik menyinkronkan file bolak-balik, sebagai lawan akses remote langsung.

Adam Wagner
sumber
1

Baik NFS atau Samba jika Anda memiliki file besar. Menggunakan NFS dengan sesuatu seperti Film 720p dan omong kosong benar-benar PITA. Samba akan melakukan pekerjaan yang lebih baik, saya tidak suka Samba karena beberapa alasan lain dan saya biasanya tidak merekomendasikannya.

Untuk file kecil, NFS harus baik-baik saja.

Franz Bettag
sumber
1

Saya menemukan mematikan tema zsh saya yang memeriksa status file git sangat membantu - hanya memasuki direktori butuh waktu 10 menit. Demikian juga mematikan checker status git di Vim.

bloke_zero
sumber
Wow, ini tip yang sangat bagus!
Dmitri
-2

Login sebagai root.

Akses direktori tingkat atas Anda, dengan menggunakan "cd /".

Kemudian pastikan bahwa Anda memiliki folder mount yang dibuat atau dibuat menggunakan "mkdir folder_name".

Setelah itu, cukup gunakan "mount xxxx: / remote_mount_directory / local_mount_directory.

jika semuanya berjalan sesuai keinginan Anda, sebelum ini, Anda harus memiliki mount yang sukses. Anda mungkin ingin memeriksa dan memastikan direktori tujuan dibagikan dengan menggunakan perintah "exportfs" untuk menjamin mereka dapat ditemukan.

Semoga ini membantu. Ini bukan dari lingkungan lvie, ini telah diuji pada LAN menggunakan VMware dan Fedora 16.

JasonN
sumber
5
Ini tidak menjawab pertanyaan ...
Léo Lam