PC Windows

2 台の各ハードディスクに Windows XP と 8.1 がインストールされたデュアルブートから 1 台外して Windows 8.1 だけで起動できるようにするの続き

2016/08/14

ハードディスク

前回の記事の続きです。

前回の記事で PC を起動できるところまで出来ましたが、元のシステムパーティションの Boot フォルダーには Windows メモリ診断のプログラムと思われる memtest.exe があったり bg-BG, cs-CA ・・・ ja-JP ・・・といった言語ごとのフォルダーがあって、中には bootmgr.exe.mui とフォルダーによっては memtest.exe.mui というファイルがあったりするのですが、新しく作ったシステムパーティションは bootmgr と Boot\BCD の2つのファイルしかなくて(正確にはスタートアップ修復のログファイルと System Volume Information フォルダもある)、それらが無い状態が気持ち悪いので、元のシステムパーティションと同じ状態にすることと Windows RE をシステムパーティションにインストールすることを行います。

拡張子 mui はマルチリンガルユーザーインターフェースの略で bootmgr.exe.mui なら bootmgr.exe を実行したときに複数の言語で表示するために必要なファイルです。

bootmgr を削除

元のシステムパーティションの起動に関係していると思われるファイルはケーブルを抜く前にもう一つのハードディスクにコピーしておいたのでその中の bootmgr と新しいシステムパーティションの bootmgr を比べたらはタイムスタンプが古くファイルサイズが異なっていました。

新しいシステムパーティションの bootmgr は Windows 8.1 がインストールされたパーティションのルートに bootmgr があったのでそれをコピーしたものです。

元のとは違う bootmgr を使っているというのはなんだか気持ちが悪いので削除することにしました。

Windows が起動している状態で削除するのは抵抗があったので、回復ドライブから起動してコマンドプロンプトで次のコマンドで削除しました。

attrib -r -s -h c:\bootmgr

このコマンドはシステムパーティションのルートにある bootmgr の読み取り専用属性、システムファイル属性、隠しファイル属性を解除します。

c: は今回新しく作ったシステムパーティションです。

c: は環境によって変わります。

del c:\bootmgr

このコマンドはシステムパーティションのルートにある bootmgr を削除します。

c: 等のドライブ文字は、Windows を起動している時とは、変わっているので注意が必要です。

どのパーティションがどのアルファベットになっているか確認するには dir c:\ を実行するとボリュームラベルとファイル・フォルダーが分かるので c の部分を a、b、c、d、e、f・・・ と変えていって一つずつ確認していきます。

a と b は通常はフロッピーディスクに割り当てられてフロッピーディスクが無い場合は割り当てられないのですが、 念のため確認しておきます。

この状態で試しに再起動してみました。

当然起動しませんでした。

4 回目のスタートアップ修復を実行

4 回目のスタートアップ修復を実行しました。

実行する際に今までの 3 回とはちょっと違うことが起きました。

今までは、スタートアップ修復を選んだらそのまま「・・・修復しようとしていいます。」という画面になっていたのですが、今回はスタートアップ修復を選んだら、どの Windows を修復するか Windows を選択する画面が表示されました。

といっても、選択する画面には 1 つの Windows が表示されているだけです。

それで、それを選んだら修復作業に入りました。

スタートアップ修復は 1 分もかからないで終わります。

今までの 3 回は、「スタートアップ修復で PC を修復できませんでした。」と表示されて終わっていたのですが、今回は PC が自動で再起動しました。

再起動後、正常に Windows 8.1 が起動、どうやらスタートアップ修復が成功したようです。

元のシステムパーティションのファイルと比較

元のシステムパーティションのファイルと比較したら、今度は、bootmgr のタイムスタンプは同じでファイルサイズも同じでした。

Boot フォルダーの中を比較したら、今度は元のシステムパーティションと同じように、memtest.exe もあり、bg-BG, cs-CA ・・・ ja-JP ・・・といった言語ごとのフォルダーもあって、中には bootmgr.exe.mui とフォルダーによっては memtest.exe.mui というファイルもあり、元のシステムパーティションと同じようになりました。

Windows RE をシステムパーティションに移動する

Windows RE (Recovery Environment)(環境回復)は、Windows が起動しないなどのトラブルを修復するために使うツールです。

今回の PC は Windows RE は、 Windows 8.1 がインストールされているパーティションに既にインストールされています。

BitLocker でパーティションを暗号化する場合は Windows RE は暗号化しないパーティションにインストールする必要があります。

