¿forma más rápida de montar un sistema de archivos remoto que sshfs?


72

He estado usando sshfs para trabajar de forma remota, pero es realmente lento y molesto, especialmente cuando uso eclipse en él.

¿Hay alguna forma más rápida de montar el sistema de archivos remoto localmente? Mi prioridad número 1 es la velocidad.

La máquina remota es Fedora 15, la máquina local es Ubuntu 10.10. También puedo usar Windows XP localmente si es necesario.

Respuestas:


14

sshfs está utilizando el protocolo de transferencia de archivos SSH, que significa cifrado.

Si solo monta a través de NFS, por supuesto es más rápido, porque no está encriptado.

¿Estás intentando montar volúmenes en la misma red? luego use NFS .


35
No es lento debido al cifrado, es lento porque es FUSE y sigue comprobando el estado del sistema de archivos.
w00t

3
@ w00t No creo que sea FUSE ralentizándolo, y no el cifrado. Cambiar el cifrado a arcfour me aceleró, mientras que usarlo scpfue tan lento como sshfs.
Sparhawk

21
@Sparhawk hay una diferencia entre el rendimiento y la latencia. FUSE le proporciona una latencia bastante alta porque tiene que verificar mucho el estado del sistema de archivos utilizando algunos medios bastante ineficientes. ArcFour le ofrece un buen rendimiento porque el cifrado es más simple. En este caso, la latencia es más importante porque eso es lo que hace que el editor sea lento al enumerar y cargar archivos.
w00t

3
@ w00t. Ah bien. Buenos puntos.
Sparhawk

41

Si necesita mejorar la velocidad de las conexiones sshfs, pruebe estas opciones:

oauto_cache,reconnect,defer_permissions,noappledouble,nolocalcaches,no_readahead

el comando sería:

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

1
Gracias, trabajó para mi! Sin defer_permissionsembargo, tuve que eliminar (opción desconocida).
Mathieu Rodic

44
¿No nolocalcaches disminuirá el rendimiento al forzar las búsquedas en cada operación? ¿Esto contradice auto_cache?
earthmeLon

2
nolocalcaches y defer_permissions ya no parecen válidos (¿ya?) en Debian Jessie.
Alguien

44
¿Por qué no_readahead?
studgeek

1
¿Qué quieres decir con "oauto_cache"?
ManuelSchneid3r

18

Además de las soluciones ya propuestas de usar Samba / NFS, que son perfectamente válidas, también podría lograr un aumento de la velocidad con sshfsun cifrado más rápido (la autenticación sería tan segura como de costumbre, pero los datos transferidos serían más fáciles de descifrar) al proporcionar la -o Ciphers=arcfouropción a sshfs. Es especialmente útil si su máquina tiene una CPU débil.


-oCipher=arcfourno hizo ninguna diferencia en mis pruebas con un archivo de 141 MB creado a partir de datos aleatorios.
Sparhawk

66
Eso es porque había múltiples errores tipográficos en el comando. Lo he editado Noté una aceleración del 15% en mi servidor raspberry pi. (+1)
Sparhawk

44
El cifrado chacha20-poly1305@openssh.com también es una opción que vale la pena considerar ahora que arcfour está obsoleto. Chacha20 es más rápido en procesadores ARM que AES pero mucho peor en procesadores x86 con instrucciones AES (que todas las CPU de escritorio modernas tienen como estándar en estos días). klingt.net/blog/ssh-cipher-performance-comparision Puede enumerar los cifrados compatibles con "ssh -Q cipher"
TimSC

11

No tengo ninguna alternativa para recomendar, pero puedo proporcionar sugerencias sobre cómo acelerar sshfs:

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

Esto debería evitar algunas de las solicitudes de ida y vuelta cuando intente leer contenido o permisos para archivos que ya recuperó anteriormente en su sesión.

sshfs simula eliminaciones y cambios localmente, por lo que los nuevos cambios realizados en la máquina local deberían aparecer inmediatamente, a pesar de los grandes tiempos de espera, ya que los datos en caché se eliminan automáticamente.

Pero estas opciones no se recomiendan si los archivos remotos pueden actualizarse sin que la máquina local lo sepa, por ejemplo, por un usuario diferente o un shell ssh remoto. En ese caso, serían preferibles tiempos de espera más bajos.

Aquí hay algunas opciones más con las que experimenté, aunque no estoy seguro de si alguna de ellas hizo alguna diferencia:

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"

También debe consultar las opciones recomendadas por Meetai en su respuesta.

Recursividad

El mayor problema en mi flujo de trabajo es cuando intento leer muchas carpetas, por ejemplo en un árbol profundo, porque sshfs realiza una solicitud de ida y vuelta para cada carpeta por separado. Este también puede ser el cuello de botella que experimente con Eclipse.

