565 votes

"jonction de répertoire" vs "lien symbolique de répertoire" ?

Dans le contexte de NTFS :

MKLINK [[/D] | [/H] | [/J]] Link Target

/D Crée un lien symbolique de répertoire. La valeur par défaut est un lien symbolique de fichier.
/H Crée un lien dur au lieu d'un lien symbolique.
/J Crée une jonction de répertoire.
Link spécifie le nom du nouveau lien symbolique.
Target spécifie le chemin (relatif ou absolu) auquel le nouveau lien fait référence.

  1. N'est pas un jonction de répertoires la même chose qu'un lien symbolique du répertoire ?

    Quelle est la différence entre mklink /D f1 f2 y mklink /J f1 f2 ?

  2. Puisqu'un "répertoire" est en fait juste un fichier Quelle est la différence entre un lien symbolique de répertoire et un lien symbolique de fichier ?

4 votes

9 votes

Avertissement : Windows 10 a de sérieuses lacunes en ce qui concerne les liens symboliques : par exemple, la suppression de la jonction est sûre, mais le simple fait de la déplacer vers un emplacement quelconque vide le répertoire d'origine ! Il laisse la jonction à son emplacement initial, et au dest il y aura un dossier indépendant avec le contenu original. Ceci peut cependant être annulé. Maintenant, les liens symboliques n'ont pas ce problème, (le déplacement du lien symbolique transportera sa cible). Néanmoins, le fait de le déplacer vers un autre volume créera un dossier indépendant vide et le fait d'annuler cette opération déplacera le dossier indépendant à l'emplacement initial du lien symbolique. Ce ne sont là que quelques comportements.

509voto

Harry Johnston Points 5554

Une jonction n'est absolument pas la même chose qu'un lien symbolique de répertoire, bien qu'ils se comportent de manière similaire. La principale différence est que, si vous regardez un serveur distant, les jonctions sont traitées au niveau du serveur y les liens symboliques des répertoires sont traités au niveau du client . Voir également le commentaire de Matthew sur le fait que cela signifie que les liens symboliques sur le système de fichiers local peuvent pointer vers des systèmes de fichiers distants.

Supposons que sur une machine nommée Alice, vous deviez mettre un point de jonction c:\myjp et un lien symbolique de répertoire c:\mysymlink , tous deux pointant vers c:\targetfolder . Si vous utilisez Alice, vous ne remarquerez pas de différence entre les deux. Mais si vous utilisez une autre machine nommée Bob, alors le point de jonction

\\Alice\c$\myjp pointera vers \\Alice\c$\targetfolder

mais le lien symbolique

\\Alice\c$\mysymlink pointera vers \\Bob\c$\targetfolder

(Attention : par défaut, le système ne suit pas les liens symboliques sur les volumes distants, donc dans la plupart des cas, le deuxième exemple aboutira à l'un ou l'autre des résultats suivants "Fichier non trouvé" ou "Le lien symbolique ne peut être suivi car son type est désactivé." )

La différence entre un lien symbolique de répertoire et un lien symbolique de fichier est simplement que l'un représente un répertoire et l'autre un fichier. Comme la cible du lien ne doit pas nécessairement exister au moment de la création du lien, le système de fichiers doit savoir s'il doit indiquer aux applications qu'il s'agit d'un répertoire ou non.

Il convient également de noter que la création d'un lien symbolique nécessite un privilège spécial (par défaut, uniquement disponible pour les processus élevés) alors que la création d'une jonction ne nécessite que l'accès au système de fichiers.

25 votes

Pour être clair : il peut y avoir d'autres différences fonctionnelles plus subtiles entre les jonctions de répertoires et les liens symboliques de répertoires. La différence entre local et distant est simplement la plus évidente du point de vue de l'utilisateur (par opposition au développeur).

0 votes

Désolé, je trouve le deuxième paragraphe assez ambigu. Si je crée un lien symbolique testlink sur le client, qui renvoie au c:\test sur le serveur, n'est pas testlink (lien symbolique) me permettent également de voir le contenu du fichier C:\test sur le serveur ?

1 votes

@Pacerier la différence est où ils sont résolus. Si vous créez un lien symbolique sur votre machine locale, vous ne remarquerez pas la différence. Si vous partagez votre ordinateur, une jonction sera résolue sur votre ordinateur lorsqu'elle sera vue depuis un autre ordinateur, mais un lien symbolique sera résolu sur le leur.

177voto

u8it Points 1669

