¿Cómo convertir un archivo en un enlace simbólico?

¿Cómo convertir un archivo en un enlace simbólico?

Al crear un enlace simbólico en un recurso compartido de Samba de un punto a otro (en la misma unidad), el archivo que contiene el enlace simbólico se estropea en otros clientes, pero no en el cliente original.

Por ejemplo, en el cliente que realiza el enlace, los enlaces simbólicos funcionan perfectamente y son reconocidos por el sistema operativo original, incluso después de volver a montar:

lrwxrwxrwx 1 g g       38 Mar 17 11:15 npm2 -> ../lib/node_modules/npm/bin/npm-cli.js

Pero, en el servidor u otros clientes, el enlace es un archivo con contenidos como este:

XSym
0038
36c91a46c3a5a86837deff259c6d0874
../lib/node_modules/npm/bin/npm-cli.js

... con permisos:

-rwxrw-r-- 1 z z     1067 Mar 17 11:15 npm2

Entonces... básicamente... esto es algún tipo de error de montaje, o algo así, pero ¿hay alguna manera de que pueda usar chmod para "meep" en el enlace simbólico original previsto? Sería de gran ayuda.

Respuesta1

No, no puedes usar chmod para cambiar el tipo fundamental del archivo. Pero no es un archivo debido a ningún error: es un archivo porque el servidor Samba lo creó como tal, y eso en sí podría deberse simplemente a que el cliente realmentepreguntópara crear un archivo con esos contenidos específicos.

Las SMB normales no saben nada sobre enlaces simbólicos y el servidor SMB más común (Windows) tampoco admitió enlaces simbólicos durante mucho tiempo. Como resultado, varios clientes SMB inventaron formas de almacenar enlaces simbólicos como archivos normales con formas extrañas.

El formato específico que tienes se llamaminshall+francésenlaces simbólicos, utilizados por macOS y el módulo del kernel "cifs" de Linux: si el recurso compartido está montado con la mfsymlinksopción, Linux reconoce el marcador "XSym" yfingeque es un enlace simbólico a aplicaciones del lado del cliente. Entonces, si un cliente usa esto, todos los demás clientes también deben usar la misma opción.

Desafortunadamente, si quieres tenerrealenlaces simbólicos en el servidor, necesitará usar SMBv1(también conocido como "NT1") y asegúrese de que tanto el servidor como el cliente admitan "Extensiones CIFS Unix". Y tenga en cuenta que esto esnoplaneó trabajar con las próximas extensiones POSIX SMBv3: los desarrolladores de Samba han declarado explícitamente que ya no quieren que exista la capacidad de crear enlaces simbólicos del lado del servidor (debido a importantes problemas de seguridad), y que cuando Samba obtenga soporte para las funciones POSIX en SMBv3 seguirá creando esos "archivos especiales".


Como respuesta diferente a la pregunta original, puede sertécnicamenteEs posible utilizar herramientas de tipo "debugfs" para cambiar un archivo a un enlace simbólico y viceversa, pero depende en gran medida de las partes internas de ese sistema de archivos específico. (Algunos de ellos pueden almacenar enlaces simbólicos exactamente como archivos normales, diferenciándose solo en los bits de tipo... pero otros como NTFS pueden tener un formato totalmente incompatible).

Pero esto normalmente se hace sólo cuando se repara un sistema de archivos muy dañado, no como parte del funcionamiento normal. Y, por supuesto, no servirá de nada si el archivo "pseudo-symlink" original contiene datos en formato MF, ya que eso esnoel mismo formato que su sistema de archivos usaría internamente.

información relacionada