Hacer solicitudes para varias carpetas en paralelo podría ayudar con esto, pero la mayoría de las aplicaciones no lo hacen: fueron diseñadas para sistemas de archivos de baja latencia con almacenamiento en caché de lectura anticipada, por lo que esperan a que se complete una estadística de archivo antes de pasar a la siguiente .

Precaching

Pero algo que sshfs podría hacer sería mirar hacia el sistema de archivos remoto, recopilar estadísticas de carpetas antes de solicitarlas y enviármelas cuando la conexión no esté ocupada de inmediato. Esto usaría más ancho de banda (de datos anticipados que nunca se usan) pero podría mejorar la velocidad.

Podemos obligar a sshfs a hacer un almacenamiento en caché de lectura anticipada, ejecutando esto antes de comenzar su tarea, o incluso en segundo plano cuando su tarea ya está en marcha:

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

Eso debería almacenar previamente en caché todas las entradas del directorio, reduciendo parte de la sobrecarga posterior de los viajes de ida y vuelta. (Por supuesto, debe usar los tiempos de espera grandes como los que proporcioné anteriormente, o estos datos en caché se borrarán antes de que su aplicación acceda a ellos).

Pero eso findllevará mucho tiempo. Al igual que otras aplicaciones, espera los resultados de una carpeta antes de solicitar la siguiente.

Podría ser posible reducir el tiempo total al solicitar múltiples procesos de búsqueda para buscar en diferentes carpetas. No he probado para ver si esto realmente es más eficiente. Depende de si sshfs permite solicitudes en paralelo. (Creo que sí)

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 &

Si también desea almacenar previamente en caché el contenido del archivo, puede intentar esto:

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

Obviamente, esto llevará mucho más tiempo, transferirá una gran cantidad de datos y requerirá que tenga un gran tamaño de caché. Pero cuando está hecho, acceder a los archivos debería sentirse bien y rápido.


4

SSHFS es realmente lento porque transfiere el contenido del archivo incluso si no es necesario (al hacer cp). Informé esto en sentido ascendente y a Debian, pero no hubo respuesta: /


2
Es eficiente con mv. Desafortunadamente, cuando ejecuta cplocalmente, FUSE solo ve solicitudes para abrir archivos para leer y escribir. No sabe que está haciendo una copia de un archivo. Para FUSIBLE no se ve diferente de una escritura de archivo general. Así que me temo que esto no se puede solucionar a menos que el local cpse haga más FUSE-aware / FUSE-friendly. (O FUSE podría enviar hashes de bloque en lugar de bloques enteros cuando sospeche que cp, como lo hace rsync, pero eso sería complejo y podría ralentizar otras operaciones).
joeytwiddle

3

Después de buscar y probar. Acabo de encontrar agregar -o Compression=novelocidad mucho. El retraso puede ser causado por el proceso de compresión y descompresión. Además, usar 'Ciphers = aes128-ctr' parece más rápido que otros, mientras que algunas publicaciones han realizado algunos experimentos al respecto. Entonces, mi comando es de alguna manera así:

sshfs -o allow_other, transform_symlinks, follow_symlinks, IdentityFile = / Users / maple / .ssh / id_rsa -o auto_cache, recnect, defer_permissions -o Ciphers = aes128-ctr -o Compression = no maple@123.123.123.123: / home / maple ~ / mntpoint


2

NFS debería ser más rápido. ¿Qué tan remoto es el sistema de archivos? Si está por encima de la WAN, es mejor que solo sincronice los archivos de un lado a otro, en lugar del acceso remoto directo.


1

Ya sea NFS o Samba si tienes archivos grandes. Usar NFS con algo como 720p Movies and crap es realmente un PITA. Samba hará un mejor trabajo, aunque no me gusta Samba por otras razones y generalmente no lo recomendaría.

Para archivos pequeños, NFS debería estar bien.


1

Descubrí que apagar mi tema zsh que verificaba el estado del archivo git me ayudó enormemente: solo ingresar al directorio me llevó más de 10 minutos. Del mismo modo, desactiva los verificadores de estado de git en Vim.


Wow, este es un muy buen consejo!
Dmitri

-2

Inicie sesión como root.

Acceda a su directorio de nivel superior, utilizando "cd /".

Luego, asegúrese de tener una carpeta de montaje creada o cree una usando "mkdir folder_name".

Después de eso, simplemente use "mount xxxx: / remote_mount_directory / local_mount_directory.

si todo funcionó de su parte, antes de esto debería tener un montaje exitoso. Es posible que desee comprobar y asegurarse de que el directorio de destino se comparte mediante el comando "exportfs" para garantizar que se puedan encontrar.

Espero que esto ayude. Esto no es de un entorno lvie, se ha probado en una LAN utilizando VMware y Fedora 16.


55
Esto no responde la pregunta ...
Léo Lam
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.