windows – “ディレクトリ接続” vs “ディレクトリシンボリックリンク”?

filesystems ntfs symbolic-link windows

NTFSの文脈で

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

/D ディレクトリシンボリックリンクを作成します。デフォルトはファイルシンボリックリンク。 /H シンボリックリンクの代わりにハードリンクを作成します。 /J ディレクトリ・ジャンクションを作成します。 Link は新しいシンボリックリンク名を指定します。 Target は、新しいリンクが参照するパス (相対パスまたは絶対パス) を指定します

  1. ディレクトリジャンクションは、ディレクトリシンボリックリンクと全く同じものではないのでしょうか?

    mklink /D f1 f2mklink /J f1 f2の違いは?

  2. ディレクトリ」は実際にはただのファイルなので、ディレクトリシンボリックリンクとファイルシンボリックリンクの違いは何でしょうか?

  446  Pacerier  2011-10-05


ベストアンサー

ジャンクションとディレクトリシンボリックリンクは似たような挙動をしますが、間違いなく同じものではありません。主な違いは、リモートサーバを見ている場合、ジャンクションはサーバで処理され、ディレクトリシンボリックリンクはクライアントで処理されるということです。これはローカルファイルシステム上のシンボリックリンクがリモートファイルシステムを指すことを意味します

Aliceという名前のマシン上に、ジャンクションポイントc:\myjpとディレクトリシンボリックリンクc:\mysymlinkを置き、両方ともc:\targetfolderを指しているとしましょう。アリスを使っている間は、両者の違いに気づくことはないでしょう。しかし、Bobという名前の別のマシンを使っている場合、分岐点は

\\Alice\c$\myjp\\Alice\c$\targetfolderを指します

が、シンボリックリンクです

\\Alice\c$\mysymlink\\Bob\c$\targetfolderを指します

(注意: デフォルトでは、システムはリモートボリューム上のシンボリックリンクを追跡しないので、ほとんどの場合、2番目の例では実際には「ファイルが見つかりません」または「シンボリックリンクはそのタイプが無効なので追跡できません」のどちらかになります)

ディレクトリシンボリックリンクとファイルシンボリックリンクの違いは、単純に、一方がディレクトリを表し、一方がファイルを表すということです。リンクのターゲットはリンクが作成されたときに存在する必要がないので、ファイルシステムはアプリケーションにそれがディレクトリであることを伝えるかどうかを知る必要があります

また、シンボリックリンクの作成には特別な権限が必要であることにも注意が必要です (デフォルトでは、昇格したプロセスのみが利用可能)

409  community wiki  2020-02-07


シンボリックリンクはより多くの機能を持っていますが、ジャンクションはその制限のためにほとんどレガシー機能のように見えますが、これらの制限のセキュリティ上の意味合いが、シンボリックリンクよりもジャンクションが好まれる理由です。リモートターゲティングはシンボリックリンクをより機能的にしますが、セキュリティプロファイルも高くなります。ですから、ローカルリンクが必要で、絶対パスに耐えられるのであれば、ジャンクションの方が良いでしょう

enter image description here

WikipediaのNTFSリパースポイントに関するエントリ (読み物)の中の未検証の記述から来ています


その他のNTFSリンクの比較

ここでは他にもいくつか比較してみましたが、上記のようなメリットを挙げていないので、ジャンクションを考える際には誤解を招く可能性があります

ここから引用しました(入門編としては良い読み物)

enter image description here

MKLinkのSS64ページより

enter image description here


用語についてのコメント

ジャンクションはシンボリックリンクです

ジャンクションとシンボリックリンクは、前述の処理方法の違いを除けば、実際には同じようなことをしています (reparse points)。実際、技術的には、ジャンクションはシンボリックリンクであり、ドキュメントではジャンクションをシンボリックリンクと呼ぶこともあります。そのため、用語に関しては注意が必要です

NTFS

OPで指定されているとはいえ、「シンボリックリンク」は非常に一般的な用語であり、NTFSに特化したものではないことは指摘しておく価値があります。つまり、この比較は NTFS ジャンクションと NTFS シンボリックリンクについてのものです

86  u8it  2018-02-02


複雑な話をすると脳が痛くなる — 私はチャートが好きです

任意のMyLinkがシンボリックリンクであり、任意のMyJuncTarget as createdを指す分岐点であると仮定します

e.g.

ターゲットディレクトリへのシンボリックリンクを作成するためのmklink /D MyLink C:\T_Dir

mklink /J MyJunc C:\T_Dirは、ターゲットディレクトリへのディレクトリジャンクションを作成するためのものです

ここで、構文はローカルマシンでタイプされた mklink [/J,/D] [link path] [target path] です


 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 ***

エラー*1 – ローカルマシン上でリモートシンボリックリンクへのアクセスのブロックを解除した場合、これは動作しますが、ブロックが解除されているローカルマシン上でのみ動作します

70  Still.Tony  2015-10-22


タイトルとURLをコピーしました