web-dev-qa-db-ja.com

ハードリンクを使用してWindowsユーザーフォルダを移動する

現在、かさばるフォルダーをSSDからHDDに移動しようとしています(UsersフォルダーとProgramDataフォルダー)。これを効果的に行うためのディレクトリジャンクションの使用については、 短いガイド に従っています。しかし、これは私にはうまくいきません。これはまさに私が最近の試みでしたことです:

  1. HDD上の古いユーザーフォルダを見つけます–私が保持したいもの
  2. SSDにWindows8をインストールする
  3. 回復コンソールで再起動– SSD = C:HDD = D:
  4. ProgramDataをHDDrobocopy /copyall /mir /xj C:\ProgramData D:\ProgramDataにコピーします
  5. Ubuntuを再起動して、失敗したものをすべてコピーし、ProgramDataを削除します
  6. 回復コンソールで再起動します
  7. C:\Usersの名前をC:\Users.oldに変更します
  8. ジャンクションを作る
    1. mklink /J C:\Users D:\Users
    2. mklink /J C:\ProgramData D:\ProgramData
  9. dirで、すべて問題がないことを確認してください。

ただし、再起動すると、ログインスプラッシュ画面が真っ青になり、ユーザープロファイルの画像が表示されず、ログインすると次のように表示されます。

User ProfileServiceサービスがサインインに失敗しました。ユーザープロファイルを読み込めません

そこで、ProgramDataを再び移動し、Users.oldの名前をUsersに戻しました。今回は、スプラッシュ画面が正しく表示されますが、それでもユーザープロファイルの問題が発生します。

私は何を間違えましたか?

3
CJxD

たくさん遊んだ後、答えを見つけました。これが機能しない理由は、SSDからHDDにデータをコピーするときに、既存のジャンクションがすべて削除されるためです。これは、robocopy/xjフラグが、無限ループに陥らないようにするために必要なためです。

これを回避するために、PowerShellスクリプトを作成して、次のことを実行できます。

  1. robocopy /copyall /mir /xj C:\Stuff D:\Stuffを使用してSSDからHDDにデータをコピーします
  2. C:\Stuffのジャンクションごとに、D:\Stuffに同一のジャンクションを作成します
  3. C:\Stuffの各ジャンクションについて、ACL権限をD:\Stuffの対応するジャンクションにコピーします。
  4. C:\Stuffattrib C:\Stuffの属性に注意してください
  5. C:\Stuffを削除または名前変更します
  6. ジャンクションを作成しますmklink /J C:\Stuff D:\Stuff
  7. C:\Stuffの属性をattrib /L C:\Stuff +H +Iとのジャンクションポイントに適用します(たとえば、ProgramDataはこれらの属性を使用します)

うまくいけば、これにより、すべてのジャンクションポイント、アクセス許可、および属性を維持しながら、すべてがC:\StuffからD:\Stuffに移動します。

しかし、私が取った「ショートカット」があります。これらすべてに煩わされる代わりに、C:の完全な ドライブイメージ を作成し、それをD:に復元しました(明らかに、D:にファイルがないことを確認します。上書きされます)。 Macrium Reflect FreeDrive Image XML など、これを行うためのフリーソフトウェアがあります。

次に、必要な追加データをD:にコピーし、上記のステップ4にスキップしました。その後、ドライブに不要なWindowsファイルをすべて削除しました(この部分にはUbuntu USBスティックを使用する必要がありました)。

すべてが機能しています!

1
CJxD