NTFSの文脈で
MKLINK [[/D] | [/H] | [/J]] Link Target
/D
ディレクトリシンボリックリンクを作成します。デフォルトはファイルシンボリックリンク。/H
シンボリックリンクの代わりにハードリンクを作成します。/J
ディレクトリ・ジャンクションを作成します。Link
は新しいシンボリックリンク名を指定します。Target
は、新しいリンクが参照するパス (相対パスまたは絶対パス) を指定します
ディレクトリジャンクションは、ディレクトリシンボリックリンクと全く同じものではないのでしょうか?
mklink /D f1 f2
とmklink /J f1 f2
の違いは?ディレクトリ」は実際にはただのファイルなので、ディレクトリシンボリックリンクとファイルシンボリックリンクの違いは何でしょうか?
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
シンボリックリンクはより多くの機能を持っていますが、ジャンクションはその制限のためにほとんどレガシー機能のように見えますが、これらの制限のセキュリティ上の意味合いが、シンボリックリンクよりもジャンクションが好まれる理由です。リモートターゲティングはシンボリックリンクをより機能的にしますが、セキュリティプロファイルも高くなります。ですから、ローカルリンクが必要で、絶対パスに耐えられるのであれば、ジャンクションの方が良いでしょう
WikipediaのNTFSリパースポイントに関するエントリ (読み物)の中の未検証の記述から来ています
その他のNTFSリンクの比較
ここでは他にもいくつか比較してみましたが、上記のようなメリットを挙げていないので、ジャンクションを考える際には誤解を招く可能性があります
ここから引用しました(入門編としては良い読み物)
用語についてのコメント
ジャンクションはシンボリックリンクです
ジャンクションとシンボリックリンクは、前述の処理方法の違いを除けば、実際には同じようなことをしています (reparse points)。実際、技術的には、ジャンクションはシンボリックリンクであり、ドキュメントではジャンクションをシンボリックリンクと呼ぶこともあります。そのため、用語に関しては注意が必要です
NTFS
OPで指定されているとはいえ、「シンボリックリンク」は非常に一般的な用語であり、NTFSに特化したものではないことは指摘しておく価値があります。つまり、この比較は NTFS ジャンクションと NTFS シンボリックリンクについてのものです
86 u8it 2018-02-02
複雑な話をすると脳が痛くなる — 私はチャートが好きです
任意のMyLink
がシンボリックリンクであり、任意のMyJunc
がTarget 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