HDDからWinPEをブートする

ここ1週間ほどモンモンと悩んでいたのはWindows PEをリムバーブルディスク(もしくはUSBメモリ)からブートするのができなかったこと。

HDDからのWinPEのブートは2段階で試してみた。

内蔵HDDからのブート ⇒それ程問題なく実現
外部HDD(もしくはUSBメモリ)からのブート ⇒これをやりたいが未実現

WinPEの性格から考えると外部HDDやUSBメモリに格納しておいて、トラブル時にマシンに接続してそこからブート、修復作業をするというのが一番使い勝手がいいかと思う(USBブートできないマシンではCDブートかPXEブートになるが。)そこで、WinPEをHDからブートする方法を模索してみた。

内蔵HDDから立ち上げる

先ずは、CDからWinPEを立ち上げて、内蔵HDDにWinPEを「インストール」し、そこから立ち上げることから検証してみた。これは、若干の試行錯誤はあったが、WinPEnoブートシーケンスを追っていって難なく実現できた。(あとから分かったのだが、Microsoft自身もその方法を公開していた。「チュートリアル : Windows PE をハード ディスクからブートする」当たり前だが、私が試行錯誤した方法とほとんど同じだった。)

ただし、内蔵HDDからWinPEが立ち上がっても何も嬉しいことはない。WinPEマシンなんてお遊びにはいいかも知れないが使い道はない。(唯一、カスタマイズしたWinPE環境を構築してイメージファイルを作成するのには使えるかも。RAMディスクベースのWinPEでは直接ディスクイメージを作成できないので。)

余り役に立たないかも知れないが、一応、忘れないためにメモしておく。先ずは、潰しても構わないHDDを持ったマシンを使ってCDブートでRAMディスクベースのWinPEを立ち上げて、そこで作業する。(以下、コマンドの手順だけを書いて、特に必要なければ、マシンからのメッセージは書かない。)

X:\windows\system32>diskpart			⇒HDDを初期化するためにdiskpartを起動する
DISKPART> lis dis					⇒HDDのリストを確認
DISKPART> sel dis 0				⇒WinPEをインストールするHDDを指定
DISKPART> cle					⇒HDDの初期化
DISKPART> cre par pri				⇒プライマリ・パーティションの作成
DISKPART> for fs=ntfs label="WINDOWS_PE" compress	⇒フォーマット
DISKPART> act					⇒パーティションアクティベーション
DISKPART> ass letter=C				⇒Cドライブとして割り当て
DISKPART> exi

X:\windows\system32>D:				⇒WinPEのCDドライブへ移行
D:\>imagex /apply SOURCES\BOOT.WIM 1 C:\		⇒WinPEのファイルシステムをHDDへ展開
D:\>copy BOOTMGR C:\bootmgr				⇒bootmgrをHDDへコピー
D:\>mkdir C:\Boot					⇒Bootフォルダの作成

D:\>C:
C:\>bcdedit /createstore C:\Boot\BCDBCDの新規作成
						⇒ローダエントリの作成
C:\>bcdedit /store C:\Boot\BCD /create /d "Windows PE" /application OSLOADER
エントリ {87654321-1111-2222-3333-0123456789ab} は正常に作成されました。
C:\>bcdedit /store C:\Boot\BCD /set {87654321-1111-2222-3333-0123456789ab} device boot
C:\>bcdedit /store C:\Boot\BCD /set {87654321-1111-2222-3333-0123456789ab} osdevice boot
C:\>bcdedit /store C:\Boot\BCD /set {87654321-1111-2222-3333-0123456789ab} systemroot \Windows
C:\>bcdedit /store C:\Boot\BCD /set {87654321-1111-2222-3333-0123456789ab} path \Windows\System32\winload.exe
C:\>bcdedit /store C:\Boot\BCD /set {87654321-1111-2222-3333-0123456789ab} detecthal Yes
C:\>bcdedit /store C:\Boot\BCD /set {87654321-1111-2222-3333-0123456789ab} winpe Yes
						⇒ブートマネージャの登録
C:\>bcdedit /store C:\Boot\BCD /create {bootmgr} /d "Boot Manager"
C:\>bcdedit /store C:\Boot\BCD /displayorder {87654321-1111-2222-3333-0123456789ab}
						⇒確認
C:\>bcdedit /store C:\Boot\BCD /enum all

