cách nhanh hơn để gắn kết một hệ thống tập tin từ xa hơn sshfs?


72

Tôi đã sử dụng sshfs để làm việc từ xa, nhưng nó thực sự chậm và khó chịu, đặc biệt khi tôi sử dụng nhật thực trên đó.

Có cách nào nhanh hơn để gắn hệ thống tập tin từ xa cục bộ không? Ưu tiên số 1 của tôi là tốc độ.

Máy từ xa là Fedora 15, máy cục bộ là Ubuntu 10.10. Tôi cũng có thể sử dụng Windows XP cục bộ nếu cần thiết.

Câu trả lời:


14

sshfs đang sử dụng giao thức truyền tệp SSH, có nghĩa là mã hóa.

Nếu bạn chỉ gắn kết qua NFS, tất nhiên là nhanh hơn, vì không được mã hóa.

bạn đang cố gắng gắn kết khối lượng trên cùng một mạng? sau đó sử dụng NFS .


35
Nó không chậm vì mã hóa, nó chậm vì nó là FUSE và nó tiếp tục kiểm tra trạng thái hệ thống tập tin.
w00t

3
@ w00t Tôi không nghĩ rằng đó là FUSE làm chậm nó chứ không phải mã hóa. Việc thay đổi mã hóa thành arcfour đã tăng tốc cho tôi, trong khi việc sử dụng scpcũng chậm như vậy sshfs.
Sparhawk

21
@Sparhawk có sự khác biệt giữa thông lượng và độ trễ. FUSE cung cấp cho bạn độ trễ khá cao vì nó phải kiểm tra trạng thái hệ thống tập tin rất nhiều bằng cách sử dụng một số phương tiện khá kém hiệu quả. arcfour cung cấp cho bạn thông lượng tốt vì mã hóa đơn giản hơn. Trong trường hợp này độ trễ là quan trọng nhất vì đó là nguyên nhân khiến trình soạn thảo bị chậm trong việc liệt kê và tải tệp.
w00t

3
@ w00t. À được rồi. Điểm tốt.
Sparhawk

41

Nếu bạn cần cải thiện tốc độ cho các kết nối sshfs, hãy thử các tùy chọn sau:

oauto_cache,reconnect,defer_permissions,noappledouble,nolocalcaches,no_readahead

lệnh sẽ là:

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

1
Cảm ơn, đã làm việc cho tôi! Phải loại bỏ defer_permissionsmặc dù (tùy chọn không xác định).
Mathieu Rodic 10/03/2015

4
Sẽ không nolocalcaches giảm hiệu suất bằng cách buộc tra cứu mọi hoạt động? Điều này có mâu thuẫn auto_cachekhông?
earthmeLon

2
nolocalcaches và defer_permissions dường như không hợp lệ (nữa?) trên Debian Jessie.
Ai đó

4
Tại sao no_readahead?
studgeek

1
Bạn có ý nghĩa gì bởi "oauto_cache"?
ManuelSchneid3r

18

Bên cạnh các giải pháp đã được đề xuất sử dụng Samba / NFS, hoàn toàn hợp lệ, bạn cũng có thể đạt được một số tăng tốc độ gắn bó sshfsbằng cách sử dụng mã hóa nhanh hơn (xác thực sẽ an toàn như bình thường, nhưng việc truyền dữ liệu sẽ dễ dàng giải mã hơn) bằng cách cung cấp -o Ciphers=arcfourtùy chọn để sshfs. Nó đặc biệt hữu ích nếu máy của bạn có CPU yếu.


-oCipher=arcfourkhông có sự khác biệt trong các thử nghiệm của tôi với tệp 141 MB được tạo từ dữ liệu ngẫu nhiên.
Sparhawk

6
Đó là bởi vì có nhiều lỗi chính tả trong lệnh. Tôi đã chỉnh sửa nó. Tôi nhận thấy 15% tăng tốc từ máy chủ raspberry pi của tôi. (+1)
Sparhawk

