Uzak bir dosya sistemini monte etmenin sshfs'den daha hızlı bir yolu var mı?


72

Uzaktan çalışmak için sshfs kullanıyorum, ancak özellikle de güneş tutulması kullandığımda, gerçekten yavaş ve can sıkıcı bir durum.

Uzak dosya sistemini yerel olarak monte etmenin daha hızlı bir yolu var mı? Benim 1 numaralı önceliğim hız.

Uzak makine Fedora 15, yerel makine Ubuntu 10.10. Gerekirse yerel olarak Windows XP'yi de kullanabilirim.

Yanıtlar:


14

sshfs, şifreleme anlamına gelen SSH dosya aktarma protokolünü kullanıyor.

NFS ile bağlarsanız, daha hızlı, çünkü şifreli değil.

birimleri aynı ağa bağlamaya mı çalışıyorsunuz ? daha sonra NFS kullanın .


35
Şifreleme nedeniyle yavaş değil, FUSE nedeniyle yavaş ve dosya sistemi durumunu kontrol ediyor.
w00t

3
@ w00t Şifrelemenin değil, SİGORTA'nın yavaşladığını sanmıyorum. Şifrelemeyi arcfour olarak değiştirmek benim için hızlandırdı, oysa kullanmak scpaynı derecede yavaştı sshfs.
Sparhawk 28:13

21
@ Sparhawk, verim ve gecikme arasında bir fark var. SİGORTA size oldukça yüksek gecikme süresi sağlar, çünkü dosya sistemi durumunu oldukça verimsiz yollarla kontrol etmek zorundadır. şifreleme daha basit olduğundan, arcfour size iyi bir işlem sağlar. Bu durumda gecikme en önemlisidir, çünkü editörün dosyaları listeleme ve yükleme konusunda yavaş olmasına neden olur.
w00t

3
@ W00t. Ah tamam. Güzel nokta.
Sparhawk

41

Sshfs bağlantılarının hızını arttırmanız gerekirse, aşağıdaki seçenekleri deneyin:

oauto_cache,reconnect,defer_permissions,noappledouble,nolocalcaches,no_readahead

komut olacaktır:

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

1
Teşekkürler, benim için çalıştı! defer_permissionsYine de kaldırmak zorunda kaldı (bilinmeyen seçenek).
Mathieu Rodic

4
Olmaz nolocalcaches azaltmak aramalarını zorlayarak performansı her operasyon? Bu çelişiyor auto_cachemu?
earthmeLon

2
nolocalcaches ve defer_permissions Debian Jessie'de geçerli değil (artık?).
Biri

4
Neden no_readahead?
studgeek

1
"Oauto_cache" ile ne demek istiyorsun?
ManuelSchneid3r

18

Mükemmel olarak geçerli olan Samba / NFS kullanımı ile ilgili önerilen çözümlerin yanı sıra, sshfsdaha hızlı şifreleme kullanarak yapışmayı hızlandırabilir (kimlik doğrulaması her zamanki kadar güvenli olur, ancak aktarılan verilerin şifresini çözmek daha kolay olur) -o Ciphers=arcfourseçeneği sunarak için sshfs. Makinenizde zayıf CPU varsa özellikle kullanışlıdır.


-oCipher=arcfourrastgele verilerden oluşturulan 141 MB dosya ile testlerimde hiçbir fark olmamıştır.
Sparhawk 28:13

6
Çünkü komutta birden fazla yazım hatası vardı. Düzenledim. Ahududu pi sunucumdan% 15'lik bir hızlanma fark ettim. (+1)
Sparhawk 28:13

4
Chacha20-poly1305@openssh.com şifresi aynı zamanda artık eski olduğu düşünülmeye değer bir seçenek. Chacha20, ARM işlemcilerinde AES'ten daha hızlıdır, ancak AES komutları olan x86 işlemcilerde (bugünlerde tüm modern masaüstü işlemcilerin standart olarak sahip olduğu) çok daha kötüdür. klingt.net/blog/ssh-cipher-performance-comparision Desteklenen şifreleri "ssh -Q şifresi" ile
listeleyebilirsiniz

11

Tavsiye edecek başka seçeneğim yok, ancak sshfs’i nasıl hızlandıracağınıza dair önerilerde bulunabilirim:

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

Bu, oturumunuzda daha önce almış olduğunuz dosyaların içeriğini veya izinlerini okumaya çalışırken bazı gidiş dönüş isteklerinden kaçınmalıdır.

sshfs yerel olarak silmeleri ve değişiklikleri simüle eder; bu nedenle, önbellekteki veriler otomatik olarak düştüğünden, büyük zaman aşımına rağmen yerel makinede yapılan yeni değişiklikler hemen görünmelidir.

Ancak , uzak dosyalar yerel makine bilmeden, örneğin farklı bir kullanıcı veya bir uzak ssh kabuğu tarafından güncellenmeden güncellenebilirse, bu seçenekler önerilmez . Bu durumda, daha düşük zaman aşımları tercih edilebilir.

Bunlardan herhangi birinin bir fark yaratıp yaratmadığından emin olmasam da, denediğim birkaç seçenek daha var:

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'nin cevabında önerdiği seçenekleri de kontrol etmelisiniz .

özyineleme

İş akışımdaki en büyük sorun, örneğin derin bir ağaçtaki birçok klasörü okumaya çalıştığım zamandır, çünkü sshfs her klasör için ayrı bir gidiş dönüş isteği gerçekleştirir. Bu, Eclipse ile yaşadığınız darboğaz da olabilir.

