web-dev-qa-db-ja.com

ディレクトリジャンクションは削除され続けます

SSDでWindows7から10Professionalにアップグレードし、コマンドラインmklink /Jを使用して、HDDディレクトリを指すゲームやMozillaプロファイルなどのフォルダー用のディレクトリジャンクションを作成しました。次のようにリンクされているMozillaFirefoxプロファイルを除いて、すべてのジャンクションが正常に機能します。

Junction created for C:\Users\[USERNAME]\AppData\Roaming\Mozilla <<===>> H:\Users\[USERNAME]\AppData\Roaming\Mozilla

このジャンクションは作成時に正常に機能しますが、ランダムな間隔で削除されます。コンピューターのスリープ後、ジャンクションが欠落している、再起動後、またはコンピューターの使用中はいつでも。コンピュータを再起動したり、スリープ状態にしたりするたびに発生するわけではありません。完全にランダムなようです。

ディレクトリシンボリックリンク(mklink /D)も試しましたが、同じことが起こります。興味深いことに、同じボリューム上の他のジャンクションで問題が発生することはありませんH:

NTFSアクセス許可に問題はなく、ボリュームH:は固定HDDです(リムーバブルではありません)。

これを引き起こしているアイデアはありますか?

5
Binary Code

PortableAppsがジャンクションの削除を引き起こしていますが、問題はWindows rmdirコマンド内にあります。 PortableAppsフォーラムのこのスレッド によると、PortableApps形式でパッケージ化されたすべてのアプリケーションは、rmdirに依存して、ポータブルアプリケーションによって作成される可能性のある残りのフォルダーを削除します。 rmdirは空のフォルダーを削除できます。フォルダーが空でない場合はエラーが発生しますが、ジャンクションに対して使用すると、ジャンクション自体が削除されるだけです。

AppData\Roaming\Mozillaフォルダーを使用するポータブルアプリケーションは、閉じたときにジャンクションを削除します。このようなポータブルアプリケーションには、Seamonkey、Firefox Developer Edition、Firefoxなどが含まれます。

現在、PortableApps側からは、この問題に対する解決策や回避策はないようです。ただし、ジャンクションが削除されないようにするために実行できることが1つあります。ジャンクション(mklink /j)を作成する代わりに、シンボリックリンク(mklink /d)を作成してから、シンボリックリンクのNTFSアクセス許可を編集して、Everyone DenyFullを追加できます。 このSUスレッド を読んだ後、この解決策を思いつきました。

1
Binary Code

Windows10のコントロールパネルで高速起動電源オプションを無効にすることで問題を解決できました。見つけるのは難しいです。古いバージョンのコントロールパネルの左マージンで「電源ボタンの機能を変更する」を探します。見つかったら、次の場所に提出されたと主張します。

Control Panel > All Control Panel Items > Power Options > System Settings

enter image description here

明確にするために、Windows 10の最近のリリースでは、特定の再起動シナリオ(?)中にchkdsk.exeがトリガーされるようです。私の場合、これにより、手動で確立された永続的なクロスボリュームNTFS reparse points( "directoryjunctions")がすべて削除されました一括

Creators Update 1709で、Fast Startupのデフォルト設定が 'enabled'に変更されました。これは、少なくとも私の場合、以前の方法を説明している可能性があります。目に見えない問題が導入されました。詳細については、 ここ を参照してください。

realの原因は、トリガーシナリオ、「高速起動」などに関係なく、chkdsk.exe自体である可能性があります。特定のNTFSボリュームでchkdsk.exeを明示的に実行すると、ボリューム間の再解析ポイントがすべて完全に削除されるように見えることは事実であり、簡単に説明できます。または、少なくとも\\?\Volume{a6f7f7de-091e-4234-81a0-947ebba1bf3c}\パス表記を使用して確立されたものについては、これは私がこれまでに使用したすべてであり、したがって、ここで報告できるすべてです。

クロスボリュームハードリンクを作成する、例:.

X:\foo> linkd bar \\?\Volume{ce775273-ab33-47af-8fac-1abdb60a0690}\baz

これにより、ボリューム間のハードリンク(「ジャンクション」または「NTFS再解析ポイント」)が確立され、X:\foo\barは、指定されたボリュームのディレクトリ\bazと等しくなるようにリダイレクトされますが、そのようなリンクは、その後ソースNTFSボリュームでchkdsk.exeが実行されるたびに削除されます。 X:

0
Glenn Slayden