可能性は低いがもしかしたら将来 BitLocker を使うかもしれない、という理由で Windows がインストールされているパーティションとシステムパーティションをわざわざ別にしたので、Windows RE をシステムパーティションに移動します。

参考サイト

次の Microsoft のサイトを参考にしてインストールしました。

Windows RE の展開 - Windows 10 hardware dev

ほとんどこのサイトに載っている通りに行いましたがちょっと違う事をした部分もあります。

システムパーティションに Winre.wim を設置

ここからは基本的にコマンドプロンプトでコマンドを入力していく作業になります。

Windows を起動した状態のコマンドプロンプトで作業していいのかどうか分からなかったので、回復ドライブから起動してそのコマンドプロンプトで作業を行いました。

ここからは参考サイトに合わせて S: がシステムパーティション、W: が Windows がインストールされているパーティションとして書きます。

次のコマンドを実行してシステムパーティションにフォルダを作ります。

mkdir S:\Recovery\WindowsRE

このコマンドはシステムパーティションのルートに Recovery というフォルダを作成しさらにその中に WindowsRE というフォルダを作成します。

次に、参考サイトでは、W:\Windows\System32\Recovery から Winre.wim をコピーしているのですが、今回の PC にはその場所に Winre.wim が無かったので、W:\Recovery\WindowsRE からコピーしました。

xcopy /h W:\Recovery\WindowsRE\Winre.wim S:\Recovery\WindowsRE

このコマンドの /h は隠しファイルやシステムファイもコピーするためのオプションです。

reagentc で Windows RE の場所を設定

参考サイトでは、C:\Windows\System32\Reagentc /setreimage /path S:\Recovery\WindowsRE /target W:\Windows となっているのですが、 C: が何のパーティションを表しているのか説明を見つけられなかったのですが、 Reagentc そのものがある場所を書けばよいので Windows がインストールされているパーティションである W: と同じものを書けばよいです。

参考サイトの通り次のコマンドを実行

C:\Windows\System32\Reagentc /setreimage /path S:\Recovery\WindowsRE /target W:\Windows

しかし「Windows RE は既に有効になっています。」というメッセージが出て、設定できない模様。

現在設定されている状態を次のコマンドで確認

C:\Windows\System32\Reagentc /info /target W:\Windows

Windows RE の場所は Windows がインストールされているパーティションに設定されていました。

Windows RE の場所は

\\?\GLOBALROOT\device\harddisk0\partition0\Recovery\WindowsRE

と、物理的な場所で表示されます。

次のコマンドを実行してヘルプを表示

C:\Windows\System32\Reagentc /?

/disable で無効にできることを確認、次のコマンドで /disable の詳しいヘルプを表示

C:\Windows\System32\Reagentc /disable /?

ヘルプに「このコマンドは、実行中のオペレーティング システムからのみ使用できます。」とあったので、 PC を再起動して Windows 8.1 を起動

コマンドプロンプト (管理者)で次のコマンドを実行して無効化

reagentc /disable

Windows が起動している状態ならパスが通っているので最初の C:\Windows\System32\ は省略

このまま次のコマンドを実行しても良かったかもしれないが念のため回復ドライブから起動して最初のコマンドと同じ次のコマンドを実行

C:\Windows\System32\Reagentc /setreimage /path S:\Recovery\WindowsRE /target W:\Windows

今度は成功。

PC を再起動して Windows 8.1 を起動

コマンドプロンプト (管理者)で次のコマンドを実行して有効化

reagentc /enable

次のコマンドで設定確認

reagentc /info

無事、Windows RE が目的の場所に設定されたのを確認しました。

あとがき

BitLocker は使わないということでやっていればこの半分以下の手間で済んだのに、もしかしたら将来 BitLocker を使うかもしれないということでやり始めたらこんな面倒なことになってしまいました。

一度覚えてしまえばそれほど面倒でもないかもしれないですが、今回は初めてで調べながらなので面倒でした。

Windows パーティション、システム パーティション、回復パーティションのキャプチャと適用 - Windows 10 hardware dev

後からこのサイトの説明を見て思ったのですが

W:\Windows\System32\bcdboot W:\Windows /s S:

このコマンド一つで bootrec とかスタートアップ修復でやっていたことを一発でやってくれるんじゃないかという感じがします。

試してみていないので分からないですが次の機会があれば(あるのか?)試行してみたいです。

今にして思えば、あそこはあーしていればよかった、ここはこうしていればよかったっていうのがあるのですが。

次また同じようなことをする機会はあまり無さそうなので、もうこれ以上これについて深く考えるのはとりあえず止めます。

-PC, Windows