วิธีที่เร็วกว่าการติดตั้งระบบไฟล์ระยะไกลกว่า sshfs?


72

ฉันใช้ sshfs เพื่อทำงานจากระยะไกล แต่มันช้าและน่ารำคาญมากโดยเฉพาะเมื่อฉันใช้ eclipse

มีวิธีใดที่เร็วกว่าในการเมาท์ระบบไฟล์รีโมตแบบโลคัลหรือไม่? ความสำคัญอันดับ 1 ของฉันคือความเร็ว

เครื่องระยะไกลคือ Fedora 15 เครื่องท้องถิ่นคือ Ubuntu 10.10 ฉันยังสามารถใช้ Windows XP ในเครื่องหากจำเป็น

คำตอบ:


14

sshfs กำลังใช้โปรโตคอลการถ่ายโอนไฟล์ SSH ซึ่งหมายถึงการเข้ารหัส

หากคุณเพิ่งเมานต์ผ่าน NFS แน่นอนว่าเร็วกว่าเพราะไม่มีการเข้ารหัส

คุณพยายามเมานต์โวลุ่มในเครือข่ายเดียวกันหรือไม่ แล้วใช้ NFS


35
มันไม่ได้ช้าเพราะการเข้ารหัสมันช้าเพราะมันเป็น FUSE และคอยตรวจสอบสถานะระบบไฟล์
w00t

3
@ w00t ฉันไม่คิดว่ามันเป็น FUSE ทำให้ช้าลงไม่ใช่การเข้ารหัส การเปลี่ยนการเข้ารหัสเพื่อ arcfour เร่งขึ้นสำหรับฉันในขณะที่ใช้เป็นเพียงเป็นช้าเป็นscp sshfs
Sparhawk

21
@Sparhawk มีความแตกต่างระหว่างปริมาณงานและความล่าช้า FUSE ให้เวลาในการตอบสนองที่ค่อนข้างสูงเนื่องจากต้องตรวจสอบสถานะของระบบไฟล์เป็นจำนวนมากโดยใช้วิธีการที่ไม่มีประสิทธิภาพ arcfour ให้ปริมาณงานที่ดีเนื่องจากการเข้ารหัสนั้นง่ายกว่า ในกรณีนี้เวลาแฝงมีความสำคัญที่สุดเพราะนั่นคือสิ่งที่ทำให้ตัวแก้ไขช้าลงในรายชื่อและโหลดไฟล์
w00t

3
@ w00t อ่าโอเค. จุดที่ดี
Sparhawk

41

หากคุณต้องการปรับปรุงความเร็วสำหรับการเชื่อมต่อ sshfs ลองใช้ตัวเลือกเหล่านี้:

oauto_cache,reconnect,defer_permissions,noappledouble,nolocalcaches,no_readahead

คำสั่งจะเป็น:

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

1
ขอบคุณทำงานให้ฉัน! ต้องลบdefer_permissionsแม้ว่า (ตัวเลือกที่ไม่รู้จัก)
Mathieu Rodic

4
จะไม่nolocalcaches ลดประสิทธิภาพโดยบังคับให้ค้นหาทุกการทำงานหรือไม่ สิ่งนี้ขัดแย้งauto_cacheหรือไม่?
earthmeLon

2
nolocalcaches และ defer_permissions ดูเหมือนจะไม่ถูกต้อง (อีกต่อไป?) ใน Debian Jessie
ใครบางคน

4
ทำไมno_readahead?
studgeek

1
คุณหมายถึงอะไรโดย "oauto_cache"
ManuelSchneid3r

18

นอกจากโซลูชันที่เสนอแล้วในการใช้ Samba / NFS ซึ่งใช้ได้อย่างสมบูรณ์แล้วคุณยังสามารถเพิ่มความเร็วด้วยsshfsการเข้ารหัสที่รวดเร็วกว่า (การรับรองความถูกต้องจะปลอดภัยเหมือนปกติ แต่การถ่ายโอนข้อมูลจะง่ายกว่าการถอดรหัส) โดยการจัดหา-o Ciphers=arcfourตัวเลือก sshfsไปยัง มันมีประโยชน์อย่างยิ่งหากเครื่องของคุณมี CPU อ่อน


-oCipher=arcfourไม่มีความแตกต่างในการทดสอบของฉันด้วยไฟล์ 141 MB ที่สร้างจากข้อมูลแบบสุ่ม
Sparhawk

6
นั่นเป็นเพราะมีคำพิมพ์หลายคำในคำสั่ง ฉันแก้ไขมันแล้ว ฉันสังเกตเห็นการเร่งความเร็ว 15% จากเซิร์ฟเวอร์ raspberry pi ของฉัน (+1)
Sparhawk