Paralel olarak birden fazla klasör için istekte bulunmak bu konuda yardımcı olabilir, ancak çoğu uygulama bunu yapmaz: okumaya devam etmeyi önbelleğe alma özelliğine sahip düşük gecikmeli dosya sistemleri için tasarlanmıştır, bu nedenle bir dosya statünün diğerine geçmeden önce tamamlanmasını beklerler .

precaching

Ancak, sshfs'in yapabileceği bir şey uzak dosya sisteminde ileriye bakmak , istediğimden önce klasör istatistiklerini toplamak ve bağlantı hemen meşgul olmadığında bana göndermektir. Bu daha fazla bant genişliği kullanır (hiç kullanılmamış göze çarpan verilerden) ancak hızı artırabilir.

Görevinize başlamadan önce veya göreviniz devam ederken bile arka planda çalışarak, sshfs'leri bir miktar önbellekleme yapmaya zorlayabiliriz:

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

Bu, tüm dizin girişlerini önbelleğe almalı ve daha sonra genel giderlerin bir kısmını gidiş gelişlerden azaltmalıdır. (Tabii ki, daha önce verdiğim gibi büyük zaman aşımlarını kullanmanız gerekir, aksi takdirde uygulamanız erişmeden önce bu önbelleğe alınmış veriler silinir.)

Ama bu finduzun zaman alacak. Diğer uygulamalar gibi, bir sonrakini talep etmeden önce bir klasördeki sonuçları bekler.

Farklı klasörlere bakmak için çoklu bulma işlemlerini sorarak genel süreyi kısaltmak mümkün olabilir. Bunun gerçekten daha verimli olup olmadığını görmek için test etmedim. Sshfs'in paralel olarak isteklere izin verip vermediğine bağlıdır. (Bence öyle.)

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 &

Ayrıca, dosya içeriğini önbelleğe almak istiyorsanız, şunu deneyebilirsiniz:

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

Açıkçası, bu çok daha uzun sürecek, çok fazla veri aktaracak ve büyük bir önbellek boyutuna sahip olmanızı gerektirecek. Ancak bittiğinde, dosyalara erişmek kendilerini iyi ve hızlı hissetmelidir.


4

SSHFS gerçekten yavaştır, çünkü gerekmediği halde dosya içeriğini aktarır (cp yaparken). Bunu yukarı akış ve Debian'a bildirdim, ancak yanıt yok: /


2
İle verimlidir mv. Maalesef cpyerel olarak çalıştırdığınızda , FUSE yalnızca okuma ve yazma için dosyaları açma isteklerini görür. Bir dosyanın kopyasını yaptığınızı bilmiyor. SİGORTA için genel bir dosya yazma farklı görünüyor. Bu yüzden, yerel cpdaha SİGORTA / SİGORTA dostu olmadıkça, bunun düzeltilemeyeceğinden korkuyorum . (Bir şüphelenen Veya FUSE tüm blokların yerine blok karmaları göndermek mümkün olabilir cprsync yaptığı gibi, ama bu karmaşık olacağını ve aşağı diğer işlemleri yavaşlatabilir.)
joeytwiddle

3

Aradıktan ve denemeden sonra. Daha -o Compression=noçok hız eklediğimi gördüm . Gecikme, sıkıştırma ve sıkıştırma işleminden kaynaklanabilir. Ayrıca, bazı ederken 'Şifrelemeleri = AES128-ctr' diğerlerinden daha hızlı görünüyor kullanmak sonrası bu konuda bazı deneyler yapmıştır. O zaman emrim bir şekilde şöyle:

sshfs -o allow_other, transform_symlinks, follow_symlinks, IdentityFile = / Kullanıcılar / akçaağaç / .ssh / id_rsa -o otomatik_cache, yeniden bağla, defer_permissions -o Ciphers = aes128-ctr -o Sıkıştırma = akçaağaç / mntpoint


2

NFS daha hızlı olmalı. Dosya sistemi ne kadar uzak? WAN üzerindeyse, doğrudan uzaktan erişim yerine, dosyaları ileri geri senkronize etmeniz daha iyi olabilir.


1

Büyük dosyalarınız varsa NFS veya Samba. NFS'yi 720p Movies ve bok gibi bir şeyle kullanmak gerçekten bir PITA. Samba daha iyi bir iş yapacak, başka sebeplerden dolayı Samba'dan hoşlanmıyorum ve genelde tavsiye etmem.

Küçük dosyalar için, NFS iyi olmalı.


1

Git dosyasının durumunu kontrol eden zsh temamı kapatmam çok yardımcı oldu - sadece dizine girmek 10 dakika sürdü. Aynı şekilde Vim'deki git status checker'ı kapatmak.


Vay, bu gerçekten iyi bir ipucu!
Dmitri

-2

Root olarak giriş yapın.

"Cd /" kullanarak üst düzey dizininize erişin.

Ardından, oluşturduğunuz bir bağlama klasörünün olduğundan veya "mkdir folder_name" kullanarak bir tane oluşturduğunuzdan emin olun.

Ondan sonra "mount xxxx: / remote_mount_directory / local_mount_directory ifadesini kullanın.

Her şey senin tarafında olsaydı, bundan önce başarılı bir montaj olması gerekirdi. Bulunabileceklerini garantilemek için "exportfs" komutunu kullanarak hedef dizininin paylaşıldığından emin olmak isteyip istemediğinizi kontrol edebilirsiniz.

Bu yardımcı olur umarım. Bu bir lvie ortamından değildir, VMware ve Fedora 16 kullanılarak bir LAN üzerinde test edilmiştir.


5
Bu soruya cevap vermiyor…
Léo Lam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.