4
Mật mã chacha20-poly1305@openssh.com cũng là một lựa chọn đáng để xem xét bây giờ arcfour đã lỗi thời. Chacha20 nhanh hơn trên bộ xử lý ARM so với AES nhưng kém hơn nhiều so với bộ xử lý x86 với hướng dẫn AES (mà tất cả các CPU máy tính để bàn hiện đại đều có tiêu chuẩn hiện nay). klingt.net/blog/ssh-codes-performance-comparision Bạn có thể liệt kê các mật mã được hỗ trợ với "mật mã ssh -Q"
TimSC

11

Tôi không có bất kỳ lựa chọn thay thế nào để giới thiệu, nhưng tôi có thể cung cấp các đề xuất về cách tăng tốc độ sshfs:

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

Điều này sẽ tránh một số yêu cầu chuyến đi khứ hồi khi bạn đang cố đọc nội dung hoặc quyền cho các tệp mà bạn đã truy xuất trước đó trong phiên.

sshfs mô phỏng xóa và thay đổi cục bộ, vì vậy những thay đổi mới được thực hiện trên máy cục bộ sẽ xuất hiện ngay lập tức, mặc dù thời gian chờ lớn, vì dữ liệu được lưu trong bộ nhớ cache sẽ tự động bị hủy.

Nhưng các tùy chọn này không được khuyến nghị nếu các tệp từ xa có thể được cập nhật mà máy cục bộ không biết, ví dụ: bởi một người dùng khác hoặc vỏ ssh từ xa. Trong trường hợp đó, thời gian chờ thấp hơn sẽ được ưu tiên.

Dưới đây là một số tùy chọn khác mà tôi đã thử nghiệm, mặc dù tôi không chắc liệu có bất kỳ tùy chọn nào trong số chúng tạo ra sự khác biệt không:

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"

Bạn cũng nên kiểm tra các tùy chọn được đề xuất bởi Meetai trong câu trả lời của anh ấy.

Đệ quy

Vấn đề lớn nhất trong quy trình làm việc của tôi là khi tôi cố gắng đọc nhiều thư mục, ví dụ như trong một cây sâu, bởi vì sshfs thực hiện một yêu cầu chuyến đi khứ hồi cho từng thư mục riêng biệt. Đây cũng có thể là nút cổ chai mà bạn gặp phải với Eclipse.

Việc yêu cầu song song nhiều thư mục có thể giúp ích cho việc này, nhưng hầu hết các ứng dụng không làm được điều đó: chúng được thiết kế cho các hệ thống tệp có độ trễ thấp với bộ nhớ đệm đọc trước, vì vậy chúng chờ một stat tệp hoàn thành trước khi chuyển sang tiếp theo .

Chuẩn bị

Nhưng một cái gì đó sshfs có thể làm là nhìn về phía trước hệ thống tệp từ xa, thu thập số liệu thống kê thư mục trước khi tôi yêu cầu và gửi chúng cho tôi khi kết nối không bị chiếm đóng ngay lập tức. Điều này sẽ sử dụng nhiều băng thông hơn (từ dữ liệu lookahead không bao giờ được sử dụng) nhưng có thể cải thiện tốc độ.

Chúng tôi có thể buộc sshfs thực hiện một số bộ nhớ đệm đọc trước, bằng cách chạy này trước khi bạn bắt đầu nhiệm vụ hoặc thậm chí ở chế độ nền khi nhiệm vụ của bạn đang được tiến hành:

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

Điều đó sẽ lưu trước bộ đệm tất cả các mục trong thư mục, giảm một số chi phí sau này từ các chuyến đi khứ hồi. (Tất nhiên, bạn cần sử dụng thời gian chờ lớn như những gì tôi đã cung cấp trước đó hoặc dữ liệu được lưu trong bộ nhớ cache này sẽ bị xóa trước khi ứng dụng của bạn truy cập vào nó.)

Nhưng điều đó findsẽ mất một thời gian dài. Giống như các ứng dụng khác, nó chờ kết quả từ một thư mục trước khi yêu cầu thư mục tiếp theo.

Có thể giảm thời gian tổng thể bằng cách yêu cầu nhiều quá trình tìm kiếm xem xét các thư mục khác nhau. Tôi đã không thử nghiệm để xem điều này thực sự hiệu quả hơn. Nó phụ thuộc vào việc sshfs cho phép các yêu cầu song song. (Tôi nghĩ rằng nó làm.)

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 &