4
chacha20-poly1305@openssh.com cipher ยังเป็นตัวเลือกที่คุ้มค่าในการพิจารณาในขณะนี้ arcfour ล้าสมัยแล้ว Chacha20 เร็วกว่าสำหรับโปรเซสเซอร์ ARM กว่า AES แต่แย่กว่ามากในโปรเซสเซอร์ x86 ที่มีคำแนะนำ AES (ซึ่งซีพียูเดสก์ท็อปสมัยใหม่ทุกรุ่นมีมาตรฐานในวันนี้) klingt.net/blog/ssh-cipher-performance-comparision คุณสามารถแสดงรายการ ciphers ที่รองรับด้วย "ssh -Q cipher"
TimSC

11

ฉันไม่มีทางเลือกอื่นที่จะแนะนำ แต่ฉันสามารถให้คำแนะนำสำหรับวิธีเพิ่มความเร็ว sshfs:

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

สิ่งนี้ควรหลีกเลี่ยงการร้องขอไปกลับบางอย่างเมื่อคุณพยายามอ่านเนื้อหาหรือการอนุญาตสำหรับไฟล์ที่คุณเรียกคืนมาก่อนหน้านี้ในเซสชันของคุณ

sshfs จำลองการลบและการเปลี่ยนแปลงแบบโลคัลดังนั้นการเปลี่ยนแปลงใหม่ที่เกิดขึ้นบนเครื่องโลคัลควรปรากฏขึ้นทันทีแม้จะมีการหมดเวลาจำนวนมากเนื่องจากข้อมูลแคชถูกทิ้งโดยอัตโนมัติ

แต่ไม่แนะนำให้ใช้ตัวเลือกเหล่านี้หากไฟล์ระยะไกลอาจได้รับการปรับปรุงโดยที่เครื่องไม่ทราบเช่นจากผู้ใช้รายอื่นหรือเชลล์ ssh ระยะไกล ในกรณีนั้นการหมดเวลาที่ต่ำกว่าจะดีกว่า

ต่อไปนี้เป็นตัวเลือกเพิ่มเติมที่ฉันทดลองแม้ว่าฉันจะไม่แน่ใจว่ามีตัวเลือกใดบ้างที่สร้างความแตกต่าง:

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ในคำตอบของเขา

recursion

ปัญหาที่ใหญ่ที่สุดในเวิร์กโฟลว์ของฉันคือเมื่อฉันพยายามอ่านหลาย ๆ โฟลเดอร์เช่นในต้นไม้ลึกเพราะ sshfs ทำการร้องขอไปกลับสำหรับแต่ละโฟลเดอร์แยกกัน นี่อาจเป็นคอขวดที่คุณประสบกับ Eclipse

การร้องขอหลายโฟลเดอร์พร้อมกันสามารถช่วยได้ แต่แอพส่วนใหญ่ไม่ได้ทำเช่นนั้นพวกมันถูกออกแบบมาสำหรับระบบไฟล์ที่มีความหน่วงแฝงต่ำและมีการแคชอ่านล่วงหน้าดังนั้นพวกเขาจึงรอให้สถิติไฟล์หนึ่งไฟล์เสร็จสมบูรณ์ก่อนที่จะดำเนินการต่อ .

Precaching

แต่สิ่งที่ sshfs สามารถทำได้คือการมองไปที่ระบบไฟล์ระยะไกลรวบรวมสถิติโฟลเดอร์ก่อนที่ฉันจะขอพวกเขาและส่งมาให้ฉันเมื่อการเชื่อมต่อไม่ได้ถูกครอบครองทันที สิ่งนี้จะใช้แบนด์วิดท์เพิ่มเติม (จากข้อมูล lookahead ที่ไม่เคยใช้) แต่สามารถปรับปรุงความเร็วได้

เราสามารถบังคับให้ sshfs ทำการแคชแบบอ่านล่วงหน้าโดยเรียกใช้สิ่งนี้ก่อนที่คุณจะเริ่มงานของคุณหรือแม้กระทั่งในพื้นหลังเมื่องานของคุณกำลังดำเนินการอยู่:

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

ที่ควรแคชรายการไดเรกทอรีทั้งหมดล่วงหน้าลดค่าใช้จ่ายบางส่วนในภายหลังจากการไปกลับ (แน่นอนคุณต้องใช้การหมดเวลาขนาดใหญ่เช่นที่ฉันให้ไว้ก่อนหน้านี้มิฉะนั้นข้อมูลแคชนี้จะถูกล้างก่อนที่แอปของคุณจะเข้าถึงได้)

แต่นั่นfindจะใช้เวลานาน เช่นเดียวกับแอปอื่น ๆ มันจะรอผลจากโฟลเดอร์หนึ่งก่อนที่จะขอแอปถัดไป

อาจเป็นไปได้ที่จะลดเวลาโดยรวมโดยขอให้กระบวนการค้นหาหลายรายการดูในโฟลเดอร์ต่างๆ ฉันไม่ได้ทดสอบเพื่อดูว่าสิ่งนี้มีประสิทธิภาพมากกว่าจริงหรือไม่ มันขึ้นอยู่กับว่า sshfs อนุญาตการร้องขอแบบขนานหรือไม่ (ฉันคิดว่ามันทำ)

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 &

หากคุณต้องการแคชเนื้อหาไฟล์ล่วงหน้าคุณสามารถลองทำสิ่งนี้:

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

