私の個人用ノート PC はメモリが 4GB なのですが、もともと Vista の 32 ビット版が入っていたこともあり、Windows 7 の 32 ビット版へインプレースアップグレードを行って使っていました(RC 以前は別パーティションで、RTM したのでアップグレードしました)。 というのもメーカーが 64 ビット版のドライバをサイトに載せてないので、探してくるのが面倒だったためですが・・・
先週末に各所からドラバをかき集めて、Windows 7 64 ビットがまともに動くようになりました。 しかし、もともとテスト用にデータで使っていたパーティションを縮小して、40GB 確保した領域に入れていた事もあり、かなり窮屈です。
データ領域をバックアップして開放し、後ろの x64 領域を拡張できるか試してみましたが、やっぱりだめですね。 案の定拡張できるのは後ろの方向のみです。 x64 がちゃんと動いているので、x64 をメインとして、x86 は VHD ブートか別パーティションで念のため残すだけにとどめようと思います(積極的に使わない)。
#本当は SSD 購入したときにやろうと思っていたのですが、Trim ファームウェアがまだだったり、在庫がなかったりともう少し待つしかなさそうなので、とりあえず HDD でパーティション変更を行いたいと思います。
変更後のプラン
システムパーティション: 300MB (ブートローダーと BitLocker をオンにしたときに WinRE が入れる大きさを確保します)
ブートパーティション: 77GB (x64 の Windows 7 システムを入れ、x86 は VHD の状態で入れられるとよいのですが・・・)
フリーパーティション: 200GB ほど
OEM パーティション: 変更なし
SSD は 80 GB をターゲットに考えているので、まずはこれで容量的に大丈夫かどうかを HDD 上に設定しようと思います。
手順
注意: 始める前に EFS で暗号化してあるフォルダがある場合意は、WinRE 上の Robocopy で必ず失敗しますので、暗号化を解除しておきましょう(または /EFSRAW オプションを忘れずにつける事)。
1. システムイメージバックでシステムイメージをバックアップします。
2. Windows 7 のインストールディスクなどから、システム回復オプションを起動します。
3. コマンドプロンプト を開きます。
diskpart" と入力し、diskpart を起動します。
select disk 0 と入力し、0 番目の内臓ディスク を選択します。
list partition と入力すると、パーティションの情報が表示されます。 この例では、
Partition 1 Primary 40 GB
Partition 0 Extended 250 GB
Partition 3 Logical 41 GB
Partition 2 OEM 8001 MB
パーティションの番号はばらばらですが、すべてオフセット順に並んでします。
最初の 3 つのパーティションを次のコマンドで順に削除していきます。
select partition 1
delete partition
select partition 3
delete partition
select partition 0
delete partition
これで、Partition 2 だけが残りました。
次はパーティションの作成を次のコマンドで順にしていきます。
create partition primary size=300
format fs=ntfs label=”boot” quick
active
assign letter = s:
create partition primary size=79700
format fs=ntfs label=”Windows 7” quick
assign letter = h:
ここでは、便宜上新しい Windows 7 用領域を h: とします。
ここで、list partition を行うと次のようになっています。
Partition 1 primary 300MB
Partition 3 primary 77GB
Partition 2 OEM 8001MB
システムイメージバックアップで取得したイメージは VHD になっていますので、それをアタッチします。 下記ではわかりやすく Win7x64.vhd としています(G: は外付け USB HDD です)。
select vdisk file=G:\Win7x64.vhd
attach vdisk
select partition 1
assign letter=i:
これで VHD のアタッチが成功しました。 ここではアタッチした VHD の\中身は i: としています。
ここで気がつかれた方もいると思いますが、これができるのは Winodws 7 の WinRE からで、Vista の時にはできなかったんですね。。。なので、Complete PC バックアップで取得した内容と HDD のサイズが違っている場合には、手動でも戻す手段がなかったのですが、VHD のアタッチができるので手動復元もできるようになったわけです。
exit と入力して、diskpart を終わります。
robocopy i:\ h:\ *.* /E COPYALL /R:1 /W:1 と入力して、ファイルのコピーを開始します。 途中休止ファイルや、Junction 設定などはアクセスできずに無視されますが、そのままコピーが続行されます。
ここが結構時間がかかります(このときコマンドプロンプトを最小化しておくと、画面描写の負荷が少なくなるので少し早くなりますが、もっと早くしたければ /LOG を使って画面に進捗を表示しないようにしてください)。
コピーが終了したら、次のコマンドでブートエントリを s: ドライブ に作成します。
bcdboot h:\windows /s s:
4. システム回復オプションの画面から、[Restart] を押して再起動します。
再起動で Windows 7 が起動してきますので、パーティション情報を見てみると
と、予定通りの構成になっている事がわかります。 この時点で予定していたシステムイメージからのパーティション変更自体は成功ですが、いくつか問題があるので修正していきます。
5. 起動したら管理者モードでコマンドプロンプトを開きます
JUNCTION がディレクトリに変わってしまっているので、次のコマンドで直していきます。
(robocopy の段階で /XJ オプションを設定している場合は、JUNCTION フォルダはコピーされないので、その場合は作り直すだけで OK です)
attrib –s –h –r “Documents and Settings”
rd “Documents and Settings”
mklink /j “Documents and Settings” C:\users
cd c:\users
rd “All Users”
mklink /d “All Users” c:\ProgramData
rd “Default User”
mklink /j “Default User” c:\users\default
次は個々のユーザーの JUNCTION 設定を元に戻すので、cd c:\users\ユーザー名 (ユーザー名の部分) で入って、今までと同じように次のフォルダの結びつけを直します。 通常だと、default ユーザーと現在ログインしているユーザーの 2 箇所になります
<JUNCTION> Application Data [C:\Users\yukinork\AppData\Roaming]
<JUNCTION> Cookies [C:\Users\yukinork\AppData\Roaming\Microsoft\Windows\Cookies]
<JUNCTION> Local Settings [C:\Users\yukinork\AppData\Local]
<JUNCTION> My Documents [C:\Users\yukinork\Documents]
<JUNCTION> NetHood [C:\Users\yukinork\AppData\Roaming\Microsoft\Windows\Network Shortcuts]
<JUNCTION> PrintHood [C:\Users\yukinork\AppData\Roaming\Microsoft\Windows\Printer Shortcuts]
<JUNCTION> Recent [C:\Users\yukinork\AppData\Roaming\Microsoft\Windows\Recent]
<JUNCTION> SendTo [C:\Users\yukinork\AppData\Roaming\Microsoft\Windows\SendTo]
<JUNCTION> Start Menu [C:\Users\yukinork\AppData\Roaming\Microsoft\Windows\Start Menu]
<JUNCTION> Templates [C:\Users\yukinork\AppData\Roaming\Microsoft\Windows\Templates]
次は、C:\Users\ユーザー名\AppData\Local です。ここも default と 通常ユーザーの 2 つですね。
<JUNCTION> Application Data [C:\Users\Default\AppData\Local]
<JUNCTION> History [C:\Users\Default\AppData\Local\Microsoft\Windows\History]
<JUNCTION> Temporary Internet Files [C:\Users\Default\AppData\Local\Microsoft\Windows\Temporary Internet Files]
次は、C:\Users\ユーザー名\Documents です。ここも default と 通常ユーザーの 2 つですね。
<JUNCTION> My Music [C:\Users\Default\Music]
<JUNCTION> My Pictures [C:\Users\Default\Pictures]
<JUNCTION> My Videos [C:\Users\Default\Videos]
次は、C:\Users\Public\Documents です。
<JUNCTION> My Music [C:\Users\Public\Music]
<JUNCTION> My Pictures [C:\Users\Public\Pictures]
<JUNCTION> My Videos [C:\Users\Public\Videos]
次は、C:\ProgramData の中です。
<JUNCTION> Application Data [C:\ProgramData]
<JUNCTION> Desktop [C:\Users\Public\Desktop]
<JUNCTION> Documents [C:\Users\Public\Documents]
<JUNCTION> Favorites [C:\Users\Public\Favorites]
<JUNCTION> Start Menu [C:\ProgramData\Microsoft\Windows\Start Menu]
<JUNCTION> Templates [C:\ProgramData\Microsoft\Windows\Templates]
以上を直せば、完了です。
まぁ、アプリケーションの互換性のために用意されているので、Windows 7 完全対応アプリケーションだけ使っている分には大丈夫だとは思いますが・・・
次に、システム回復オプションを使えるように復活させるので、次のコマンドを入力します。
reagentc /disable
reagentc /enable
これで F8 キーを押したときにちゃんとシステム回復オプションが出てきます。
以上、移行は完了です。
ここから先は 物理 HDD 環境から VHD に入った Windows イメージが起動できるかどうかの実験です。
1. システムイメージバックアップから C ドライブに入っていたOS の VHD をローカルにコピーする
x86 の環境は VHD ブートで使おうと思っているので、システムイメージバックアップからコピーします(どれかわからなければアタッチすれば中身が見れますので確認できると思います)。
わかりやすく、Win7x86Boot.vhd とでもしておきます。
2. Bcdedit でブート構成を追加する
管理者権限で、コマンドプロンプトを開いて次のように入力します。
bcdedit /copy {default} /d "Windows 7 x86"
そうすると、エントリが作られて次のように GUID が振られます
The entry was successfully copied to {775954ed-d3cc-11de-9ab2-d439092c81ca}
後は、この GUID を使って登録していきます。
bcdedit /set {775954ed-d3cc-11de-9ab2-d439092c81ca} device vhd=[C:]\Win7x86Boot.vhd
bcdedit /set {775954ed-d3cc-11de-9ab2-d439092c81ca} osdevice vhd=[C:]\Win7x86Boot.vhd
bcdedit /set {775954ed-d3cc-11de-9ab2-d439092c81ca} detecthal on
3. 再起動して、”Windows 7 x86” を選択する
。。。。。起動アニメーションの後にブルースクリーンです。。。 メッセージをみると十分なスペースがないので、VHD が展開できないとの事。
x64で戻って空き容量を見てみると、17GB。 で、起動しようとした VHD は 19 GB。。。 まずは空き容量を増やす必要がありそうです。 うーん、80GB ぴったりにするために後 2GB 増やしてもたいして変わらないので、120GB の SSD を購入すると仮定して、41GB ほど増やすことにします。 こういうときは後ろに空き容量があると便利ですね、さくっと拡張完了です。
これでもう一度やってみます。
再起動。。。
今度はうまくいきました。ログイン画面が出てきます。
しかし、問題発生です。。。。
今度は、デバイス構成が変わったと認識されたのか、This copy of Windows is not genuine が出てきてしまいました。 Explorer も起動してこないし。。。 CTRL+SHIFT+ESC でタスクマネージャーは起動しますが、様子がおかしいですね。 Explorer を強制起動しても、コンパネも開かない。。。 どうやらこのまま VHD 起動は無理なようです。
ものは試しで、物理パーティションへの復元の方法に切り替えます。
せっかく拡張しましたが、もう一度小さくして、後ろの 40 GB のパーティションを作ります。 やはり トータル 120 GB で収まるサイズで考えています(x86 を切り捨てれば 80GB で OK)。
WinRE で起動して、VHD をアタッチして行うのははじめの方法と同じです。
今回 robocopy のスイッチに /XJ を指定して JUNCTION ポイントを無視するようにし、高速化でログファイルを使うようにし、マルチスレッド設定を行ってみました。 追加したオプションは /XJ /MT:2 /LOG:e:\copyresult.log (この例では e ドライブにログファイルを作っています)です。
結果は。。。。。うーん、直接 HDD へ展開しても VHD で起動したときと同じ現象になります。。。 Explorer が起動せずに、右下に This copy of Windows is not genuine です。
VHD ブートで使った VHD は、システムイメージバックアップからコピーしたもので、バックアップには手を加えていなかったのですが、バックアップのVHD からファイルをコピーしても x64 のようにうまくいきません。 バックアップした時点で壊れていたのか、x86 はブートローダーと同じパーティションだったのが何か関係あるのか、Vista 32 ビット版からのアップグレードだったのが関係あるのか。。。
というわけで、見事に撃沈です。
まぁ目的の x64 をメインにできたのでよかったのと、すでに x86 環境のデータは Windows 転送ツールで吸い上げて、x64 環境上の Windows Virtual PC の仮想 OS として Windows 7 x86 を動かして、そのゲスト環境に Windows 転送ツールでデータの適用を行っていたので、影響は軽微なのですが、システムイメージバックアップでうまく復元(手動でも)できなかった場合に、データだけでも簡単にリカバリーしたいという人がいると思うので、その点だけ触れておきたいと思います。
システムイメージバックアップからデータを取り出す
Windows 7 では VHD のアタッチ(接続) ができるので、それほど困りはしないのですが、探してきてファイルコピーするのはやはり面倒ということで、自動的にファイルや設定を吸い上げたいと思います。 必要なものは Windows 自動インストールキット (WAIK) の中に入っている、USMT 4.0 です。
Windows.old フォルダからの情報を吸い上げて適用したい場合には、USMT 4.0 がお勧めです
でも書きましたが、USMT 4.0 はオフライン OS からのデータ取得をサポートしているので、これを使っていきます。
i: ドライブに VHD をアタッチしたとして、e:\Mig にデータを吸い上げていきます。 EFS ファイルは暗号化されたままの状態で吸い上げます。
scanstate e:\mig /auto /offlineWinDir:i:\Windows /efs:copyraw /c
# WinRE 環境だと Temporary 領域が最低 250 MB 必要とか出てきて、続行できない場合があるので、そのときは環境変数の TEMP と TMP を空き容量の大きな場所へ変更して試してみてください(それでうまくいきました)。
後は、Windows 7 を入れなおして、その後管理者権限のコマンドプロンプトで、
loadstate e:\migs /auto /lae /lac /c
で復元すれば OK です。
あとがき
全体を通して VHD のアタッチができるようになった事で、バックアップを取ったけどそれが失敗しているとか、HDD が壊れて新しい HDD に入れ替えたら復元できないとか、Vista の時にはほぼお手上げ状態だった事が手動でいろいろできるようになっているのは、非常に頼もしいですね。
今回は x86 環境の復元には失敗してしまったので、データ収集しかできませんでしたが・・・・。 それでもオフラインデータ収集ができるようになっただけでも朗報ですよね。
注意: 行っていてわかったのですが、システム回復オプションのディスクは、x86 と x64 で違い、x86 で起動すると x64 パーティションを認識してくれません。 なので、x64 にしたら、Windows 7 の 64 ビット版のインストールディスクから システム回復オプションを起動するか、システム修復ディスクの作り直しを忘れないようにしてください。