Windows PE 2.0 めも

2021.4.11

Microsoft のドキュメントなどリンク切れ分の Web archive などを少しだけ追記。

2021.4.1 移転しました...
  • このページの旧URLは
    • http://www10.plala.or.jp/palm84/winpe.html

はてなブックマーク

2008.02.23 作成
2008.03.03 KB926044申し込みについて訂正しました。
2010.07.27 スクリーン・ショットを追加しました。
2010.08.03 バージョン紹介を追記、Windows XP SP3 インストールを改訂
2010.08.05 BootSect.exe, Windows 回復環境 を追記, 全体的に改訂
最終更新日 2012.5.5

私は管理者じゃないので管理者的使い方はぜんぜんわかっていませんが(汗)、メンテナンス用に作ってみた私的メモです。内容が偏っている悪寒(何)があります。あしからず。

Windows 7/Vista/7XP 向けメンテナンス用のブータブルCDが作成できるのであった。

※ Windows 7 ではコントロール パネルから「システム修復ディスク」(Windows RE)が作成可能なので、カスタマイズが不要ならこれ (Windows AIK) のインストールは必要ないかもしれませんが...

DVDイメージが約 1.2 - 1.6 GB、7-Zipなどで展開するとその x2、インストールして 1 GB超、作業時にに展開するファイルが 1 GB 程。ということでかなり容量喰いますので HDドライブの空き領域に注意しときませう

バージョン紹介 3

Windows PE 2.0

オンメモリ起動なので色々なブート方法が可能になりました。

  • 2006/11 公開
  • サポート - Windows XP SP2 / Vista / 2003 SP1
  • Windows Vista (Gold) ベース

2.1 も同じく XP, Vista にインストール可能なので 2.1 の方がオススメです。

  • バージョン: 1
  • ファイル名: vista_6000.16386.061101-2205-LRMAIK_JA.img
  • ファイル サイズ: 699.5 MB
http://support.microsoft.com/kb/926044/
Windows PE 2.1
  • 2008/02 公開
  • サポート - Windows XP SP2 / Vista / 2003 SP1 / 2008
  • Windows Server 2008 (Windows Vista SP1) ベース
  • バージョン: 936330AIK
  • ファイル名: 6001.18000.080118-1840-kb3aik_ja.iso
  • ファイル サイズ: 1.2 GB

XP にインストールする場合、SP2だとパッチが必要だったりするので、それらが修正済のSP3上にインストールしませう。

bootsect.exe/mbr オプションとかありますね。

Windows PE 3.0
  • 2009/08 公開
  • サポート - Vista SP1 / Windows 7 / 2003 SP2 / 2008 / 2008 R2
  • Windows Server 2008 R2 (Windows 7) ベース

peimg.exe がなくなっていたり(dism.exe に変更?)、2.xから若干変更あり。XPは非サポート。

  • バージョン: 3.0
  • ファイル名: KB3AIK_JA.iso
  • ファイル サイズ: 1.6 GB

【2011.3.2 追記】7 SP1 用が出てます。バージョンは 3.1 なのかな。何が違うか確認してませんが...ファイル名に「サプリメント」とあるので差分ファイルの様です。

  • バージョン: 3.0
  • ファイル名: waik_supplement_ja-jp.iso
  • ファイル サイズ: 1.3 GB
Windows 7 の「システム修復ディスク」

Windows 7 ではこれをインストールしなくても「システム修復ディスク」(Windows PE 3.0 + システム回復オプション)がコントロール パネルから作成できます。

また、HD内の Winre.wim + Windows AIK でカスタマイズ版 Windows RE の作成も可能です。

ドキュメント 4

まずは付属のヘルプを読むべしですが。

めちゃわかりやすい解説ページ

これは必読かな。

  1. 2.0 / 2.1
  2. 3.0 用

2.0 / 2.1

※ Windows XP SP3 / Vista 向け。

【注意!】XP SP2向け

※ XP SP3 では修正済なので不要

【追記】XP SP2用修正プログラム

KB926044申し込みは

  • Windows XP SP2用修正プログラムKB926044申し込み926044/の「修正プログラムのダウンロード」から

ntoskrnl.exeが更新されるみたい。

XP SP2上で作成したPEをVistaマシンで使うとトラブルが起こることがあるらしいですね。

これは注意しておくべきかと。Vistaのレジストリを他のWindowsで読み込む、またXP SP2上で作成したPEイメージをVista用に使うとかすると、致命的なトラブルが起こるらしいってことかな?修正パッチは申し込みが必要

PEでXP用のパーティション操作するとだめみたい?(【追記】これのパッチはXP SP2のインストールソース(インストール用CD)に統合する必要があるようです。)

これがないとwimイメージのマウントができないようです。

3.0 用

※ Windows 7 向け

PE 3.0 では peimg.exe がないので dism.exe を使いませう。

できること 5

というよりは、私ができたこと

使い方は下記ページがわかりやすい。