Windows ブート マネージャ
                                                              • -
identifier {bootmgr} description Boot Manager displayorder {87654321-1111-2222-3333-0123456789ab} Windows ブート ローダー
                                                              • -
identifier {87654321-1111-2222-3333-0123456789ab} device boot path \Windows\System32\winload.exe description Windows PE osdevice boot systemroot \Windows detecthal Yes winpe Yes ⇒一応、ディスクのチェック C:\>chkdsk c: : ファイル システムのチェックが終了しました。問題は見つかりませんでした。 3948415 KB : 全ディスク領域 797076 KB : 8745 個のファイル 5612 KB : 2194 個のインデックス 0 KB : 不良セクタ 33343 KB : システムで使用中 21792 KB : ログ ファイルが使用 3112384 KB : 使用可能領域 4096 バイト : アロケーション ユニット サイズ 987103 個 : 全アロケーション ユニット 778096 個 : 利用可能アロケーション ユニット ログに記録されたメッセージを、状態 50 のイベント ログへ転送できませんでした。 C:\>wpeutil reboot ⇒リブート

これでHDDはらWinPEがブートできるようになる。

外部HDDから立ち上げる

USB経由で外部HDDやUSBメモリ(以下、外部メディア)からブートする検証をした。
外部メディアへのWinPEのインストールは、上の内蔵HDDへのインストールと全く同じ手順でOK。

ブートすると、ブートローダが起動してカーネルが起動するところまでは進むのだが、ブルースクリーンが出てきてしまった。「STOP: 0x0000007B」というメッセージが出ている。

 A problem has been detected and windows has been shut down to prevent damage
 to your computer.

 If this is the first time you've seen this stop error screen,
 restart your computer. If this screen appears again, follow
 these steps:

 Check for viruses on your computer. Remove any newly installed
 hard drives or hard drive controllers. Check your hard drive
 to make sure it is properly configured and terminated.
 Run CHKDSK /F to check for hard drive corruption, and then
 restart your computer.

 Technical information:

 *** STOP: 0x0000007B (0x80399BB0, 0xC0000034, 0x00000000, 0x00000000)

ネットで調べてもそれらいしい情報は殆どないし、MSのホームページでも該当しそうな次の2つしかなかった。

  1. STOP 0x0000007B::INACCESSIBLE_BOOT_DEVICE "USB CD-ROMデバイスを使って、WinPE CD-ROM...."
  2. 使用する Windows PE 2.0システムとAMD Barcelonaプロセッサを再起動するとき....

しかし、1番目のパッチはどうもPEに直接当てるものではないし、また、随分古い。2はAMDのBarcelonaプロセッサ(クアッドコアOpteron)で発生するらしいが、InspironはAMDだがBarcelonaではないので、違うっぽし、他のIntelマシンでも同様の現象がでたので、これではないだろう。念のためにPEのイメージファイル(WINPE.WIM)にパッチを当てようと試みたが、

C:\Temp>peimg /import=Windows6.0-KB942813-v3-x86.cab C:\winpe_x86\mount
Windows 用プレインストール環境イメージ セットアップ ツール
Copyright (C) Microsoft Corporation. All rights reserved.

パッケージ C:\Temp\Windows6.0-KB942813-v3-x86.cab を追加しています

このパッケージは、指定された Windows PE イメージには適用されません。Windows PE専用
に設計されたオプションのコンポーネント パッケージまたは言語パックをインポート
していることを確認してください。このエラーは、パッケージが、別のアーキテクチャま
たは別のバージョンの Windows PE 用のものである場合に発生することもあります。

PEIMG は、状態コード 0x800f081e で操作を完了できませんでした。

というメッセージを出してパッチが当たらない。

ブートローダで無事カーネルは動き出しているようで、このメッセージはカーネルが(UNIX風に言えば)パニックを起こしていることになる。ひょっとするとWindows系のカーネルはUSBデバイスからのブートができないのだろうか? ライセンスにうるさいMicrosoftのことだから、WindowsUSBメモリとかに入れて、あちこちのマシンでブートされてはたまらない、とか考えているのかも。内蔵HDD(=つまりIDEインタフェース)では問題なく立ち上がるが、同じHDDをUSBで外付け接続すると立ち上がらない。

ということで取りあえずは断念。まぁ、CDブートとPXEブートはできるので、まぁいいか、ということにした。