Windows 7のC:\UsersをD:\Usersに移動してみた

バックアップを簡単にするためにWindowsのC:\UsersをD:\Usersに移すことにした。

ネット上ではいろいろな解説があるけど、新たにダミーのアカウントを作ったりと、ちょっと不必要に面倒なものが多いので、簡単にまとめてみる。

必要なもの:Windows 7の起動ディスク。

まず、念のため復元ポイントを作っておく。次に、Windowsの起動ディスクでPCを起動し、システム・リカバリーのコマンドプロンプトを開く。

この際、Windows起動ディスクのシステムがx:、HDD上のbootドライブがc:、データードライブがd:という前提で話を進める。このドライブ構成は、起動ディスクやHDDの構成で変わるので、作業をする前に前記の3つのドライブがどのドライブレターにアサインされているかは必ずチェックする。例えば、うちの別のPCの場合、Windows起動ディスクのシステムがx:、HDD上のbootドライブがd:、データードライブがe:であった。

次のコマンドでC:\UsersをD:\Usersにコピーする。
robocopy /copyall /mir /xj c:\Users D:\Users

この際、シンボリックリンクやジャンクションはコピーされないので、注意。

ここで一度HDDからWindowsを起動し、コマンドラインでコピーされなかったシンボリックリンクやジャンクションを、以下のように復元。

mklink /d "d:\Users\All Users" C:\ProgramData
mklink /j "d:\Users\Default User" d:\Users\Default
mklink /j "D:\Users\Default\Application Data" "D:\Users\Default\AppData\Roaming"
mklink /j "D:\Users\Default\Cookies" "D:\Users\Default\AppData\Roaming\Microsoft\Windows\Cookies"
mklink /j "D:\Users\Default\Local Settings" "D:\Users\Default\AppData\Local"
mklink /j "D:\Users\Default\My Documents" "D:\Users\Default\Documents"
mklink /j "D:\Users\Default\NetHood" "D:\Users\Default\AppData\Roaming\Microsoft\Windows\Network Shortcuts"
mklink /j "D:\Users\Default\PrintHood" "D:\Users\Default\AppData\Roaming\Microsoft\Windows\Printer Shortcuts"
mklink /j "D:\Users\Default\Recent" "D:\Users\Default\AppData\Roaming\Microsoft\Windows\Recent"
mklink /j "D:\Users\Default\SendTo" "D:\Users\Default\AppData\Roaming\Microsoft\Windows\SendTo"
mklink /j "D:\Users\Default\Start Menu" "D:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu"
mklink /j "D:\Users\Default\Templates" "D:\Users\Default\AppData\Roaming\Microsoft\Windows\Templates"
mklink /j "D:\Users\[ユーザー名]\Application Data" "D:\Users\[ユーザー名]\AppData\Roaming"
mklink /j "D:\Users\[ユーザー名]\Cookies" "D:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\Cookies"
mklink /j "D:\Users\[ユーザー名]\Local Settings" "D:\Users\[ユーザー名]\AppData\Local"
mklink /j "D:\Users\[ユーザー名]\My Documents" "D:\Users\[ユーザー名]\Documents"
mklink /j "D:\Users\[ユーザー名]\NetHood" "D:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\Network Shortcuts"
mklink /j "D:\Users\[ユーザー名]\PrintHood" "D:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\Printer Shortcuts"
mklink /j "D:\Users\[ユーザー名]\Recent" "D:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\Recent"
mklink /j "D:\Users\[ユーザー名]\SendTo" "D:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\SendTo"
mklink /j "D:\Users\[ユーザー名]\Start Menu" "D:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\Start Menu"
mklink /j "D:\Users\[ユーザー名]\Templates" "D:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\Templates"

C:\ProgramDataもd:\に移動したい場合は、適宜対応する(個人的にはユーザーデータではないので移動する必要はないと思うけど)。他がジャンクションなのに\Users\All Usersだけシンボリックリンクな理由は分からない。Windowsの設定が始めからそうなので、そのまま同じようにシンボリックリンクにしただけ。

Windowsの起動ディスクでPCを起動し、c:\Usersをどうにかする。削除したい場合は、
rmdir /s /q c:\users

削除しないでしばらく様子を見たい場合は、
ren c:\users users.org
として、残しておけばいい。

最後に、次のようにc:\Usersのジャンクションを設定。
mklink /j c:\Users d:\Users

後は再起動。

注意点は、ジャンクションを張る時。何故、Windows起動ディスクで起動し、HDDのWindowsで再起動し、最後にWindows起動ディスクで起動するのかということと関連している。頭の中でごちゃごちゃしなければ、すべて一度にWindows起動ディスクのコマンドプロンプトでできてしまう。シンボリックリンクにしろジャンクションにしろ、実態は単にターゲットへのポインターなので、最後のジャンクションを張るときに仮にHDDで起動した場合のデータドライブがd:で、Windows起動ディスクで起動した場合のデータドライブがe:であっても、ターゲットにはd:ドライブを指定しなければいけない。ジャンクションやシンボリックリンクが正しく間違えずに張れるようにいちいち起動しなおしているだけで、頭の中でどうしたらいいかを理解していれば、いちいち何度も起動しなおす必要はない

最後のジャンクションを張るとこをスキップして、レジストリを弄って強制的にc:\Usersをd:\Usersに書き換えてる人もいるみたいだけど、単にc:\Usersの一行を表示させたくないという自己満足的な行為であって、c:\Usersを移動させるという実質的本質的な部分とはあまり関係なのではないかと個人的には思う。トラブルを避けたいのであれば、レジストリ上の全てのc:\Usersをd:\Usersに書き換えるより、単にジャンクションを作るほうが、完全で手間もかからない。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: