Un nombre de Samba más amigable con los humanos

11

La mayoría de nuestras computadoras ejecutan Ubuntu, pero dos de ellas inician dual en Windows, y cuando tenemos invitados, normalmente también ejecutan computadoras con Windows. Por lo tanto, además de usar NFS, nuestro servidor de archivos (servidor Ubuntu) también ejecuta Samba.

Y dado que usamos Ubuntu principalmente, nos gusta aprovechar sus ventajas sobre Windows, como poder usar los caracteres \:*?"<>|en un nombre de archivo. El problema, por supuesto, es que Windows no acepta esos caracteres en los nombres de archivo, por lo que Samba tiene que traducir el nombre del archivo en algo más aceptable. La forma en que hace esto, sin embargo, me parece desagradable.

El nombre del archivo, Episode 182 - Exorcist 2: The Heretic.mp4por ejemplo, se convierte en E4Q82R~Y.MP4. Esta es una terrible "corrección". ¿Hay alguna manera de hacer que la samba sea más amigable con los humanos? ¿Es posible "corregirlo" a algo así Episode 182 - Exorcist 2_ The Heretic.mp4, en lugar de que los caracteres ilegales simplemente se sustituyan?

Alex
fuente
1
Consulte la descripción de este parche en la Lista de correo de Samba . El método descrito funciona de forma inmediata con Samba 4.1.4-Debian.
mpy
@mpy He intentado esto, pero todavía no me funciona cuando copio archivos con caracteres ilegales de Windows a mi recurso compartido de samba. Funciona solo para convertir cosas que habrían estado bien (como un espacio convertido en un símbolo), pero no para cosas que no funcionarían (como ':' convertido a otro símbolo). Cualquier puntero?
pd12

Respuestas:

11

mangled map ahora está en desuso y ya no funcionará en nuevas versiones de Samba.

Puede usar vfs_catia para resolver el problema. Agregue las siguientes líneas a smb.conf:

vfs objects = catia
catia:mappings = 0x003a:0x2236,0x003f:0x0294,0x002a:0x2217,0x003c:0x276e,0x003e:0x276f,0x0022:0x02ba,0x007c:0x2223,0x005c:0x29f9

La asignación se especifica con 0x códigos de caracteres hexedecimales prefijados separados por dos puntos. El mapeo proporcionado reasignará caracteres ilegales a imitaciones unicode que es poco probable que se usen en cualquier idioma.

:? * <> "| \
∶ ʔ ∗ ❮ ❯ ʺ ∣ ⧹

El código se puede poner debajo [global]o en una [share]sección individual . Colocarlo [global]puede afectar el rendimiento.

Tenga en cuenta que cualquier carácter que asigne no se puede usar en los nombres de archivo en el servidor o serán inaccesibles.

Ejemplo: un cliente de Windows que acceda a un archivo nombrado file❮name.txten el servidor solicitará file<name.txtal servidor debido a la asignación, lo que dará como resultado un error de archivo no encontrado.

Emil
fuente
He intentado esto, pero todavía no funciona para mí cuando copio archivos con caracteres ilegales de Windows a mi recurso compartido de samba. Funciona solo para convertir cosas que habrían estado bien (como un espacio convertido en un símbolo), pero no para cosas que no funcionarían (como ':' convertido a otro símbolo). Cualquier puntero?
pd12
2
¡Esto funciona muy bien! Una cosa a tener en cuenta es que no puede asignar todo al mismo personaje, y en su ejemplo, cualquier cosa que tenga un guión bajo ya no será accesible. En su lugar, utilicé las siguientes asignaciones:, 0x3a:0x7e 0x3f:0x5eentonces se :vuelve ~y se ?vuelve ^.
Geoffrey
2

En este enlace puede ver las opciones de destrucción. Creo que primero debes deshabilitar la opción:

mangled names

Después de eso, supongo que los nombres deberían verse mejor ...

Para reemplazar los dos puntos, por ejemplo, use esta línea:

mangled map =(: _)

Puede agregar más reglas de reemplazo como esta:

mangled map =(: _) (foo bar)

(también reemplaza cualquier ocurrencia de foo por barra)

Michael K
fuente
Se ven mejor ahora. De hecho, cuando configuro "nombres destrozados" en "no", los nombres de los archivos aparecen en Windows completamente sin cambios. Si bien esto ciertamente se ve mejor, también hace que las aplicaciones de Windows no puedan abrir los archivos. Si intento abrir un archivo tes:t.txten el Bloc de notas, por ejemplo, me dicen "No puedo encontrar el archivo [tes] t.txt". Lo mismo ocurre con otros archivos "ilegales" en sus respectivas aplicaciones.
Alex
editado mi respuesta!
Michael K
mangled mapha sido eliminado de Samba. Por lo que puedo decir después de mirar un poco a su alrededor, fue eliminado hace años. Esto es lo log.smbdque dice mi archivo si trato de usarlo:Ignoring unknown parameter "mangled map"
Alex
Tienes razón ... en desuso. No va a funcionar No es tan simple: el nombre de archivo complicado es evitar tener dos archivos con el nombre de la dama. El archivo foo: .txt y foo_.txt podría existir y luego su cambio de nombre fallaría. Por lo tanto, lo mejor sería hacer cumplir las reglas de nombre de archivo de modo que solo se permitan nombres que estén permitidos en ambos sistemas de archivos.
Michael K