Windows PE
BartPEを調べていたらある解説記事に「Windows PEはOEMメーカなど向け」と書いてあったので一般ユーザでは使えないのかと鼻から諦めていた。何気にMicrosoftのホームページを見ていたら、Windows XP と Windows PE 2.0 によるデュアル ブート という記事を見つけて「ふむふむ」と読んでいた。読んでいるとWinPEって誰でも使えそうな勢いで書いているので、ひょっとしてとして思ってMicrosoftのページを色々と探した。"Windows PE"としては「製品」には載っていなかった。またダウンロードでも単体でWindows PEのページは見当たらなかった。しかし、Windows Vista SP1 および Windows Server 2008 用の自動インストール キット (AIK) というのがあった。*1(主にVista/Server 2008を対象にしているようだが)設定済みのWindowsを数多くのPCに自動インストールするためのツールである。設定済みのWindowsのHDDイメージをキャプチャするためにはWindows自身が起動している状態ではよろしくないので、メモリだけで動作するWindows PEを利用する。もちろん、このAIKのユーザは企業などの大規模ユーザとなるが、「このダウンロードは、正規のMicrosoft Windowsを実行中のお客様にご利用いただけます。 」と書いてある。どこにもVistaのユーザに限る、とかWinPEをライセンスしているユーザに限る、とは書いていない。"正規のMicrosoft Windowsを実行中のお客様"である私は、利用できるらしい。早速、ダウンロードして真っ先に"ソフトウェア ライセンス条項"を確認した。「なんだ、Windows PEって(Windowsの正規ユーザであれば)誰でも使えるんじゃん!」
ソフトウェア ライセンス条項によると利用の制限はついている。このAIKはWindowsを複数のPCに展開するためにしか使えない。しかしAIKはWindows PEやそれ以外にも幾つかソフトウェアから構成されるが、WinPEについては「Windows オペレーティング システム ソフトウェアを診断および復旧する目的で、Windows プレインストール環境をインストールして使用することができます。」と追加の権利がついている。これはまさに私が使いたかった目的なわけで、問題ない。ちなみにWinPEを利用してシンクライアント(Thin Client)のベースとしては使ってはいけないとのこと。
余談だが、AIKの全体の制限として「デバイスに単独でインストールして使用することができます」とある。これって、私がこのページを探すきっかけとなった上の記事、「Windows XP と Windows PE 2.0 によるデュアル ブート」(つまり1つのデバイスにXPとPEをインストールして使う)という記事はこれに違反していないか?と思ってしまった。しかもマイクロソフトのページで紹介されている。若干のことは大目に見てくれるという示唆だろうか。;-)
■ Windows PEのISOイメージを作成する
ダウンロードしたAIKパッケージのファイルはiso形式なのでCDに焼くか、ファイルシステムとしてマウントして使えばいい。AIKのCDを挿入するとインストール画面が出てくる。
Windows PEが使いたいだけなのでAIK全体は必要ないがWinPEだけを選択にインストールする方法はないようなので「Windows AIK セットアップ」からインストールする。インストールに関しては特記すべきことはない。ウィザードに従って行けば直ぐに終わる。使い方は「IT プロ用ファースト ステップ ガイド」から読むことができる。私はマニュアルをじっくり読む習慣はないので、「起動可能な Windows PE メディアを作成するには」というところから掲載されているサンプルを実行する。このマニュアルの手順で基本的に問題はないはないのだが、このマニュアルからコピー&ペーストで実行するのは気をつける必要がある。空白のあるパスに「"」がなかったり、「-」(マイナス)の文字コードがASCIIでなかったりする。以下はマニュアルの手順と同じだが、コピー&ペーストで実行しても大丈夫。
スタートメニューのMicrosoft Windows AIKのメニューから「Windows PE Tools コマンド プロンプト」を起動する。これは通常のコマンドプロンプトと同じだが、コマンドパス環境変数にAIK関連が追加された形で立ち上がる。
まず、Windows PE メディアを作成するための環境を整える。
cd "C:\Program Files\Windows AIK\Tools\PETools\" copype.cmd x86 C:\winpe_x86
この例では"C:\winpe_x86"というフォルダに集められる。
次にWinPEを立ち上げた際に使う、追加のコマンドを"C:\winpe_x86\iso"というフォルダにコピーしておく。このisoというフォルダ以下はWinPEを立ち上げた際、Dドライブ、つまりCDとして扱われる。ここではAIKに入っているImageXというコマンドをコピーする。(ImageXはディスクのイメージをキャプチャするコマンド。)
copy "C:\Program Files\Windows AIK\Tools\x86\imagex.exe" C:\winpe_x86\iso\"
なお、ImageXに付随して、次の内容を"C:\winpe_x86\iso\wimscript.ini"というファイルとして書き込んでおく。
[ExclusionList] ntfs.log hiberfil.sys pagefile.sys "System Volume Information" RECYCLER Windows\CSC [CompressionExclusionList] *.mp3 *.zip *.cab \WINDOWS\inf\*.pnf
後述するようにImageXに限らず、WinPEで利用したいアプリケーションは"C:\winpe_x86\iso"にコピーしておく。
以上で、ISOイメージファイルを作成する準備が整ったので、次のコマンドでISOイメージファイルを作成する。
cd "C:\Program Files\Windows AIK\Tools\PETools\" oscdimg -n -bC:\winpe_x86\etfsboot.com C:\winpe_x86\ISO C:\winpe_x86\winpe_x86.iso
問題なければ C:\winpe_x86\winpe_x86.iso というISOイメージファイルができる。特に大きなファイルをコピーしなければ、作成されるISOイメージファイルは(ImageXを入れない状態で)大体212MB程度だった。これをCDに焼けばWindows PEのブートCDが出来上がる。
■ Windows PEをブートする
PCを立ち上げる際に作成したCDからブートすればWindows PEが起動する。なお、Windows PEはディスクレス状態で動作、つまりメモリ上だけで動作するためWindows PE 2.0では「384 MB (理想的には 512 MB) の RAM が搭載されているシステムでしか動作しません」と書かれている。古いPCでは使えないが、XP以降、512MB以上がほぼ標準となっているので問題はないかと思う。
WinPEが起動すると、次のような画面があらわれた。
起動すると自動的にコマンドプロンプトで wpeinit というコマンドを実行する。(regeditでみると[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]のshellが"cmd.exe /k start cmd.exe"となっている)wpeinitはシステムの初期設定やネットワークの設定を行うコマンドらしい。詳細は"X:\windows\system32\wpeinit.log"というログファイルで確認できる。コマンド終了までに大体20秒程かかったが、ネットで調べてみるとシステムによって異なるようだ。VMwareの仮想マシンで動かす場合は、「ethernet0.virtualDev = "e1000"」という宣言をコンフィグファイル(*.vmx)に書いておかないとwpeinitが終了するまでに1分以上かかった、という書き込みもあった。
ここで出てきたコマンドプロンプトがWinPEでの「コンソール画面」となる、このコンソールをexitで終了してしまうとWinPE自身がリブートしてしまう。また、AIKに含まれるWinPEは通常のWindowsのように「スタート」メニューがなく、基本的にはこのコマンドプロンプトを使って、DOSのようにコマンドを実行することになる。せっかくGUI画面になっているのにもったいない感じがある。(ただし、"notepad"のようなWindowsアプリケーションを使うことはできる。)どのようなコマンド使えるかは「X:\windows\system32」のフォルダを「dir /w *.exe」で確認する。殆どがコンソール アプリケーションだが、システムの修復等で使うコマンドはほぼ網羅されている。
ARP.EXE attrib.exe autochk.exe autoconv.exe bcdedit.exe bootcfg.exe cbsra.exe chkdsk.exe chkntfs.exe cmd.exe convert.exe csrss.exe diskpart.exe diskraid.exe dllhost.exe dllhst3g.exe dnscacheugc.exe doskey.exe dpapimig.exe drvinst.exe drvload.exe esentutl.exe expand.exe find.exe finger.exe fixmapi.exe fltMC.exe ftp.exe HOSTNAME.EXE ipconfig.exe LogonUI.exe lsass.exe lsm.exe mcbuilder.exe mountvol.exe mpnotify.exe MRINFO.EXE MuiUnattend.exe nbtstat.exe net.exe net1.exe netbtugc.exe netcfg.exe netiougc.exe netsh.exe NETSTAT.EXE newdev.exe notepad.exe ntkrnlpa.exe ntoskrnl.exe ntprint.exe PATHPING.EXE PING.EXE print.exe rasautou.exe recover.exe reg.exe regedt32.exe regsvr32.exe replace.exe Robocopy.exe ROUTE.EXE rundll32.exe sacsess.exe services.exe sfc.exe smss.exe subst.exe svchost.exe sxstrace.exe taskmgr.exe TCPSVCS.EXE TRACERT.EXE ucsvc.exe userinit.exe vds.exe vdsldr.exe verifier.exe wbadmin.exe wbengine.exe wdscapture.exe wevtutil.exe wininit.exe winload.exe winlogon.exe winpeshl.exe winresume.exe wlrmdr.exe wpeinit.exe wpeutil.exe wuauclt.exe xcopy.exe 92 個のファイル 17,624,800 バイト
いくつかはWindowsアプリケーションも使えるようで、例えば、notepad や taskmgr などが含まれている。これらはコマンドコンソールからコマンド名を打ち込んで起動する。
■ Windows PEにコマンドを追加する
いくら修復用に限定されているOSとは言え、Microsoftが提供するコマンドしか利用できないのでは作業の効率が悪い。たとえば、バックアップファイルを格納してあるファイルサーバとSSHでセキュアに通信したり、GUIベースのファイル転送ソフトも必要だし、サーバのGUI画面を見ながら作業もしたい。そして出来ればメニュー形式によるアプリケーションの実行機能があれば便利である。
そこで、試しに次のアプリケーションを追加してWinPEのCDを構成してみた。
スタートメニュー | nu2menu |
SSH通信 | PuTTY |
ファイル転送 | WinSPC |
リモートコンソール | UltraVNC |
まぁ、WinSPC以外はディスクレスXPのBartPEで使って利用していたアプリケーション群だが、これらが動くか確認してみた。*2
WinPEで標準以外のコマンドを使いたいのであれあ、PEのCD(ISOファイル)を作成する前に "C:\winpe_x86\iso\" というフォルダにアプリケーションをコピーせよと書いている。("C:\winpe_x86\"のパスは環境によって異なる。)そこで、それぞれのアプリケーションを次の様にコピーしてみた。
- nu2menu はダウンロードサイトから(現バージョンでは)nu2menu_beta_v0351.zipをダウンロードし、解凍したフォルダ nu2menu_beta_v0351 ごとisoフォルダへコピーする。(もしくは、BartPEの pluginディレクトリにあるnu2menuのディレクトリごとisoフォルダにコピーする。)*3
- PuTTYはダウンロードサイトから putty.exe をダウンロードし、isoフォルダへコピーする。
- WinSCPはダウンロードサイトから"Portable executable"をダウンロードし、winscp413.exeをisoフォルダに入れる。
- UltraVNCはダウンロードサイトからバイナリーパッケージで(インストーラ形式はなく)ダウンロードして解凍した UltraVNC-102-Bin というフォルダごとisoフォルダへコピーする。
これらの追加アプリケーションをコピーする前のオリジナルのisoフォルダの様子:
C:\winpe_x86\ISO>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 8192-AACF です C:\winpe_x86\ISO のディレクトリ 2008/06/15 11:49. 2008/06/15 11:49 .. 2008/06/15 10:38 boot 2008/01/18 23:45 333,203 bootmgr 2008/06/15 10:38 EFI 2008/06/15 10:40 sources 1 個のファイル 333,203 バイト 5 個のディレクトリ 21,879,703,552 バイトの空き領域
追加アプリケーションをコピーした後の様子:
C:\winpe_x86\ISO>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 8192-AACF です C:\winpe_x86\ISO のディレクトリ 2008/06/15 11:53. 2008/06/15 11:53 .. 2008/06/15 10:38 boot 2008/01/18 23:45 333,203 bootmgr 2008/06/15 10:38 EFI 2008/06/15 11:48 nu2menu_beta_v0351 2008/06/11 11:53 454,656 putty.exe 2008/06/15 10:40 sources 2008/06/15 11:48 UltraVNC-102-Bin 2008/06/14 18:02 1,300,992 winscp413.exe 3 個のファイル 2,088,851 バイト 7 個のディレクトリ 21,879,703,552 バイトの空き領域
さて、この状態でisoファイルを作成する。
cd "C:\Program Files\Windows AIK\Tools\PETools\" oscdimg -n -bC:\winpe_x86\etfsboot.com C:\winpe_x86\ISO C:\winpe_x86\winpe_x86.iso
C:\winpe_x86の下に先ほどより5MB程大きい約217MBのwinpe_x86.isoというファイルができる。それを使ってPCを起動する。"C:\winpe_x86\iso"フォルダが丸ごとISOイメージとして作成されるため、isoフォルダのすぐ下にコピーした追加アプリケーションはWinPEの環境ではDドライブすぐ下に現れる。そこでまずDドライブへ移動する。最初にnu2menuから実行いしてみる。NU2MENU_BETA_V0351\NU2MENU.EXEを実行する。(WinPEでは追加アプリケーションのフォルダやファイルは全て大文字に変換されている)すると、nu2menuの"スタートボタン"である「GO」ボタンが表示され、nu2meuが使えるようになる。
次にPuTTYを試す:
次はWinSCP:
WinSCPは今回バイナリパッケージを入手するために英語バージョンだったので、日本語が表示できない。日本語版のWinSCPはインストーラ型パッケージのみなので今回は英語版で試した。インストーラパッケージで一旦ダミーPCでインストールし、必要なディレクトリだけを持ってくるという方法もあるかも知れないが、今回はそこまで検証していない。
最後はUltraVNCである:
画面はファイルサーバとして使っているLinuxマシンにアクセスしたところである。これで、サーバ側で一時的にファイヤーウォールを解除して、WinPCからアクセスできるようにしたり、バックアップファイルなどをサーバ側で事前処理をしてから、WinPE上へファイルを転送するなどのシステム修復作業が楽になる。
■ 今後の課題
今回はWinPEがWindows系のOSでのトラブルで修復用の環境として使えるか試したが、なかなか良好だった。追加のアプリケーションも問題なくインストールでき、次回、トラブルに見舞われたら使ってみたいと思う。また、Linuxのディストリビューションのように、WindowsでもLiveCD環境としてWindows PEを標準で提供してくれる嬉しい。
なお、このページ、次のような課題を試したら適宜更新していくつもりだ。
まだ、WinPEは使い始めたばかりなので、余り設定などについては分からないが、時間があったら次のようなことを試してみたい。
- XPなどにバンドルされているバックアップ&リストアとPE環境を使い、HDDの内容が完全に復元できるかどうか。ちなみに、AIKに付属するImageXはバックアップツールとしては理想的だが、ライセンス条項には「それ以外の目的 (Windows オペレーティング システムのバックアップを含みますがこれに限定されません) でソフトウェアのこれらの部分を使用することはできません」と書いてあり、バックアップツールとしては使えない。「なんじゃこれは」と思ってしまったが。
- WinPEをネットワークブートできるかどうか。小型のノートPCのようにCD/DVDドライブを持っていないモデルの場合、ネットワークからのブートがないと使えないケースがある。ちょっと古いモデルのノートPCとかだと、別売のCDドライブが既に入手困難となっているものもある。⇒成功した。(WindowsのPXEサーバがなかったので、LinuxのPXEサーバを使ってWinPEをネットブートした。たぶん、Windows Serverとかを使ってPXEブートした方が簡単だったと思うが、ちょうど手元になかったのと、それでは面白くないので。)詳細は「PXEを使ってWindows PEをネットワークブート」にて。
- WinPE自身のコンフィグレーション。例えば画面サイズが800x640だが、これを変えることができるかどうか。これはシステム修復作業の効率に大きな影響をあたえる。また、デフォルトではIPv6が有効になっているが、それを無効にできるかどうか。(wpeinitの起動が遅いのはこの辺に原因があるのでは?と思っている。)
*1:「Windows Vista SP1 および Windows Server 2008 用の自動インストール キット (AIK)」の他にも2件ほど見つかったが、これが一番最近のものだった。
*2:MicrosoftはWindows PEがThin Clientのベースとして使われることを気にしているようだ。下手をするとWindows XP Embededのビジネスに影響を与える恐れがあるためだろう。しかし、私が今回VNC ViewerをPEに入れてみたのも、イザという時のシステム修復時に効率良く作業を進める環境を整えるためだ。もし、常用的にPCをThin Client的に使うのであれば、悪けどWindows系は使わずにLinuxをベースとする。Linuxは多くのディストリビューションでメモリだけで動作するLinuxカーネルを用意していて、CDブートもネットワークブートもできるし、もちろんVNCなども利用できる。そちらをカスタマイズした方がWindows PEの環境よりも使いやすいThin Client環境を実現することができる。Windows PEはあくまでもシステム修復のためにしか使う予定はない。なぜ、WinPEを使うと言えば、Windows OSの修復にはWindows系のOS環境で作業した方が確実だからだ。Windows系のOSのシステム修復にLinuxを利用することも可能だが、使えるコマンドなどに限界がある。
*3:nu2のホームページを見ると、nu2menuのページに"Nu2Menu Dynamic shell for BartPE / WinPE"と書いてある。つまり、WinPE上での製品としてちゃんと作られているようだ。今はβ版扱いなので無償だが、正式に製品化されると有償になっちゃうのかな。