web-dev-qa-db-ja.com

Windows7でwinsxsフォルダーのジャンクションを作成するための詳細な手順

winsxsフォルダーをデータHDDドライブに移動し、SSDにジャンクションを作成するためのWindows7の詳細な手順のリストを検索していました。

mklink /J oldpath newpath

私はこれを見つけることができましたが、これはスーパーユーザーの質問からリンクされています( winsxsを移動できますか? )が、Vista用であり、... 2007年に公開されました:

VistaでWinSxSディレクトリを移動する方法

私はまた、スーパーユーザーでこれらの答えを見つけました:

  1. Windows 7では、winsxsまたはインストーラーフォルダーのシンボリックリンクまたはジャンクションを作成できますか このスーパーユーザーの質問では、ユーザーは、別のドライブに移動した後、mlinkフォルダーをwinsxsフォルダーに作成できるかどうかを尋ねています。 そして答えは "インストーラーに対してこれを行うことができます"。しかし、問題は、winsxsのためにそれを行うことができるかということでした。特に、質問の下の最初のコメントの後に、"これらは"すでに "シンボリックリンクであるため、これを行うことはできません"

  2. Windowsを強制終了せずにWindowsインストーラーフォルダからドライブスペースを解放するにはどうすればよいですか? これはWindows/Installerフォルダー用であり、winsxsではなく、/Dオプションの代わりに/Jオプションを使用しますmlinkで。しかし、彼らは私がwinsxsでやりたいことをやっています。フォルダーの内容を別のドライブにコピーしてから、mklink /D oldpath newpathを実行します。しかし、これはwinsxsで実行できますか? (リンクされたブログ投稿もwinsxsフォルダーを移動せず、他のフォルダーのみを移動しました)。また、リンクされたブログ投稿のコメント投稿者は、管理者権限からシステム権限に変更できなかったと報告しています。これは、コマンドを実行したり、フォルダーを移動したりする前の最初のステップです。

  3. Windowsを強制終了せずにWindowsインストーラーフォルダからドライブ領域を解放するにはどうすればよいですか? 前のスーパーユーザーリンクの別のコメント投稿者は、ジャンクションを作成すると、

「msiexecは(明らかに)ジャンクションを無視し、手動でC:\ Windows\Installerを作成します。これにより、1)ジャンクションが削除され、2)ターゲットディレクトリの内容が完全に削除されます。」

これはwinsxsフォルダにも起こりますか?

したがって、要約すると:

Winsxsフォルダーを移動して、そのフォルダーへのジャンクションを作成したいのですが、それができるかどうか、またはその結果がわかりません。

  • 最初にリンクした2007年にVista用に作成された手順は、Win 7でも機能しますか?
  • "これらは"すでに "シンボリックリンクであるため、これを行うことはできません"正しいと言うユーザーですか?
  • Vistaがフォルダーを移動してジャンクションを作成する手順がWin7で機能しない場合、ポイント2のリンクされたブログ投稿に記載されている手順は機能しますか?報告されたエラーを取得せずに、特権を管理者からシステムに正しく変更するにはどうすればよいですか?
  • ジャンクションを作成できた場合、msiexecはジャンクションを無視し、手動でC:\ Windows\winsxsを作成して、ジャンクションを削除し、ターゲットディレクトリの内容を完全に削除しますか?
  • /J(ジャンクション)または/D(シンボリックリンクリンク)のどのオプションを使用しますか? /Jを推測していて、2つの違いはわかっていますが、他のオプションも回答に表示されているため、もう何もわかりません。さまざまなオプションがさまざまなソースに表示されます。誰が正しいですか?
1
Xirux Nefer

WinSxSについて知っておくべき最も重要なこと

プロパティが示すほど多くのスペースを必要としません。

WinSxS properties screenshot

WinSxSには、主にハードリンクが含まれています。ハードリンクはシンボリックリンクに似ていますが、はるかに透過的です。

ファイルはツリーとしてハードディスクに保存されるのではなく、フラットな構造で保存されます。次に、この構造のアイテムがフォルダーツリーにマップされ、名前が付けられます。このような各マッピングは、単一のハードリンクです。したがって、ハードリンクはファイル名とパスをファイルの内容に接続するものです。

ほとんどのファイルにはハードリンクが1つしかありません。たとえば、ファイルをダウンロードすると、その内容がハードディスクのどこかに保存され、名前付きのハードリンクがC:\Users\<yourUsername>\Downloadsに作成されます。