Les liens symboliques ont plus de fonctionnalités, tandis que les jonctions semblent presque être une fonctionnalité héritée en raison de leurs limitations, mais les implications de sécurité de ces limitations sont spécifiquement la raison pour laquelle une jonction pourrait être préférée à un lien symbolique. Le ciblage à distance rend les liens symboliques plus fonctionnels, mais augmente également leur profil de sécurité, tandis que les carrefours peuvent être considérés comme plus sûrs car ils sont limités aux chemins locaux. . Donc, si vous voulez un lien local et que vous pouvez vivre avec un chemin absolu, vous êtes probablement mieux avec une jonction ; sinon, considérez un lien symbolique pour ses capacités supplémentaires.

enter image description here

**L'affirmation d'une différence de vitesse/complexité provient d'une déclaration non vérifiée dans le rapport de la Commission européenne. Entrée Wikipedia sur les points de reparsage NTFS (une bonne lecture).*


Autres comparaisons de liens NTFS

Voici d'autres comparaisons sur le sujet, mais elles peuvent être trompeuses lorsqu'on considère les jonctions, car elles n'énumèrent pas les avantages que j'énumère ci-dessus.

Tiré d'ici (une bonne lecture introductive)

enter image description here

Desde Page SS64 sur MKLink

enter image description here


Commentaires sur la terminologie

Les jonctions sont des liens symboliques

Les jonctions et les liens symboliques font vraiment la même chose de la même manière (reparse des points), à part les différences susmentionnées dans la façon dont ils sont traités. En fait, techniquement, une jonction est un lien symbolique, et parfois la documentation peut appeler une jonction un lien symbolique, comme c'est le cas ici . Il s'agit donc d'un élément à prendre en compte concernant la terminologie.

NTFS

Même si le PO le précise, il est utile de souligner que "lien symbolique" est un terme très général qui n'est pas spécifique à NTFS. Donc, pour être précis, cette comparaison concerne les jonctions NTFS par rapport aux liens symboliques NTFS.

8 votes

Quelqu'un a testé la vitesse de traitement des jonctions par rapport aux liens symboliques ?

3 votes

Le tableau des avantages et des inconvénients a été extrêmement utile, merci !

79voto

Still.Tony Points 1171

Les discussions complexes font mal au cerveau. J'aime les graphiques :

Supposons que MyLink est un lien symbolique et tout MyJunc est une jonction pointant vers Target as created .

par exemple

mklink /D MyLink C:\T_Dir pour créer un lien symbolique vers le répertoire cible

mklink /J MyJunc C:\T_Dir pour créer une jonction de répertoire vers le répertoire cible

Où la syntaxe est mklink [/J,/D] [link path] [target path] tel que tapé sur la machine locale


 link path    |   target path   |         When accessed ..
              |                 |  (locally)    |    (remotely)
              |                 |               |
C:\MyLink     |   C:\T_Dir      |  C:\T_Dir     |  [leads back to local]
C:\MyJunc     |   C:\T_Dir      |  C:\T_Dir     |  [leads to remote]
              |                 |
\\Svr\MyLink  |   C:\T_Dir      |   C:\T_Dir    |  [leads back to local]
\\Svr\MyJunc  |   C:\T_Dir      |  *** Must create and point local ***
              |                 |
C:\MyLink     |  \\Sv2\T_Dir    |  \\Sv2\T_Dir  |   Error*1
C:\MyJunc     |  \\Sv2\T_Dir    |  *** Error - Must point local ***
              |                 |
\\Svr\MyLink  |  \\Sv2\T_Dir    |  Error*1
\\Svr\MyJunc  |  \\Sv2\T_Dir    |  *** Must create link using target device ***

Erreur*1 - Si vous avez débloqué l'accès aux liens symboliques distants sur votre machine locale, cela fonctionnera mais uniquement sur la machine locale où il est débloqué.

3 votes

C'est trop bizarre. Même les liens symboliques relatifs ne fonctionnent pas à distance. Par exemple, je crée un répertoire d:\_tmp\data . Créez un lien comme suit : d:\_tmp>mklink /d data-link data . L'utilisateur distant a un accès complet à d:\_tmp et tous ses sous-dossiers MAIS il ne pourra toujours pas ouvrir d:\_tmp\data-link .

5 votes

En effet, lorsqu'un lien symbolique est évalué côté client, il pointe vers d : \_tmp\data sur le client, pas sur le serveur.

0 votes

Je pense que la raison pour laquelle c'est bizarre est claire. Mais je suis d'accord avec @Nux que c'EST bizarre, au moins dans le cas des liens symboliques relatifs.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X