Nếu bạn cũng muốn lưu trước nội dung tệp, bạn có thể thử điều này:

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

Rõ ràng việc này sẽ mất nhiều thời gian hơn, sẽ truyền rất nhiều dữ liệu và đòi hỏi bạn phải có kích thước bộ đệm rất lớn. Nhưng khi hoàn thành, việc truy cập các tệp sẽ cảm thấy tốt và nhanh chóng.


4

SSHFS thực sự chậm vì nó chuyển nội dung tệp ngay cả khi không phải (khi thực hiện cp). Tôi đã báo cáo điều này ngược dòng và tới Debian, nhưng không có phản hồi: /


2
Đó là hiệu quả với mv. Thật không may khi bạn chạy cpcục bộ, FUSE chỉ thấy các yêu cầu mở tệp để đọc và viết. Nó không biết rằng bạn đang tạo một bản sao của một tập tin. Để FUSE, nó trông không khác gì một tập tin chung. Vì vậy, tôi sợ điều này không thể sửa được trừ khi địa phương cpđược tạo ra nhiều FUSE / thân thiện với FUSE hơn. (Hoặc FUSE có thể có thể gửi băm khối thay vì toàn bộ khối khi nó nghi ngờ một cp, như rsync không, nhưng đó sẽ là phức tạp và có thể làm chậm các hoạt động khác xuống.)
joeytwiddle

3

Sau khi tìm kiếm và dùng thử. Tôi chỉ tìm thấy thêm -o Compression=notốc độ nó rất nhiều. Sự chậm trễ có thể được gây ra bởi quá trình nén và giải nén. Ngoài ra, sử dụng 'Ciphers = aes128-ctr' có vẻ nhanh hơn những cái khác trong khi một số bài đăng đã thực hiện một số thử nghiệm về điều này. Sau đó, lệnh của tôi bằng cách nào đó như thế này:

sshfs -o allow_other, Transform_symlinks, follow_symlinks, IdentityFile = / Users / maple / .ssh / id_rsa -o auto_cache, kết nối lại, defer_permissions -o Ciphers = aes128-ctr -o Nén = no maple / mntpoint


2

NFS nên nhanh hơn. Làm thế nào từ xa là hệ thống tập tin? Nếu nó qua mạng WAN, bạn có thể tốt hơn là chỉ đồng bộ hóa các tệp qua lại, trái ngược với truy cập từ xa trực tiếp.


1

NFS hoặc Samba nếu bạn có tệp lớn. Sử dụng NFS với một cái gì đó như Phim 720p và tào lao thực sự là một PITA. Samba sẽ làm việc tốt hơn, tôi không thích Samba vì một số lý do khác và tôi thường không khuyên bạn nên làm điều đó.

Đối với các tệp nhỏ, NFS sẽ ổn.


1

Tôi thấy việc tắt chủ đề zsh của mình đang kiểm tra trạng thái tệp git đã giúp ích rất nhiều - chỉ cần vào thư mục là mất hơn 10 phút. Tương tự như vậy, tắt trình kiểm tra trạng thái git trong Vim.


Wow, đây là một mẹo thực sự tốt!
Dmitri

-2

Đăng nhập bằng root.

Truy cập thư mục cấp cao nhất của bạn, bằng cách sử dụng "cd /".

Sau đó, đảm bảo rằng bạn có một thư mục gắn kết được tạo hoặc tạo một thư mục bằng cách sử dụng "mkdir folder_name".

Sau đó, chỉ cần sử dụng "mount xxxx: / remote_mount_directory / local_mount_directory.

nếu mọi thứ đều hoạt động tốt, trước đó bạn nên có một thú cưỡi thành công. Bạn có thể muốn kiểm tra và đảm bảo thư mục đích được chia sẻ bằng cách sử dụng lệnh "exportfs" để bảo đảm chúng có thể được tìm thấy.

Hi vọng điêu nay co ich. Đây không phải là từ môi trường lvie, nó đã được thử nghiệm trên mạng LAN bằng cách sử dụng VMware và Fedora 16.


5
Điều này không trả lời được câu hỏi
Léo Lam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.