必要に応じて、同じディレクトリ(異なるファイル名)または同じドライブ上の別の場所に追加のハードリンクを作成できます。ファイルの内容はドライブに1回だけ保存されるため、2番目のハードリンクを作成してもディスク使用量は増加しません。ファイルには2つのパスからアクセスできます。これらのハードリンクは両方とも、プロパティ、変更日、およびファイルの内容を共有します。 1つのファイルへの変更は、2番目のファイルですぐに有効になります。ファイルは、すべてのハードリンクが削除されるまでフラット構造から消去されないため、ハードリンクを削除すると、最後のハードリンクでない限り、ファイルは変更されません。ハードリンクは互いに区別できず、どちらが最初に作成されたかはわかりません。それらは両方とも完全に同等です。 (「マスター」ファイルが1つあるシンボリックリンクとは対照的です。)

他のドライブのファイルは任意のドライブにシンボリックリンクでき、ディレクトリジャンクションはドライブ間で作成できます。ただし、別のドライブ上のファイルへのハードリンクを作成することはできません。すべてのハードリンクは、同じボリューム上のファイルを指している必要があります。

それでは、実験をしてみましょう。 2つのフォルダーを作成し、そのうちの1つに64 KBのファイルを作成し、2番目のフォルダーにこのファイルへのハードリンクを作成します。

C:\Users\gronostaj\Desktop\experiment>mkdir A B

C:\Users\gronostaj\Desktop\experiment>fsutil file createnew A\hardlink1 65536
File C:\Users\gronostaj\Desktop\experiment\A\hardlink1 is created

C:\Users\gronostaj\Desktop\experiment>mklink /h B\hardlink2 A\hardlink1
Hardlink created for B\hardlink2 <<===>> A\hardlink1

次のようなフォルダツリーがあります。

+ experiment
|-+ A
| `-- hardlink1
`-+ B
  `-- hardlink2

64KBファイルへのハードリンクが1つ含まれているAのプロパティは次のとおりです。

Properties of A, showing total size 64 KB

スジは通ってるようだ。 Bのプロパティ。同じ64KBファイルへのハードリンクも1つ含まれています。

Properties of B, showing total size 64 KB

これも結構です。次に、AとBの両方を選択し、プロパティに応じてそれらがどのくらいのスペースを占めるかを見てみましょう。

Properties of A and B, showing total size 128 KB

...そしてこの窓は私たちに嘘をついています。 64KBを使用する物理ファイルは1つだけです。ただし、Windowsエクスプローラーはこれを認識していません。ハードリンクが指すファイルの合計サイズをカウントし、64KBファイルへのハードリンクが2つあります。そのため、これらのフォルダは実際の2倍のスペースを占めると考えられています。 プロパティのフォルダサイズを信頼しないでください。

WinSxSには、Windowsがある時点で使用したシステムファイルへのハードリンクが含まれています。システムファイルがインストールされると、メインの場所とWinSxSにハードリンクされます。新しくインストールしたWindowsシステムでは、WinSxSは数GBの大きさのように見えますが、他の場所にハードリンクされているファイルのみが含まれているため、有効サイズはゼロです。

システムファイルが(たとえばWindows Updateによって)置き換えられると、メインの場所から削除され、その場所に新しいファイルがインストールされます。この新しいファイルは、WinSxSでもハードリンクされています。この時点で、Windowsは新しいバージョンのファイルのみを使用しますが、ハードディスクには2つのバージョンが含まれており、そのうちの1つは使用されていません。これにより、実際にはWinSxSが成長します。

なぜWindowsはこれを行うのですか?

  1. 更新は簡単にアンインストールできます-古いファイルはまだそこにあり、WinSxSであなたを待っています。
  2. WinSxSには適切なコピーが保持されているため、Windowsは破損したファイルに関するいくつかの問題を自動的に修正できます。これはsfc /scannowが行うことです。

この時点で、WinSxSを別のドライブに移動することはできないと結論付けることができます。これは、内部の一部のファイルがC:\Windows内の別の場所にハードリンクされているためです。それらを別のドライブにコピーしてジャンクションを作成することもできますが、ディスクの総使用量が増加し(追加のハードリンクはスペースを取りません、余分なコピーはスペースを取ります)、おそらくWinSxSを壊します。

WinSxSのサイズを縮小する唯一の合理的な方法は、未使用の古いバージョンのファイルを削除することです。これは、ディスククリーンアップツール(Windowsで使用可能)を使用して、Windows Updateクリーンアップチェックボックス。ディスククリーンアップに表示されない場合は、WinSxSはすでに圧縮されています。

2
gronostaj