本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

Windows10 で x86/x64 インストールディスクをまとめる その2

以前のチャレンジでは UEFI に対応できていない状態だったので、 UEFI 対応のインストールディスクに出来ないかをチャレンジしてみました。
まずは USB メモリに 32bit, 64bit どちらの UEFI からでも使えるようにデータを構築したいと思います。 ただ多くの環境では 64bit UEFI のため、 32bit のほうは出番が少ないと思います。
たまに 32bit UEFI を搭載している場合があるので、そのときのことを考慮しなければ、 UEFI は 64bit のみ、と割り切ると作業が楽になるかもとは思います。

準備

それぞれのインストールディスクから中身をコピーしておきます。
とりあえず Fドライブに 32bit のディスクが、 Gドライブに 64bit のディスクがセットされているとして、 d:\work ディレクトリ以下にコピーするコマンドは以下のようになります。

robocopy /V /E /A-:R f: d:\work\x86
robocopy /V /E /A-:R g: d:\work\x64

インストールメディアとして USB メモリを FAT32 フォーマットで使う場合には、各 sources フォルダの中の install.wim ファイルが 4GB を超えていないか注意する必要があります。
超えている場合には、イメージを分割しておく必要があります(分割については前の記事の split-image を参照してください)。

UEFI 起動に対応したブートエントリの作成

USB メモリが刺さっているドライブを H ドライブとします。
まずはこのメモリに先ほどコピーした x86, x64 フォルダの内容をコピーします。

robocopy /V /E d:\work h:

管理者権限コマンドプロンプトを開いて、 BCD の新規作成を行います。
管理者権限 Windows PowerShell では一部の作業に失敗するため、以降の内容をそのままやるのであればコマンドプロンプトで操作してください。

x86\efi フォルダを h:\ にコピーします。

c:\> cd /d h:
h:\> xcopy x64\efi H:\

そして x86\efi\boot より bootia32.efi ファイルを、 x64\efi\boot より bootx64.efi ファイルを h:\efi\boot フォルダの中へコピーします。
efi\microsoft\boot\bcd ファイルを削除して新規に作成を行います。

c:\> set BCDSTORE=h:\efi\microsoft\boot\bcd
bcdedit /createstore %BCDSTORE%
bcdedit /store %BCDSTORE% /create {bootmgr}

x86 版のエントリ作成

boot 用の RAMDISK の設定を以下のようにして行います。最後に作成したエントリの GUID を確認するために /enum を実行しています。

c:\> bcdedit /store %BCDSTORE% /create /device
エントリ {0488365a-f380-11e7-a366-000c298d9c66} は正常に作成されました。

c:\> set RAMGUID={0488365a-f380-11e7-a366-000c298d9c66}
bcdedit /store %BCDSTORE% /set %RAMGUID% ramdisksdidevice boot
bcdedit /store %BCDSTORE% /set %RAMGUID% ramdisksdipath \x86\boot\boot.sdi
bcdedit /store %BCDSTORE% /enum all

デバイス オプション
--------------------------------
identifier              {0488365a-f380-11e7-a366-000c298d9c66}
ramdisksdidevice        boot
ramdisksdipath          \x86\boot\boot.sdi
c:\> bcdedit /store %BCDSTORE% /create /d "Windows10 setup x86" /application osloader
エントリ {67e792f9-f380-11e7-a366-000c298d9c66} は正常に作成されました。

c:\> set ENTRYGUID={67e792f9-f380-11e7-a366-000c298d9c66}
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% device ramdisk=[boot]\x86\sources\boot.wim,%RAMGUID%
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% osdevice ramdisk=[boot]\x86\sources\boot.wim,%RAMGUID%
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% path \Windows\system32\boot\winload.efi
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% systemroot \Windows
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% detecthal Yes
c:\> bcdedit /store %BCDSTORE% /displayorder %ENTRYGUID% /addlast

x64 版のエントリ作成

