NTFS ジャンクション ポイントをネットワーク共有経由で追跡できますか?

NTFS ジャンクション ポイントをネットワーク共有経由で追跡できますか?

OS: Windows Server 2016

別のフォルダー Y (同じマシンの同じボリューム上) へのジャンクション ポイントを含むフォルダー X がある場合、ネットワーク経由で X を共有すると、X に接続するリモート ユーザーは Y にリダイレクトされますか?

使用例としては、スケジュールされたタスクの実行後にフォルダーの場所/名前 Y が時々変更されることがあります。ただし、リモート ユーザーが常に同じネットワーク共有名 (X) を使用するようにしたいです。タスクの実行中にジャンクション ポイントを更新できます。

これを実現できる他の技術はありますか? 次の方法である程度成功しました: X という名前のネットワーク共有を再作成または更新し、Y を直接ポイントするようにします。ただし、これは X が最上位の共有である場合にのみ機能します。

私は、次の場合にも機能するソリューションを探しています。X を Y への共有とします。Y にサブフォルダー A が含まれている場合、リモート ユーザーはネットワーク パス X\A 経由でアクセスできます。ただし、ネットワーク パス (たとえば X\B) 経由でリモート ユーザーがマシン上のまったく異なるパスにアクセスできるケースも必要です。そのため、Y\B から別のパスへのジャンクション ポイントを作成するというアイデアがあります。(リモート ユーザーは X\B 経由でアクセスします)

出来ますか?

答え1

はい、SMB ファイルサーバーは、mklink /jターゲットが共有フォルダーの外部を指している場合でも、ディレクトリジャンクション ( ) を透過的に自動的に追跡します。(実験的にテスト済み。)

一方、サーバーはシンボリックリンク ( mklink /d) をたどりません。シンボリックリンクはクライアントに委ねられ、クライアントもデフォルトではシンボリックリンクをたどりません (このオプションを有効にすると、ターゲットは明らかに別の共有フォルダーにする必要があります)。詳細については、harrymc の投稿を参照してください。

3番目のオプションとして、Windows Serverでは共有を次のように作成できます。DFS 名前空間、その下では、通常のファイルと、別の共有(別のサーバー上にあるものも含む)を指す特別な「参照」ディレクトリの両方を持つことができます。(これらの参照は常にクライアント側で追跡され、すべての Windows バージョン、libsmbclient、さらには Linux cifs.ko でも認識されます。)

フォルダー Y を別のマシンに移動する必要がある場合は、DFS がおそらく推奨されるオプションです。(Active Directory は必要ありませんが、すべてのファイルサーバー間で共通の認証を使用すると作業が簡単になります。)

答え2

デフォルトのクライアント Windows では、シンボリック リンクのチェーンは許可されません。

その動作を制御するコマンドは fsutil詳細は記事で説明されている Fsutilの動作

探している特定の動作は という名前ですSymlinkEvaluation。コマンド プロンプトにコマンド を入力すると、現在の値を確認できます fsutil behavior query SymlinkEvaluation。以下は、私の Windows 10 のデフォルトです。

ここに画像の説明を入力してください

の動作コードには、、、、というSymlinkEvaluation名前が付けられており 、次の意味を持ちます。L2LL2RR2LR2R

  • L「ローカル」とR「リモート」の略です
  • 最初LまたはR-前に-2リンク自体の場所を指します(リンク先ではありません)リンクにアクセスしているマシンに関連して
  • 2番目LまたはR--2はリンクの場所を示しますLINK自体が配置されているマシンを基準としたターゲット

たとえば、設定はSymlinkEvaluation R2Lリンクへのアクセスを制御できることを意味します。

  • リモートマシン(R)上にある
  • 同じリモートマシン上のターゲットを指す(L

したがって、可能性は次のようになります。

  1. ローカルからローカルへのシンボリックリンク、L2L:{0|1}
  2. ローカルからリモートへのシンボリックリンク、L2R:{0|1}
  3. リモートからローカルへのシンボリックリンク、R2R:{0|1}
  4. リモートからリモートへのシンボリックリンク、R2L:{0|1}

ここで0、 は無効、 は1有効を表します。

探しているコマンドは次のようになります:

fsutil behavior set SymlinkEvaluation R2L:1

これはサーバーではなくクライアントで実行されることに注意してください。

答え3

2022 年 9 月: ネットワーク共有経由のジャンクションが機能しなくなったようです。

https://learn.microsoft.com/en-us/sysinternals/downloads/junction

最終更新日: 2022年7月19日

注記

Windows は、リモート共有上のディレクトリへのジャンクションをサポートしていません。

以前、ネットワーク共有サーバー上にジャンクションを作成し、別のドライブを指し示しました。すべて正常に動作しました。しばらく使用していなかったのですが、問題が発生しました。

  • クライアント側では、ジャンクション アイコンをダブルクリックしても反応がなく、何も表示されず、何も変化しません。
  • クライアント側では、「プロパティ」にジャンクションがフォルダーとして表示されますが、バイト数は 0 で、ファイルは 0 です。
  • アイコンを右クリックして「新しいウィンドウで開く」を選択しても反応がありません。
  • 「ネットワークドライブのマップ」も\server\shareへの直接アクセスも機能しませんでした

サーバー側では、次の操作を行っても効果はありませんでした:

  • ジャンクション ターゲットの新しい共有を設定します。
  • 最初からやり直し、新しいジャンクションと新しい共有を作成し、「セキュリティ」タブをリセットします

Windows 10 Pro 21H2 19044.1889 Windows 機能エクスペリエンス パック 120.2212.4180.0

生産性向上のための新たな機能を開発した偉大なるマイクロソフトに敬意を表します。

関連情報