ネットワーク
  • net use コマンドでWindowsネットワークドライブの利用
  • ftpコマンドでファイルのダウンロード(但し、アクティブモード専用かな?)
  • 状態確認 (※ 詳細は ipconfig /all
X:\windows\system32>ipconfig

Windows IP 構成

イーサネット アダプター ローカル エリア接続:

   接続固有の DNS サフィックス . . . : HOGE-NETWORK
   リンクローカル IPv6 アドレス. . . . : xxxx::xxxx:xxxx:xxxx:xxx%2
   IPv4 アドレス . . . . . . . . . . : 192.168.1.200
   サブネット マスク . . . . . . . . : 255.255.255.0
   デフォルト ゲートウェイ . . . . . : 192.168.1.10

ルーターのDHCPサーバ機能で workgroup 名も配信しておけば楽かも。

  • 認証不要ならホスト名指定で共有一覧表示
X:\windows\system32>net view \\landisk
\\landisk の共有リソース

HDL series

共有名  タイプ  使用  コメント

-------------------------------------------------------------------------------
disk    Disk          LAN disk
ftp     Disk          LAN disk FTP
lp      Print
コマンドは正常に終了しました。
  • ネットワークドライブ割当
net use X: \\hostname\sharename /user:palm84 password

ホスト名がだめならIPアドレスで

net use X: \\192.168.1.2\sharename /user:palm84 password

DHCPサーバがない場合は手動設定

ipconfig /all で「インターフェイス名」を確認。ドラッグ+右クリックでコピー。右クリックで貼付可能。

netsh interface ip set address "ローカル エリア接続" static 192.168.0.2 255.255.255.0 192.168.0.1 1
netsh interface ip set dns "ローカル エリア接続" static 192.168.0.1
netsh interface ip set address "インターフェイス名" static IPアドレス ネットマスク ゲートウェイアドレス 1
netsh interface ip set dns "インターフェイス名" static DNSサーバアドレス
ファイルのコピー
  • メモ帳 (notepad.exe ) を起動して、ファイルメニューの「開く」ダイアログ画面でマウス操作でのコピーが可能

GUI画面でマウス操作でのコピーが可能です。但し、隠しファイル、拡張子など表示されません。PE上でレジストリを修正すればすべて表示できます。(※ 後述)

コマンド dir /a とかではすべてのファイルを表示可能。

イメージファイル作成 (imagex.exe)

あっと、これは確認してないけど

  • リカバリー用イメージ作ったり
  • 丸ごとイメージにしておいて、後でマウントできるのかも

 注意してほしいのは、ImageXツールを日常のバックアップツールとして使用することは、ライセンス上、認められていないことだ。ImageXツールのライセンスは、Windowsのインストールおよびコンピュータを復旧する目的でのみ許諾されているからだ。

【解説】Windows PE 完全活用ガイド―[3]PE 実践活用テクニック 6選 : Windows Server - Computerworld.jp

※ リカバリー用に使いませう。

キャプチャしたイメージをWindows上でマウントして中身のファイルを取り出せるのはかなり便利ですね。

他のアプリケーション

もちろん保証外。

制限がかなりあるようですが、USBメモリやHD上に保存した Firefox PortableUnxUtilswget コマンド、などが使えました。

ファイラーに関しては、MDIEが一応使えました。ただ、タブは1枚のみ、ツリー表示はエラー。

wpeutil.exe
  • DisableFirewall - ファイアウォール無効
  • EnableFirewall - ファイアウォール有効
  • Reboot - 再起動
  • Shutdown - シャットダウン
drvload.exe

ドライバのインストール

BootSect.exe

XP用 (NTLDR)、Vista/7用 (BOOTMGR) 仕様のブートセクタ書き込み、及びMBRブートストラップの書き込みが可能です。(※ PE2.0には /mbr オプションなし、2.1と3.0にあり)

※ PE以外でも Vista/7 のインストールDVDの boot フォルダや 7 の C:\Recovery\xxx\Winre.wim(システム回復オプション)などにも入ってます。

【注意】 PE 2.1 基本イメージには入ってないので作成時に追加すること。(※ 3.0基本イメージや 7 の「システム修復ディスク」には含まれているので追加は不要。)

上記2.0向けページには書かれてませんが、2.1 以降では /mbr オプションがありました。

7 / Vista の修復なら...

システム回復オプション(Windows 回復環境)が起動できるなら「スタートアップ修復」の方が確実だと思われます

まずは、システム回復オプション(Windows 回復環境)が起動できるなら「スタートアップ修復」を試すべきかも?(但し、MBRブートストラップの書き込みも必要になるかも。)

Bootsect.exe は、ハード ディスクのパーティション用マスター ブート コードを更新して Bootmgr と NT Loader (NTLDR) を切り替えます。このツールを使用すると、コンピューター上のブート セクターの設定を元に戻すことができます。FixFAT と FixNTFS は、このツールに置き換えられました。

Bootsect コマンド

Bootsect では、次のコマンド ライン オプションが使用されます。

bootsect.exe {/help | /nt52 | /nt60} {SYS | ALL | <DriveLetter:>}[/force] /mbr

たとえば、NTLDR と互換性があるマスター ブート コードをボリューム ラベル E に追加するには、次のコマンドを使用します。

bootsect.exe /nt52 E:

Bootsect コマンド ライン オプション

※ Vista/7 のWindows 回復環境ではこれとよく似た BootRec.exe がありますが、XP用ブートセクタ/ブートストラップの書き込みはできません。

オプション
  • /nt60
    • PE 2.1 では Vista 仕様(※ 下記 /mbr オプションも同様)
    • PE 3.0 では 7 仕様(※ 下記 /mbr オプションも同様)
  • /nt52
    • XP仕様のブートセクタ書き込み
  • /mbr
    • 上記指定に合わせMBRブートストラップ書き込み

※ Vista と 7 はどちらもブートローダーは BOOTMGR ですが、(ブートストラップも)若干違いがありました。

  • ブートセクタ書き込み
bootsect /nt60 c:
  • XPのMBRブートストラップ、C: ドライブへブートセクタ書き込み
bootsect /nt52 c: /mbr

XP Home/Pro のオリジナルと全く同じブートストラップが書き込みされました。

こんな場合に使いませう

XPで回復コンソールが使えない、7/Vistaでシステム回復オプション使えない時とかで。

  • Linuxを削除したらWindowsが起動しなくなってもうた...
  • 間違ってMBRにGRUBを入れちゃった。戻したい...
  • PEでフォーマットしたらXPのセットアップが起動しない...
【注意】あくまで「ブートの修復」用です!

ファイルシステムの修復用ではござらぬ

ブートセクタ/ブートストラップの書き換えなどにより、ブートできなくなった場合の修復(書き戻し)用として使いませう

ドライブを認識できない、ファイルシステムの異常時などに使用するとデータが消えてしまったり、HD自体が壊れかけの場合はさらに悪化してしまう可能性がありまする。

レポート 6

作ってみた 7

ドキュメント

Windows PE Tools コマンド プロンプト(Deployment ツールのコマンド プロンプト)からコマンドを実行します。

PE基本イメージ作成

まず作成フォルダを設定(※ 存在するフォルダはだめ)

set Target=C:\WinPE
  • x86 (32bit)の場合(※ x64なら amd64
copype x86 %Target%
pushd %Target%
if not exist ISO\sources\boot.wim copy winpe.wim ISO\sources\boot.wim
oscdimg -n -b%Target%\etfsboot.com %Target%\ISO %Target%\WinPE.iso

設定フォルダに WinPE.iso が作成されます。2.1では 約202MB、3.0 では 約154MB。2.1では後述の最適化を実行すると130MB程になります。

2.1では最適化でサイズ縮小

上記ページそのまんまですが。

まず作成フォルダを設定(※ 存在するフォルダはだめ)

set Target=C:\WinPE
  • 作業フォルダを作成
copype x86 %Target%

CDの内容がISOフォルダ以下に、mount フォルダは空

  • wimイメージを mount フォルダに展開
imagex /apply %Target%\winpe.wim 1 %Target%\mount
ファイルを追加する場合はここで

%Target%\mount\Windows\System32 などへファイルをコピーしておきませう。

  • 最適化(※ 3.0では不要。 peimg はありません)
peimg /prep %Target%\mount\Windows
  • WIMイメージ(仮想ドライブ)再作成
imagex /capture %Target%\mount %Target%\ISO\SOURCES\BOOT.WIM "WinPE for recovery" /boot /compress maximum

圧縮すると2.1では104MB程になる。デフォルトでは175MB程。

  • isoイメージ作成
oscdimg -n -b%Target%\etfsboot.com %Target%\ISO %Target%\WinPE.iso

※ PE上でImageX などを使う場合は最適化前にコピーしておくこと!

ImageX.exe と BootSect.exe

【訂正】間違ってましたすみません。imagex.exeWimscript.ini は同じディレクトリに置く必要があります。

copy "C:\Program Files\Windows AIK\Tools\x86\imagex.exe" %Target%\mount\Windows

除外ファイルWimscript.ini%Target%\mount\Windows\ に作成

[ExclusionList]
ntfs.log
hiberfil.sys
pagefile.sys
"System Volume Information"
RECYCLER
Windows\CSC

[CompressionExclusionList] 
*.mp3 
*.zip 
*.cab 
\WINDOWS\inf\*.pnf

ブートセクタ修復用の BootSect.exe も入れた方がいいかも(※ 3.0では基本イメージに入ってるので追加不要)

copy "C:\Program Files\Windows AIK\Tools\PETools\x86\BootSect.exe" %Target%\mount\Windows\System32
メモ帳の「開く」画面ですべてのファイルを表示

起動時にPEのレジストリを修正させます。

\mount\Windows\system32\startnet.cmd
  • 下記を追記
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v Hidden /t REG_DWORD /d 0x00000001
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v HideFileExt /t REG_DWORD /d 0x00000000
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v SuperHidden /t REG_DWORD /d 0x00000001
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v ShowSuperHidden /t REG_DWORD /d 0x00000001

※「開く」画面で【ファイルの種類】で「すべてのファイル」を指定すること。

%Target% (C:\WINPE)
  • ISOフォルダ
    • boot\
    • EFI\
    • sources\ (boot.wim)
    • bootmgr
  • mountフォルダ
    • Program Files\
    • Tools\
    • Users\
    • Windows\
  • etfsboot.com (CDブートセクタ)
  • WinPE.iso
  • winpe.wim
  • boot.wimがWinPE上の仮想ドライブ(X:)
  • mountフォルダの内容がboot.wimになる
  • ISOフォルダの内容がisoイメージに
  • ブートローダ(カーネルローダかな) - bootmgr

このCDでブートした際、CDの内容ももちろん参照できるけど、PE自体はオンメモリで動いているので、CDの入替も可能でした。

bcdファイルの設定内容
>bcdedit.exe /store %bcdfile% /enum

Windows Boot Manager
--------------------
identifier              {bootmgr}
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
default                 {default}
displayorder            {default}
                        {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
                        {ntldr}
toolsdisplayorder       {memdiag}
timeout                 30

Windows Boot Loader
-------------------
identifier              {default}
device                  ramdisk=[boot]\sources\boot.wim,{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
path                    \windows\system32\boot\winload.exe
description             Windows Setup
locale                  en-US
inherit                 {bootloadersettings}
osdevice                ramdisk=[boot]\sources\boot.wim,{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
systemroot              \windows
detecthal               Yes
winpe                   Yes
ems                     Yes
マルチブートCD
  • BCDWなら \boot\etfsboot.com 指定
  • grldr (GRUB for DOS) は /bootmgr
  • grldr (GRUB for DOS) から isoイメージ指定

複数バージョン使うなら、isoイメージ指定が楽ですねぇ。但し起動はチト重いですけんど。

HDブート(マルチブート)

※ 7 及び Vista で既に「Windows 回復環境」がインストールされてる場合はあんまり意味ないかも。

正式な作成方法(※ Vista以降向け)はヘルプや下記ページを参照で

下記は新規HDに設定する方法かな?

正式な方法は bcdedit.exe で WIM イメージを登録するだけ(?)かなと思いますけど(やったことない!)、色々チェインロードできる GRUB for DOS を Windows ブートマネージャーに設定してみました。 もちろん安全は保証されてない(?)のでご注意。

Windows XP/Vista/7 マシン向け。(※ 7/Vista がインストールされている環境ではファイルを上書きしないように注意)

PEの bootmgr をチェインロード
  1. 隠しファイルなどすべて表示”させた状態で、D: など なるべく C: 以外 のドライブで bootmgrboot フォルダが存在しないか確認(※ マルチブートだと D: にあることも)
  2. isoフォルダの内容を“確認できた” D: などのドライブのルートにコピー
  3. Windowsのブートローダに GRUB for DOS を登録
  4. Windowsのブートローダ grldr PE の bootmgr でチェインロード

XPでCドライブに ntldr がない場合や、boot.ini/bcd を弄りたくない場合はFDやUSBメモリなどから起動ディスクとして GRUB for DOS を使いませう。

  • GRUBの C:\menu.lst
title Windows PE
find --set-root /sources/boot.wim
chainloader /bootmgr

起動がめちゃ早いです。10秒程で起動。

または、ISOイメージからのブートの方が設定は簡単です。

PEのISOイメージをチェインロード
  1. 任意のドライブのルートに PEのISOイメージをコピー
  2. Windowsのブートローダに GRUB for DOS を登録
  3. Windowsのブートローダ grldr PE のISOイメージでチェインロード
  • GRUB の C:\menu.lst - ISOイメージから)
title Windows PE (CDROM-Emulation)
find --set-root /WinPE.iso
map /WinPE.iso (0xff) || map --mem /WinPE.iso (0xff)
map --hook
chainloader (0xff)

USBメモリでブート

  1. Windows 標準方式
  2. SYSLINUXでチェインロード

Windows 標準方式

ヘルプや下記ページを参照にて。

diskpart.exe 実行

【注意】USBメモリ内のデータはすべて消えます!

  1. PE/Vista/7 上で diskpart.exe 実行(※ XP上ではだめ)
    • clean - パーティション・テーブル含めMBRを0クリア
    • 基本(プライマリ)パーティション作成
    • アクティブ化(bootフラグ)
    • FAT32でフォーマット
    • assign - ドライブ文字割当(※ Vista/7上の場合)
  2. ISOの内容をコピー

ブートに必要なMBRブートストラップは、パーティション・テーブルを含めた“MBRの初期化&パーティション切り直し”することで、ブートセクタのIPLはフォーマット時に、それぞれ書き込まれるようですね。

※ USB HDでも可能だと思われます。

SYSLINUXでチェインロード

ちょっと邪道かもですが、私は、SYSLINUX / GRUB for DOS からチェインロードさせてます。但し、安全は保証されてない(?)のでご注意。

USB HDでは

正攻法は、上記の diskpart.exe 実行だと思いますけど...

  • FATパーティションならSYSLINUXはインストール可(※ -f オプション)
  • NTFSでは GRUB for DOS がインストールできるはず?(試したことない!)
  • Linux なら GRUB/GRUB2 から GRUB for DOS のチェインロードが可能

こちらの利点は

grub.exeバージョン 0.4.4 を使用。

SYSLINUXをインストール
  1. USBメモリのフォーマットは FAT32 or FAT16
  2. isoフォルダの内容、またはISOイメージをドライブのルートにコピー
  3. USBメモリへ SYSLINUX をインストール
  4. USBメモリへ SYSLINUXの menu.c32 をコピー
  5. USBメモリへ SYSLINUXの chain.c32 or GRUB for DOS の grub.exe をコピー
  6. syslinux.cfg (menu.lst) 作成
  • SYSLINUXchain.c32 bootmgr でチェインロード
  • または、SYSLINUX grub.exe bootmgr(またはISOイメージ)でチェインロード
  • USBメモリのファイル一覧(※ x86の例)
USBメモリ
|   bootmgr
|   chain.c32        --- 追加コピー
|   grub.exe         --- ※ 必要なら追加コピー
|   ldlinux.sys      --- SYSLINUX インストール時に作成される
|   menu.lst         --- ※ 必要なら追加作成
|   syslinux.cfg     --- 追加作成
|
+---boot
|   |   bcd
|   |   boot.sdi
|   |
|   \---fonts
|           chs_boot.ttf
|           cht_boot.ttf
|           jpn_boot.ttf
|           kor_boot.ttf
|           wgl4_boot.ttf
|
+---EFI
|   \---microsoft
|       \---boot
|           |   bcd
|           |
|           \---fonts
|                   chs_boot.ttf
|                   cht_boot.ttf
|                   jpn_boot.ttf
|                   kor_boot.ttf
|                   wgl4_boot.ttf
|
\---sources
        boot.wim
syslinux.cfg
  • syslinux.cfg の先頭部分
DEFAULT /menu.c32
PROMPT 0
MENU TITLE SYSLINUX Boot Options Menu

この下にエントリを追記して行きます。必要なものだけでいいです。

  • chain.c32 使用
LABEL chain
MENU LABEL Windows PE === chain.c32
KERNEL /chain.c32
APPEND ntldr=/bootmgr
  • grub.exe 使用
LABEL grub4dos
MENU LABEL Windows PE === grub4dos
KERNEL /grub.exe
APPEND --config-file="chainloader /bootmgr"
  • ISOイメージ(grub.exe 使用)
LABEL iso
MENU LABEL Windows PE === from ISO
KERNEL /grub.exe
APPEND --config-file="find --set-root /WinPE.iso;map /WinPE.iso (0xff) || map --mem /WinPE.iso (0xff);map --hook;chainloader (0xff);rootnoverify (0xff)"

起動はHDに比べるとかなり遅いです。10分ぐらいかかることもありました。0.4.4 ではかなり速くなりました

USBメモリでのISOブートは環境によっては読み込みが遅すぎ!かもしれません!

GRUBのメニューから選択

GRUBをチェインロードしてからメニューで選択する場合は menu.lst 作成

  • syslinux.cfg - GRUB をチェインロード
LABEL grub4dos
MENU LABEL GRUB for DOS
KERNEL /grub.exe
APPEND --config-file="configfile /menu.lst"
  • menu.lst の先頭部分
color white/blue yellow/cyan
# timeout 30
# default 0

この下にエントリを追記。必要なものだけ。

  • GRUB の menu.lst - bootmgr をチェインロード
title Windows PE
find --set-root /sources/boot.wim
chainloader /bootmgr
  • GRUB の menu.lst - ISOイメージから)
title Windows PE (CDROM-Emulation)
find --set-root /WinPE.iso
map /WinPE.iso (0xff) || map --mem /WinPE.iso (0xff)
map --hook
chainloader (0xff)
rootnoverify (0xff)

【追記】FD扱いでのブートでは、かなり遅くなる模様です。下記にて一旦メモリにロードすると若干速かったです。

  • syslinux.cfg - memdisk を追加コピー
LABEL memdisk
MENU LABEL Windows PE === MEMDISK
LINUX /memdisk
INITRD /WinPE.iso
APPEND raw iso
  • GRUB - menu.lst
title Windows PE (CDROM-Emulation)
find --set-root /WinPE.iso
map --mem /WinPE.iso (0xff)
map --hook
chainloader (0xff)

内蔵FDドライブあり、且つ、USBメモリが fd1(2台目のFDドライブ)として認識される環境では起動できなかった。mapコマンドで入れ替えたらおk。

title change fd1 chainload bootmgr
map (fd0) (fd1)
map (fd1) (fd0)
map --hook
chainloader (fd0)/bootmgr

PXEネットワークブート

【追記】いろいろと

ごちゃごちゃになってしもた、ですので、まとめ(?)てみました。

おおまか手順

ほとんど上記ページの解説をそのまま実行しただけですが(汗)

  1. PEファイルを作成
  2. tftpディレクトリに必要ファイルをコピー
  3. ブートローダの設定の為に、bcdedit.exe を使うバッチファイルを実行
  4. (Windows用)TFTPD32tftp/dhcp サーバを設定

尚、【3】について、bcdedit.exe はXPにはなし、PEに入ってるけどXP上で実行していいものなのかよくわからなかったのでPEを起動してから実行しました。(※ XP SP3 上でも問題ないことを確認しました。)

CreateBCD.cmdの内容を引用コピペ。

Rem Creates BCD (boot configuration data) for Windows PE 2.0
set BCD-File=c:\PXEServer\Tftproot\Boot\BCD
del %BCD-File%
Bcdedit /createstore %BCD-File%
Bcdedit /store %BCD-File% /create {ramdiskoptions} /d "Ramdisk options"
Bcdedit /store %BCD-File% /set {ramdiskoptions} ramdisksdidevice  boot
Bcdedit /store %BCD-File% /set {ramdiskoptions} ramdisksdipath  \boot\boot.sdi
for /f "tokens=1-3" %%a in ('Bcdedit /store %BCD-File% /create /d "WinPE x86" /application osloader') do set guid1=%%c
Bcdedit /store %BCD-File% /set %guid1% systemroot \Windows
Bcdedit /store %BCD-File% /set %guid1% detecthal Yes
Bcdedit /store %BCD-File% /set %guid1% winpe Yes
Bcdedit /store %BCD-File% /set %guid1% osdevice ramdisk=[boot]\Boot\winpe_x86.wim,{ramdiskoptions}
Bcdedit /store %BCD-File% /set %guid1% device ramdisk=[boot]\Boot\winpe_x86.wim,{ramdiskoptions}
Bcdedit /store %BCD-File% /create {bootmgr} /d "Windows Vista BootManager" 
Bcdedit /store %BCD-File% /set {bootmgr} timeout 30
Bcdedit /store %BCD-File% /set {bootmgr} displayorder %guid1%
Bcdedit /store %BCD-File% /enum all
Blog - Booting WinPE 2.0 from a third party PXE Server
for /f "tokens=1-3" %%a in ('Bcdedit /store %BCD-File% /create /d "WinPE x86" /application osloader') do set guid1=%%b
for /f "tokens=2 delims={}" %%x in ('Bcdedit /store %BCD-File% /create /d "WinPE x86" /application osloader') do set "guid1={%%x}"
bcdファイルの設定内容
>bcdedit.exe /store %bcdfile% /enum

Windows Boot Manager
--------------------
identifier              {bootmgr}
description             Windows Vista BootManager
displayorder            {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
timeout                 30

Windows Boot Loader
-------------------
identifier              {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
device                  ramdisk=[boot]\Boot\winpe_x86.wim,{ramdiskoptions}
description             WinPE x86
osdevice                ramdisk=[boot]\Boot\winpe_x86.wim,{ramdiskoptions}
systemroot              \Windows
detecthal               Yes
winpe                   Yes

【私的】作成方法

  • 作業フォルダ作成
copype x86 c:\winpe_x86
  • winpe.wim をリネーム
ren winpe.wim winpe_x86.wim
  • イメージを mount フォルダに展開
imagex /apply c:\winpe_x86\winpe_x86.wim 1 c:\winpe_x86\mount
  • imagex.exe をコピー
copy "C:\Program Files\Windows AIK\Tools\x86\imagex.exe" C:\winpe_x86\mount\Windows
  • 除外ファイル Wimscript.ini を C:\winpe_x86\mount\Windows\ に作成
[ExclusionList]
ntfs.log
hiberfil.sys
pagefile.sys
"System Volume Information"
RECYCLER
Windows\CSC

[CompressionExclusionList] 
*.mp3 
*.zip 
*.cab 
\WINDOWS\inf\*.pnf
  • BootSect.exe をコピー
copy "C:\Program Files\Windows AIK\Tools\PETools\x86\BootSect.exe" C:\winpe_x86\mount\Windows\System32
  • 最適化
peimg /prep C:\winpe_x86\mount\Windows
  • winpe_x86.wim を圧縮して再作成
imagex /capture C:\winpe_x86\mount C:\winpe_x86\winpe_x86.wim "WinPE for recovery" /boot /compress maximum
  • tftpサーバで使用するフォルダを作成
mkdir C:\PXEServer\TFTPRoot\Boot\Fonts
  • 必要ファイルをtftpディレクトリにコピー
copy c:\winpe_x86\mount\Windows\Boot\PXE\pxeboot.n12 C:\PXEServer\TFTPRoot\boot
copy c:\winpe_x86\ISO\boot\fonts\*.* c:\PXEServer\TFTPRoot\Boot\Fonts
copy c:\winpe_x86\mount\Windows\Boot\PXE\bootmgr.exe C:\PXEServer\TFTPRoot
  • boot.sdi をtftpディレクトリにコピーする。
copy C:\winpe_x86\ISO\boot\boot.sdi C:\PXEServer\TFTPRoot\boot
  • winpe_x86.wim をtftpディレクトリにコピーする。
copy c:\winpe_x86\winpe_x86.wim C:\PXEServer\TFTPRoot\boot
  • VistaまたはPE上で C:\PXEServer から CreateBCD.cmd を実行
TFTPD32の設定

Tftpd32 から tftpd32.xxx.zip をダウンロード

  1. tftpd32.exetftpd.hlptftpd32.ini を C:\PXEServer にコピー
  2. [DHCP Server] Base Directory - C:\PXEServer\TFTPRoot
  3. [DHCP Server] Boot File - /boot/pxeboot.n12 を指定
  4. [Settings]【TFTP Server】と【DHCP Server】にチェック
  5. [Settings] TFTP Security - 【Read Only】にチェック
  6. [Settings] Advanced TFTP Options - 【Option Negotiation】にチェック
  7. [Settings] Advanced TFTP Options - 【Allow "\ " As virtual root】にチェック

パーソナルファイアウォールの設定は tftpd32.exe の inbound を許可するか、一時的に無効にする。

【追記】PXELINUX(SYSLINUX)でのブート

※【ご注意】これも正式な方法じゃないみたいですが...

Windows で TFTPD32 を使う場合です。

  1. TFTPルートに「CD」(isoイメージ)内のファイルをすべてコピー(※ bootmgr, bootfix.bin, etfsboot.com は不要)
  2. 作成時にマウントした mount\Windows\Boot\PXE\ にある bootmgr.exe をTFTPルートににコピー
  3. 作成時にマウントした mount\Windows\Boot\PXE\ にある pxeboot.n12boot ディレクトリにコピー
  4. pxeboot.n12pxeboot.0 にリネーム
  5. SYSLINUXpxelinux.0, menu.c32 をTFTPルートににコピー
  6. [DHCP Server] Boot File - pxelinux.0 を指定
  • pxelinux.cfg/default(など)の先頭部分
DEFAULT /menu.c32
PROMPT 0

LABEL winpe
MENU LABEL Windows PE === chain pxeboot.n12
PXE /boot/pxeboot.n12

あるいは、isoイメージを直接指定する手も。

  1. grub.exe 0.4.4 (GRUB for DOS) をTFTPルートへコピー
  2. WinPE.iso TFTPルートへ
  • pxelinux.cfg/default(など)に追記
LABEL winpe2
MENU LABEL Windows PE === from ISO
KERNEL /grub.exe
APPEND keeppxe --config-file="pxe basedir /;map --mem (pd)/WinPE.iso (0xff);map --hook;chainloader (0xff)"

下記でも意味は同じ。

LABEL winpe3
MENU LABEL Windows PE === from ISO
LINUX /grub.exe
INITRD /WinPE.iso
APPEND --config-file="map (rd) (0xff);map --hook;root (0xff);chainloader (0xff)"

※ 尚、PE 2.1 (Vista SP1), PE 3.0 (7) では、TFTPD32の設定で Option Negotiation をオン(PXE Compatibility はオフ)にしないと起動できないようなので注意。

※ 【注意】汎用起動ROMなどでのブートではisoイメージ指定は失敗することが多いようです。

Windows 回復環境(Windows RE) 8

※ Windows AIK には含まれてません。

「またの名」と言いますか、起動方法によって呼び名が違ったり。

メチャ簡単に言いますと、Windows PE に下の画像の「システム回復オプション」を足したものです。

Windows 7「システム回復オプション」のスクリーンショット

Windows Vista「システム回復オプション」のスクリーンショット

起動方法は
  • HDから - 起動時に F8 (or F5) キー押し「詳細ブート オプション」メニューから

7 では標準インストール、Vista では標準ではインストールされないけどメーカー製PCの多くはインストールされてます。

※ つまりAIKをインストールしなくても PE/RE は使えるのであった...

HDから起動できない場合を考えて、DVD/CDブートなど別の手段も確保しておいた方がえーですよ。

拙作めも

スクリーン・ショット 9

Windows PE 2.0 のスクリーンショット

※ メモ帳のメニュー「開く」画面でファイル操作が可能。タイトルバーをWクリックすると最大化。

メモ帳のスクリーンショット

レジストリエディタ

「レジストリエディタ」のスクリーンショット

Windows PE 2.1 のスクリーン・ショット

Windows PE 3.0 のスクリーン・ショット

Windows Vista の「Windows 回復環境」のスクリーンショット

Windows 7 の「システム修復ディスク」のスクリーンショット

DELL社PCの Windows 7 の「システム修復ディスク」のスクリーン・ショット

Windows XP SP2 SP3 のインストール

んっと、これは非サポートで保証もされていない方法です。たまたまできただけなのかもしれません(汗)。

CDブートが可能ならわざわざこんなことする必要もないわけですから、あくまでCDドライブがない場合、或いはCDブートできない(USB CDとか)時にトライする手段の一つとしてはいいかもしれない。

SP3統合

XPセットアップファイルがSP1,SP2の場合は不具合の出る可能性が高いので、SP3ファイルを統合しておきませう。(※ SPなしの場合はSP2→SP3の段階的統合が必要かもしれません?)

  1. フォルダ作成 C:\Test D:\Test とか
  2. XPセットアップCDの内容(または i386 フォルダごと)を D:\Test にコピー
  3. SP3ファイルを保存したディレクトリに移動し下記コマンド実行
WindowsXP-KB936929-SP3-x86-JPN.exe /integrate:D:\test

※ 下記はSP2の例ですが参考に

基本手順
  1. PE起動
  2. format c: /fs:ntfs - C:ドライブをフォーマット
  3. bootsect /nt52 c: - BootSect.exe でブートセクタをNTLDR仕様に書換
  4. I386フォルダに移動して winnt32.exe 実行
  5. 再起動、HDからブートすると「Windows セットアップ」開始

※ 再インストール時は不要な筈ですが、パーティションのアクティブ設定(※ boot フラグを付ける)の確認も忘れずに。

bootsect.exe がない場合は【2】【3】をファイル全削除で代替

基本的にはこれだけなのですが、PE 2.0(以降)はXPより新しいOSなのでいくつか注意点がございますです。実行前に確認しておかれた方がよろしいかと存じます。

BootSect.exe を準備しておきませう

NTLDR / BOOTMGR 仕様それぞれのブートセクタ書き込み(書き換え)、2.1以降ではMBRブートストラップの書き込みもできます。2.1 の基本セットには入ってないので作成時に追加しときませう。

インストール先パーティションの選択

慣れてる人には基本ですが、これにチェックしとかないと確認画面が出ず、勝手に予期しない場所にインストールされたりするので。

  • セットアップ中にインストール ドライブ文字とパーティションを選択する

セットアップ・オプション画面のスクリーンショット

新規インストールの場合は?

※ まっさらなHD(※ MBR に Windows のブートストラップがない状態)にパーティションを作成してからインストールする場合です。

ブートストラップがないと winnt32.exe を多分実行できません

PE上の diskpart コマンドでパーティション作成は(ブートストラップ書き込みも)可能ですが、Vista以降の形式である、所謂 1MiBアラインメント(※ 第1パーティションのオフセットが1024KB = 開始位置が2049番目セクタ)となります。

古い規格のHDなら従来の63セクタ形式の方が安全の様な気がしますが、SSDなど新しい規格ではVista形式の方がいいのかもしれません。

Linux LiveCD に含まれる GParted(の最新版)などでは、形式を選択可能でした。但し、ブートセクタは BOOTMGR 仕様となってました。

PE でパーティションを切るとXPの直接インストールはできない?

SP2以前だと、テキストモードのセットアップは完了してもGUIモードでエラーとなるようです。

SP3ではGUIモードも完了できたので修正済みのようです。

PE上で C: ドライブをフォーマットすると

ブートセクタは BOOTMGR 仕様となります。

直後に winnt32 を実行すると、セットアッププログラムをロードするためのファイル BOOTSECT.DAT 内に書かれるファイル名が $LDR$NTLDR ではなく、BOOTMGR となる為、セットアップが起動できなくなります。

A disk read error occurred
Press Ctrl+Alt+Del to restart

※ BOOTMGR 仕様のブートセクタでは、BOOTMGR がなければ NTLDR をロードするので NTLDR でのブートも可能な筈ですが、boot.ini には「BOOTSECT.DAT をロードせよ!」BOOTSECT.DAT には「BOOTMGR をロードせよ」と書かれてるわけで永遠に $LDR$ (setupldr.bin) がロードされないという罠。

※ 尚、この状態でも GRUB for DOS などで $LDR$ をチェインロードすれば続行可能でした。

なので、C:ドライブをフォーマットした直後に BootSect.exe を実行しブートセクタを NTLDR 仕様に書き換えませう。(※ MBRブートストラップは念の為)

X:\windows\system32>bootsect /nt52 all /mbr
Target volumes will be updated with NTLDR compatible bootcode.

C: (\\?\Volume{4df84647-9e90-11df-a6c7-806e6f6e6963})

    Successfully updated NTFS filesystem bootcode.

D: (\\?\Volume{4df84648-9e90-11df-a6c7-806e6f6e6963})

    Successfully updated NTFS filesystem bootcode.

\??\PhysicalDrive0

    Successfully updated disk bootcode.

Bootcode was successfully updated on all targeted volumes.

all ではなく、c: だけでもいいかも。

ntldr BOOTSECT.DAT $LDR$ (setupldr.bin) の順序でブートする様です。

アクティブ設定の確認

【再】インストールの場合は再設定不要なはずなのですが、なぜかこの設定が外れることがあるので念の為に確認しておくべきかも?

X:\windows\system32>diskpart

Microsoft DiskPart バージョン 6.0.6001
Copyright (C) 1999-2007 Microsoft Corporation.
コンピュータ: MININT-R75CTVC

DISKPART> list disk

  Disk ###  Status           Size     Free     Dyn  Gpt
  --------  ---------------  -------  -------  ---  ---
  Disk 0    オンライン        120 GB      0 B

DISKPART> select disk 0

ディスク 0 が選択されました。

DISKPART> list partition

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    プライマリ              100 GB    32 KB
  Partition 2    プライマリ               20 GB   100 GB

DISKPART> select partition 1

パーティション 1 が選択されました。

DISKPART> detail partition

パーティション 1
種類         : 07
隠し属性     : いいえ
アクティブ  : はい

  Volume ###  Ltr Label        Fs    Type        Size     Status     Info
  ----------  --- -----------  ----  ----------  -------  ---------  --------
* Volume 2    C                NTFS  Partition    100 GB  正常

DISKPART> exit

アクティブが「いいえ」となっている場合は

DISKPART> detail partition

パーティション 1
種類         : 07
隠し属性     : いいえ
アクティブ  : いいえ

  Volume ###  Ltr Label        Fs    Type        Size     Status     Info
  ----------  --- -----------  ----  ----------  -------  ---------  --------
* Volume 2    C                NTFS  Partition    100 GB  正常

DISKPART> active

DiskPart は現在のパーティションをアクティブとしてマークしました。

DISKPART> detail partition

パーティション 1
種類         : 07
隠し属性     : いいえ
アクティブ  : はい

  Volume ###  Ltr Label        Fs    Type        Size     Status     Info
  ----------  --- -----------  ----  ----------  -------  ---------  --------
* Volume 2    C                NTFS  Partition    100 GB  正常

DISKPART> exit
インストール後の注意点

ウチでは別に不具合なく使えておりますが、Users(制限付きアカウント)では影響あるかもなのでご注意。

PE上でフォーマットしている場合、chkdsk をかけると「アッパーケース ファイル エラー」なんてのが出たりします。chkdsk /f c: で起動時予約しましょう(※ C: 以外はそのまま実行で)。

CD以外のブート手段
ネットワークブート

BIOSの設定を確認しましょう。最近の国内メーカー製PCならほぼ対応してると思います。

サーバとして利用する別マシンも必要です

起動用イメージ

BIOS非対応でもLANアダプタが内蔵かPCIボードなら、FDまたはUSBブートからネットワークブートがほぼ可能。下記サイトで起動用イメージ(FD/CD/GRUB,SYSLINUX用カーネル)がダウンロードできます。(※ USBやPCMCIAはだめ)

USBメモリブートが可能

Windows PE をUSBメモリでブート

FDブート

※Windows PE のファイルをコピーするにはUSBデバイスやネットワーク上の別マシンが必要

(※FDブートのみでNTFSへの書き込みはほぼ無理なので)FD + USBデバイスで Linux LiveCD を起動して Windows PE のファイルをコピー。GRUB for DOS の起動FDでブート。

HD以外のブート手段がない

Windows が生きてるなら Windows PE とのマルチブート設定にする。

何も起動できない状態では、HDを取り外して別マシンに接続して Windows PE を設定するしかないかな?

Windows PE を使わず、winnt32.exe を(オプション付けて)直接実行するという手もあるのだけれど、ややこしい...

i386フォルダの保存先

※CDの内容そのままでもいいです。

Windows PE がブートできたなら、USBデバイスやネットワークの利用が可能。(※ Windows PE はオンメモリで動く)

ネットワークブートで Windows XP SP2 SP3 のインストール

  1. 前述の方法でPXEネットワークブート用サーバを設定しておく
  2. XPインストールCDをセットしたCDドライブ、またはCDの内容をコピーしたフォルダを共有設定する
  3. インストール対象マシンをネットワーク・ブートさせる
Cドライブのファイルを削除

【追記】上記の通り「フォーマット後に BootSect.exe 実行」の方がいいかも。

C:
dir /a   --- 内容確認
attrib -s -h -r *.*   --- システムファイル削除するため属性をクリア
del *.*   --- ファイル削除
dir /a   --- 内容確認
rmdir /s "Documents and Settings"   --- ディレクトリごと削除を繰り返し
rmdir /s "Program Files"
rmdir /s WINDOWS
dir /a   --- 内容確認
winnt32.exe実行
  • 共有をマウント
net use L: \\hage\dura

※【追記】サーバ側が Home Edition の場合下記の方が確実かもしれない

net use L: \\hage\dura /u:guest *
  • ※認証が必要な場合
net use L: \\hage\dura /u:username *
  • winnt32.exe実行
L:
cd i386
winnt32

「NTFSへのアップグレード」は一応チェックしておく。

このあと再起動すればWindows XPのセットアップが始まりました。もし、エラーで起動できない場合はGRUBなどを使えば起動できるかも。

超私的めも

かな〜り危険あるかも?とことわっておきますけど(何)

HDD上のXPにインストールされているソフトも起動できたりした。但し、元のレジストリやユーザープロファイルは読み込まれないので初期設定状態で起動する

MWAV(eScan)

PE上でそのまま実行したら、仮想ドライブ上の TEMP がいっぱいになっちゃってエラーで落ちた。なもんでXP上で作成してからちゅうことで。

regedit (regedt32)

PEに元々入ってま。

XPで作成したPE上でハイブの読み込みからXPの、system, software, ntuser.dat などの編集(削除)ができた。(※前述の通り、XPで作成したPEはVistaに使うと危険みたいなので注意)

Written by yassy