x86 版と同様に作成を行います。 注意するポイントはいくつかのパスが x64 になっていることと、参照する GUID を間違えないようにすることです。

c:\> bcdedit /store %BCDSTORE% /create /device
エントリ {a65b3490-f382-11e7-a366-000c298d9c66} は正常に作成されました。

c:\> set RAMGUID={a65b3490-f382-11e7-a366-000c298d9c66}
bcdedit /store %BCDSTORE% /set %RAMGUID% ramdisksdidevice boot
bcdedit /store %BCDSTORE% /set %RAMGUID% ramdisksdipath \x64\boot\boot.sdi
c:\> bcdedit /store %BCDSTORE% /create /d "Windows10 setup x64" /application osloader
エントリ  {ca9a80b4-f382-11e7-a366-000c298d9c66} は正常に作成されました。

c:\> set ENTRYGUID= {ca9a80b4-f382-11e7-a366-000c298d9c66}
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% device ramdisk=[boot]\x64\sources\boot.wim,%RAMGUID%
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% osdevice ramdisk=[boot]\x64\sources\boot.wim,%RAMGUID%
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% path \Windows\system32\boot\winload.efi
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% systemroot \Windows
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% detecthal Yes
c:\> bcdedit /store %BCDSTORE% /displayorder %ENTRYGUID% /addlast

UEFI ブートエントリの動作確認

作成したデータの動作確認を行います。実機で UEFI 32bit と 64bit のものを持っているのであればそれを使うのがいいと思います。
仮想マシンで試す場合には、 VMware Workstation 12 Player あたりで確認するのがやりやすくてよいです。

近年の VMware では、仮想マシンの起動に uEFI を選択可能です。
たとえば Windows10 の仮想マシンを OS インストール無しの状態で作成します。
そして、 vmx ファイルをテキストエディタで開き、末尾に以下のように設定を追記すると UEFI 起動となります。

firmware="efi"

このとき、仮想マシンの設定が x64 のものであれば、 UEFI も 64bit に、 x86 であれば UEFI も 32bit に切り替わって動いてくれるようです。
この挙動を利用して、先ほど作成したデータの確認をします。

USB メモリを仮想マシンに接続されるようにして、仮想マシンを起動します。ESC キーを押すなどして VMware の BootManager の画面にします。
ここで EFI USB Device を選択すると USB メモリから起動することができます。

今までの設定がうまく出来ていれば、以下のようにどちらを起動するかのブートメニューが出てくるはずです。


これで、現在の設定に合った方を選択すれば見慣れたインストールの画面が出てくると思います。
違う方を選ぶと、インストール画面を見る前に、クラッシュする画面をみることが出来るかと思います。

レガシー BIOS ブートへの対応

x86 フォルダ内にある bootmgr ファイルを H:\ にコピーします。

c:\> copy h:\x86\bootmgr H:\

以下のようにしてブートセクタを書き込みます。

bootsect /nt60 h: /mbr /force
c:\> set BCDSTORE=h:\boot\bcd
c:\> mkdir h:\boot
c:\> bcdedit /createstore %BCDSTORE%
c:\> bcdedit /store %BCDSTORE% /create {bootmgr}

x86 版のエントリ作成

UEFI 版とほぼ同じ内容になります。 注意するポイントはいくつかのパスが x86 になっていることと、参照する GUID を間違えないようにすることです。
あとは winload.exe になっていることでしょうか。

c:\> bcdedit /store %BCDSTORE% /create /device
エントリ {3d87f110-f390-11e7-a366-000c298d9c66} は正常に作成されました。

c:\> set RAMGUID={3d87f110-f390-11e7-a366-000c298d9c66}
c:\> bcdedit /store %BCDSTORE% /set %RAMGUID% ramdisksdidevice boot
c:\> bcdedit /store %BCDSTORE% /set %RAMGUID% ramdisksdipath \x86\boot\boot.sdi
c:\> bcdedit /store %BCDSTORE% /create /d "Windows10 setup x86" /application osloader
エントリ  {5b7b7f37-f390-11e7-a366-000c298d9c66} は正常に作成されました。

