jueves, 29 de noviembre de 2007

Acceso lento a carpetas en red vía Samba desde Ubuntu 7.10

Mi pequeña red doméstica consta de:
  • Un PC AMD64 de sobremesa con Ubuntu 7.10 como SO de uso habitual y XP / Vista para hacer marranadas.
  • Un viejo pero precioso iMac G4, el de pantalla pivotante, que habitualmente está ocupado tirando de aMule y sirviendo contenidos almacenados en un disco externo firewire al resto de los equipos de la red.
  • Un Macbook C2D de uso casi exclusivo, diga lo que diga, de mi novia.
  • Una XBOX, "tuneada" con el excelente XBMC, que hace streaming desde el iMac hacia la tele del salón.
  • Un NAS de 2TB que, entre otras mil cosas, actua también como switch / router gigabit.
El caso es que el acceso a los recursos de red compartidos por el iMac y el NAS es inexplicablemente leeeento en mi Ubuntu. Usando Nautilus para conectarse o montar recursos smb://, cualquier transferencia emplea del orden de un 50% más de tiempo que la misma operación desde XP o Vista. Por si fuera poco, determinados tipos de archivos (avis, rars, por ejemplo), simplemente no pueden abrirse pinchando sobre ellos.

La transferencia iMac <-> NAS, sin embargo, funciona correctamente, a pesar de que también se realiza vía Samba.

Tras trastear un poco con el adaptador de red del AMD64, detectado como de la familia Marvell (la placa base incorpora un chipset nForce), compruebo que no es un problema de drivers: las conexiones vía FTP son significativamente más rápidas, así que el culpable tiene que ser samba o el propio Nautilus (o probablemente ambos).

Se me ocurre montar los recursos de red como dios manda, osea, a golpe de mount, de manera que cuelguen de mi carpeta /media y ¡sorpresa! las transferencias se aceleran notablemente.

Por si fuera poco, el tener los recursos de red colgando del sistema de archivos local facilita el acceso cuando se emplean determinadas aplicaciones para abrirlos, como por ejemplo el gestor de audio programado en java para la serie Network Walkman de Sony que ronda por ahí.

Problema: ahora resulta que sólo tengo acceso de lectura a las carpetas compartidas, a pesar de que en el comando mount empleo un usuario y clave con permisos de acceso completo. Los parámetros file_mode y dir_mode del mount se los pasa el servidor por el forro de la chaqueta, lo que por otra parte es normal dado que sólo son significativos en ausencia de soporte CIFS, y no parece ser éste el caso.

Los UID del propietario de las carpetas compartidas en el iMac y el NAS son distintos, así que no me vale con modificar el del usuario que se conecta a ellas desde el PC con Ubuntu. Tampoco veo en este caso cómo me puede ayudar trastear con el bit sticky o setgid de dichas carpetas.

Llegados a este punto, dos alternativas:
  1. Alternativa sucia & rápida: Invocar el parámetro noperm en mount para que no se realicen nuevos chequeos de permisos más allá del necesario para validar el usuario y clave que se emplea en el acceso al recurso compartido. El inconveniente de esto es que si no somos cuidadosos con los permisos, otros usuarios con sesión iniciada en el PC cliente podrían tener acceso completo por el morro a los recursos compartidos, colándose por el sistema de archivos local en las carpetas montadas en /media. Para evitarlo crearemos un grupo local y meteremos en él a todos los usuarios que deban tener acceso a los recursos de red, para luego crear una carpeta en /media con permisos de acceso total sólo para dicho grupo y sin acceso para el resto. Los puntos de montaje los crearíamos entonces dentro de esta carpeta.
  2. Crear en el PC con Ubuntu uno o varios grupos con el mismo GUID que aquellos a los que pertenecen los usuarios locales con permiso de acceso total a las carpetas compartidas en el iMac y el NAS. El usuario que se conecta a estos recursos deberá pertenecer a ambos. Además, los permisos en los recursos compartidos deberán incluir acceso completo para dichos grupos.
En ambos casos, sin embargo, surge otro problema: los archivos y carpetas creados dentro de los recursos compartidos adquieren como permisos iniciales 0755, resultado de un umask global de 0022 (umask tiene los bits invertidos respecto a los permisos que genera).

Esto implica que en cuanto se crea un archivo (a través de la red o locálmente), el usuario que accede a través de las carpetas montadas deja de poder renombrarlo o eliminarlo (una putada). Como no tengo muchas ganas de andar tocando ni el umask de sistema del iMac ni el del NAS, utilizaré para solventar el problema con el primero una utilidad llamada Tinkertools que, entre otras cosas, permite modificar el umask de cada usuario.

De esta manera, estableciendo un umask de 0002, consigo que lo que se crea dentro del recurso compartido, tanto desde el iMac como desde la red, siga accesible en escritura para todos los usuarios del grupo.

Del NAS mejor hablamos otro día ;-)

Enlaces relacionados:

No hay comentarios :