เห็นได้ชัดว่าการดำเนินการนี้ใช้เวลานานกว่าจะถ่ายโอนข้อมูลจำนวนมากและต้องการให้คุณมีขนาดแคชที่ใหญ่ แต่เมื่อเสร็จแล้วการเข้าถึงไฟล์ควรรู้สึกดีและรวดเร็ว


4

SSHFS ช้ามากเพราะมันจะถ่ายโอนเนื้อหาไฟล์แม้ว่ามันจะไม่จำเป็นต้อง (เมื่อทำ cp) ฉันรายงานอัปสตรีมและเดเบียน แต่ไม่มีการตอบกลับ: /


2
mvมันเป็นที่มีประสิทธิภาพด้วย น่าเสียดายเมื่อคุณเรียกใช้cpในเครื่อง FUSE จะเห็นเฉพาะคำขอเปิดไฟล์สำหรับการอ่านและการเขียน ไม่ทราบว่าคุณกำลังทำสำเนาของไฟล์ ในการ FUSE ดูเหมือนว่าจะไม่แตกต่างจากการเขียนไฟล์ทั่วไป ดังนั้นฉันจึงกลัวว่าสิ่งนี้จะไม่สามารถแก้ไขได้หากไม่มีการcpสร้างความตระหนักในเรื่อง FUSE / FUSE (หรือ FUSE อาจสามารถส่งแฮชของบล็อกแทนบล็อกทั้งหมดเมื่อสงสัยว่า a cpเช่น rsync แต่มันจะซับซ้อนและอาจทำให้การดำเนินการอื่น ๆ ช้าลง)
joeytwiddle

3

หลังจากค้นหาและทดลองใช้ ฉันเพิ่งพบว่าเพิ่ม-o Compression=noความเร็วได้มาก ความล่าช้าอาจเกิดจากการบีบอัดและกระบวนการไม่บีบอัดข้อมูล นอกจากนี้การใช้ 'Ciphers = aes128-ctr' ดูเหมือนจะเร็วกว่าตัวอื่นในขณะที่บางโพสต์ทำการทดลองบางอย่างกับเรื่องนี้ จากนั้นคำสั่งของฉันก็เป็นอย่างนี้:

sshfs -o allow_other, transform_symlinks, follow_symlinks, IdentityFile = / ผู้ใช้ / maple / .ssh / id_rsa -o auto_cache, เชื่อมต่อ, defer_permissions -o Ciphers = aes128-ctr -o การบีบอัด = ไม่มี maple@123.123.123.123: ที่บ้าน / mntpoint


2

NFS ควรเร็วขึ้น ระยะไกลเป็นระบบไฟล์ได้อย่างไร หากผ่าน WAN คุณอาจจะดีกว่าเพียงแค่ซิงค์ไฟล์กลับไปกลับมาซึ่งต่างกับการเข้าถึงระยะไกลโดยตรง


1

เป็น NFS หรือ Samba ถ้าคุณมีไฟล์ขนาดใหญ่ การใช้ NFS กับภาพยนตร์ 720p และอึเป็น PITA แซมบ้าจะทำงานได้ดีขึ้นฉันไม่ชอบแซมบ้าด้วยเหตุผลอื่นอีกหลายประการและฉันมักจะไม่แนะนำ

สำหรับไฟล์ขนาดเล็ก NFS ควรใช้ได้


1

ฉันพบว่าการปิดชุดรูปแบบ zsh ของฉันที่ตรวจสอบสถานะไฟล์ git ช่วยให้ enourmously - เพียงเข้าสู่ไดเรกทอรีใช้เวลา 10 นาที ในทำนองเดียวกันการปิดตัวตรวจสอบสถานะ Git ใน Vim


ว้าวนี่เป็นเคล็ดลับที่ดีจริงๆ!
Dmitri

-2

เข้าสู่ระบบในฐานะ root

เข้าถึงไดเรกทอรีระดับบนสุดของคุณโดยใช้ "cd /"

จากนั้นตรวจสอบให้แน่ใจว่าคุณได้สร้างโฟลเดอร์เมานต์หรือสร้างขึ้นโดยใช้ "mkdir folder_name"

หลังจากนั้นเพียงใช้ "mount xxxx: / remote_mount_directory / local_mount_directory

หากทุกอย่างทำงานได้ในตอนท้ายของคุณก่อนหน้านี้คุณควรจะมีภูเขาที่ประสบความสำเร็จ คุณอาจต้องการตรวจสอบและตรวจสอบให้แน่ใจว่ามีการแชร์ไดเรกทอรีปลายทางโดยใช้คำสั่ง "exportfs" เพื่อรับประกันว่าจะสามารถพบได้

หวังว่านี่จะช่วยได้ นี่ไม่ใช่จากสภาพแวดล้อมแบบ lvie แต่ถูกทดสอบบน LAN โดยใช้ VMware และ Fedora 16


5
นี่ไม่ได้ตอบคำถาม…
Léo Lam
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.