c:\> set ENTRYGUID={5b7b7f37-f390-11e7-a366-000c298d9c66}
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% device ramdisk=[boot]\x86\sources\boot.wim,%RAMGUID%
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% osdevice ramdisk=[boot]\x86\sources\boot.wim,%RAMGUID%
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% path \Windows\system32\boot\winload.exe
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% systemroot \Windows
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% detecthal Yes
c:\> bcdedit /store %BCDSTORE% /displayorder %ENTRYGUID% /addlast

x64 版のエントリ作成

UEFI 版とほぼ同じ内容になります。 注意するポイントはいくつかのパスが x64 になっていることと、参照する GUID を間違えないようにすることです。
あとは winload.exe になっていることでしょうか。

c:\> bcdedit /store %BCDSTORE% /create /device
エントリ {0f24a28b-f38c-11e7-a366-000c298d9c66} は正常に作成されました。

c:\> set RAMGUID={0f24a28b-f38c-11e7-a366-000c298d9c66}
c:\> bcdedit /store %BCDSTORE% /set %RAMGUID% ramdisksdidevice boot
c:\> bcdedit /store %BCDSTORE% /set %RAMGUID% ramdisksdipath \x64\boot\boot.sdi
c:\> bcdedit /store %BCDSTORE% /create /d "Windows10 setup x64" /application osloader
エントリ  {3e18f924-f38c-11e7-a366-000c298d9c66} は正常に作成されました。

c:\> set ENTRYGUID={3e18f924-f38c-11e7-a366-000c298d9c66}
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% device ramdisk=[boot]\x64\sources\boot.wim,%RAMGUID%
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% osdevice ramdisk=[boot]\x64\sources\boot.wim,%RAMGUID%
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% path \Windows\system32\boot\winload.exe
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% systemroot \Windows
c:\> bcdedit /store %BCDSTORE% /set %ENTRYGUID% detecthal Yes
c:\> bcdedit /store %BCDSTORE% /displayorder %ENTRYGUID% /addlast

BIOS ブートエントリの動作確認

VMware で確認する場合には、 vmx ファイルの firmware の行を消して確認します。
また、 レガシー BIOS ブートの場合では、 USB デバイスからの起動を確認することが出来ないので、擬似的な確認になります。

Plop Boot Manager というものを用いて確認します。
配布ページよりダウンロードします。
ダウンロードしたファイルの中にある iso ファイルを VMware Workstation 12 Player にセットして起動させ、起動メニューより USB を選択します。

そうやって起動させると、うまく出来ていれば以下のように BIOS でのブート選択画面が表示されると思います。

まとめ

UEFI からも BIOS からも起動可能な USB メモリでのインストールメディアを作ることが出来ました。
気になる点は多少あるのですが、その1つは BIOS 版が Loading files に時間が長くかかっているような気がすることです。
もう1つは、 OS インストールに失敗する”とき”があることでしょうか。まだ1度くらいしか症状を見ていないのですが、リトライしたらうまく動いてしまったので原因不明です。

フォルダを分けて各 OS を格納するという方法がこれで出来たと言うことは、同じようにしてさらに多くの OS も1つの USB メモリに入れることが可能であるとも考えられます。
USB メモリは光学メディアに比べて高速&大容量なので、複数の OS をまとめて便利に使えるのではと思っています。

追記

VMware Workstation Player ではうまく動いていましたが、実機でチャレンジしてみるとうまく動かないケースがありました。

BIOS では x86, x64 どちらでもインストール画面まで到達できました。しかし UEFI では、ビット数が合っている状態にもかかわらず、インストール画面の手前で BSoD という結果になってしまいました。
何か設定が足りていないか間違っているかしている模様です。「ここが違う!」と分かる方、是非コメントで教えて頂ければ幸いです。

PC環境設定日記
すらりんをフォローする
すらりん日記

コメント

タイトルとURLをコピーしました