Palm84 某所の日記

死のうは一定、しのびクマには何しよぞ...

「Windows 回復環境」のisoイメージを作るの巻

INDEX

これってなに?

f:id:palm84:20181223071233p:plain

Windows 7 では...

※ あっと、Windows 7 では元々インストール済みかな

f:id:palm84:20181223071239p:plain

※ Windows 7 では、コントロール パネルの「バックアップと復元」からCDも作成できるのですな。CD作成してイメージを取ればいいだけですね。

DVD(R/RW)ドライブがないとかカスタマイズしたい場合とかは下記の方法で作ってみてもいいかも。(※ Windows 7 用の Windows AIK

Windows Vista(7) のインストールDVDでブートした際にメニューにある「システム回復オプション」(「コンピュータを修復する」)だけ抜き出してisoイメージを作りまする。サイズは 160 MB 程(※ 7 では 175 MB程)なのでDVDでなくCDブートで可能、USBメモリやネットワークブートも楽になります。内容は Windows PE 2.0(2.1かな?、7 では3.0?)に修復ツールなどを追加したものと言っていいかと。普通のPEと同様にコマンドラインからネットワークなど利用可能なのである。

メーカー製PCだとHDにインストール済みの場合もあるかと(F8 or F5 キーでブートメニュー表示)。7 では標準でインストールされてます。

要するに 7 の「システム修復ディスク」モドキを作るわけです。

必要なもの

7-Zip をインストールしとけば、isoやwimイメージの中身の確認や展開ができるので便利。

【追記】Windows 7 では...

C:\RecoveryWinre.wim がありました。これを使ってできるかも?

  • Winre.wim の取り出し(コマンド プロンプトを「管理者として実行」)
C:\Windows\System32>dir /a-d/b/s c:\recovery
c:\recovery\<SID文字列>\boot.sdi
c:\recovery\<SID文字列>\Winre.wim

C:\Windows\System32>xcopy c:\recovery\<SID文字列>\Winre.wim d:\ /h
C:\Windows\System32>attrib -s -h d:\Winre.wim

d:\ にコピーする場合

【さらに追記】メーカー製PCでは...

隠しパーティション(Win RE用専用パーティション)に Winre.wim が置かれてる場合が多いみたい?この場合は、Linux LiveCD などで取り出す必要があるかも。(「システム回復オプション」のコマンド プロンプトからなら見えるかも?)

【追記】あっと、7 では「システムイメージ」を作成、「ディスクの管理」から「VHDの接続」でマウントしてコピーするって手もありますた。

して、その手順は

下記ページが至極参考になり申しました。

Vista Home Premium SP2上にてOEM(DSP)版DVD、クライアントモード・x86用で作ってみたなり。

  1. 「Windows PE Tools コマンド プロンプト」(Deployment ツールのコマンド プロンプト)を管理者として実行
  2. PE 基本イメージを作業ディレクトリ (\ISO) に展開
  3. インストールDVDの boot.wim\mount に書き込み可能でマウント
  4. ImageX など追加、設定ファイル作成
  5. winpeshl.ini を作成
  6. winre.wim の変更を保存
  7. isoイメージ作成

※ 作業ディレクトリパスに空白があるとisoイメージ作成ができぬ模様なのでご注意をば。

  • 「Windows PE Tools コマンド プロンプト」を管理者として実行
  • 適当に作業ディレクトリ作成
  • 変数をセット
    • %DVD% はDVDドライブ、または内容を保存したディレクトリを指定
mkdir d:\test
set "AIK=%ProgramFiles%\Windows AIK"
set DVD=G:
set makedir=d:\test\WinRE_x86
  • PE 基本イメージセットを作業ディレクトリ (\ISO) に展開

※ x64 なら amd64 を指定

copype.cmd x86 "%makedir%"
  • インストールDVDの boot.wim から INDEX 2 をエクスポート
  • \mount に書き込み可能でマウント
imagex /export /boot "%DVD%\sources\boot.wim" 2 "%makedir%\winre.wim "Windows Recovery Environment"
imagex /mountrw %makedir%\winre.wim 1 %makedir%\mount

※【注意】この場合元のwimファイルは %DVD%\sources\boot.wim を検索指定してます。【2】でだめな場合は【1】を指定してみませうC:\Recovery\xxx\Winre.wim を使う場合は1行目は不要だと思われます

  • ImageX など追加
copy "%AIK%\Tools\x86\imagex.exe" %makedir%\mount\Windows
copy "%AIK%\Tools\PETools\x86\BootSect.exe" %makedir%\mount\Windows\System32

BootSect.exe元々入ってると思いますが念のためです(汗。Vistaの boot.wim には入ってなかったので。7 の boot.wim には入ってた。

  • ImageX用設定ファイル Wimscript.ini を作成
  • %makedir%\mount\Windows\ に保存
[ExclusionList]
ntfs.log
hiberfil.sys
pagefile.sys
"System Volume Information"
RECYCLER
Windows\CSC

[CompressionExclusionList] 
*.mp3
*.zip
*.cab
\WINDOWS\inf\*.pnf
  • winpeshl.ini を作成
  • %makedir%\mount\Windows\system32\ に保存
[LaunchApp]
AppPath=x:\sources\recovery\recenv.exe 
  • winre.wim の変更を保存
imagex /unmount /commit %makedir%\mount 
  • boot.wim として入替
copy /y %makedir%\winre.wim %makedir%\iso\sources\boot.wim
  • isoイメージ作成
oscdimg -n -b%makedir%\etfsboot.com "%makedir%\ISO" "%makedir%\WinREx86.iso"

WinREx86.iso が完成イタシマシタ。

ドライバの追加

「winre.wim の変更を保存」前に実行しませう

※ パスは実際のものに合わせてくださいまし。

peimg /inf=D:\pcnet\WinServer2003_SignedDriver\netamd.inf %makedir%\mount\windows

Windows 7(PE 3.0)の場合は、

dism /image:%makedir%\mount /add-driver /driver:D:\pcnet\WinServer2003_SignedDriver\netamd.inf
【追記】メモ帳の「開く」画面ですべてのファイル・拡張子を表示

「winre.wim の変更を保存」前にバッチファイルを作っておきませう。

  1. 下記バッチファイル作成、ファイル名は ShowAll.cmd とする
  2. \mount\Windows\system32\ に保存
@echo off
set RegKey=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
reg add %RegKey% /v Hidden /t REG_DWORD /d 0x00000001
reg add %RegKey% /v HideFileExt /t REG_DWORD /d 0x00000000
reg add %RegKey% /v SuperHidden /t REG_DWORD /d 0x00000001
reg add %RegKey% /v ShowSuperHidden /t REG_DWORD /d 0x00000001
reg query %RegKey%

回復環境起動後のコマンド プロンプトにて、showall と打つべし。

※ メモ帳の「開く」画面では【ファイルの種類】で「すべてのファイル」を指定するべし。

Winre.wim を使う場合

インストールDVDがなく、HD上で見つけた winre.wim を使う場合はこんなかんじでできるはずです。

  1. 「Windows PE Tools コマンド プロンプト」(Deployment ツールのコマンド プロンプト)を管理者として実行
  2. PE 基本イメージを作業ディレクトリ (\ISO) に展開
  3. winre.wim\mount に書き込み可能でマウント
  4. ImageX など追加、設定ファイル作成
  5. winpeshl.ini を作成
  6. winre.wim の変更を保存
  7. isoイメージ作成
  • 「Windows PE Tools コマンド プロンプト」を管理者として実行
  • 適当に作業ディレクトリ作成下記の例では D:\test
  • 変数をセット
mkdir d:\test
set "AIK=%ProgramFiles%\Windows AIK"
set makedir=d:\test\WinRE_x86
  • PE 基本イメージセットを作業ディレクトリ (\ISO) に展開

※ x64 なら amd64 を指定

copype.cmd x86 "%makedir%"

ここで winre.wimD:\test\WinRE_x86 へコピーしておく

  • \mount に書き込み可能でマウント
imagex /mountrw %makedir%\winre.wim 1 %makedir%\mount

後は「ImageX など追加」からと同じで。

マルチブートで活用するでござる

※と、言いつつ別マシンで使えぬものですが。お好みの方法を選択すべし。

サイズが小さいのでマルチブート設定が簡単になりまする。

正式な手段ではござらぬが、isoイメージをそのまま利用する方法なり。

と、言いつつ概略だけでありんす。

CD/DVD

BCDW(Bootable CD Wizard) とGRUB for DOS を使いまする。

  1. 仮想CDルートに WinREx86.iso をコピー
  2. 仮想CDルートに GRUB for DOS の grldr をコピー
  3. bcdw.ini の編集
  4. menu.lst の編集
  • bcdw.ini
[MenuItems]
C:\                             ; Boot from drive C: ; boot from HDD
\grldr                          ; GRUB for DOS
:PowerOff                       ; * Power Off
:Reboot                         ; * Reboot
  • menu.lst
color white/blue yellow/cyan

# jp106 keypad
setkey at bracketleft
setkey doublequote at
setkey ampersand caret
setkey quote ampersand
setkey parenleft asterisk
setkey parenright parenleft
setkey underscore parenright
setkey equal underscore
setkey plus colon
setkey colon quote
setkey asterisk doublequote
setkey bracketleft bracketright
setkey braceleft braceright
setkey bracketright backslash
setkey braceright bar
setkey backslash backquote
setkey tilde plus
setkey caret equal
setkey backquote braceleft
setkey bar tilde


title Windows Recovery Environment (from /WinREx86.iso)
map /WinREx86.iso (0xff) || map --mem /WinREx86.iso (0xff)
map --hook
chainloader (0xff)
 
title * back to BCDW menu
chainloader --raw /bcdw/loader.bin

title * reboot
reboot

title * halt
halt

※ 読み込みがかなり遅い場合は title 下の行を修正した方がいいかも。

map --mem /WinREx86.iso (0xff)
  • mkisofs コマンドのオプション(※ あくまでワタシ流ですが...)
mkisofs -iso-level 4 -r -hide TRANS.TBL -T -b "bcdw/loader.bin" -c boot.cat -no-emul-boot -boot-load-size 4 -V "BCDW_CD" -o "作成isoパス" "仮想CDディレクトリパス"
  • 【注意】GRUB for DOS のキーボード配列
    • バックスラッシュ \半角
    • バー |Shift-半角
    • アンダースコア _Shift-0
USBメモリ

SYSLINUXGRUB for DOS を使いまする。

  1. USBメモリへ SYSLINUX をインストール
  2. USBメモリのルートに WinREx86.iso をコピー
  3. USBメモリのルートに GRUB for DOS の grub.exe をコピー
  4. syslinux.cfg を編集
  • syslinux.cfg
LABEL WindowsRE
KERNEL /grub.exe
APPEND --config-file="map /WinREx86.iso (0xff) || map --mem /WinREx86.iso (0xff);map --hook;chainloader (0xff)"
ネットワークブート

PXELINUXGRUB for DOS を使いまする。

  1. TFTPルートに WinREx86.iso をコピー
  2. TFTPルートに GRUB for DOS の grub.exe をコピー
  3. pxelinux/default(など※)を編集
  • pxelinux/default
LABEL WindowsRE
KERNEL /grub.exe
APPEND keeppxe --config-file="pxe basedir /;map --mem (pd)/WinREx86.iso (0xff);map --hook;chainloader (0xff)"

または memdisk

LABEL WindowsRE
KERNEL /memdisk
INITRD /WinREx86.iso
APPEND raw iso
HDから

【2010.2.28修正】※ コマンド内容を修正しました。device boot は、C:\Boot がある場合でした。お許しあれ。

私の第1目的はこれだったりします。(DVDドライブ付いてないでおま)

Windows ブートマネージャー(bootmgr) に GRUB for DOS を登録してチェインロードさせまする。

set back_dir=C:\BCD_backup
mkdir %back_dir%
bcdedit /export "%back_dir%\bcd"
for /f "tokens=2 delims={}" %x in ('bcdedit /create /d "GRUB for DOS" /application bootsector') do set "guid={%x}"
bcdedit /set %guid% device device partition=C:
bcdedit /set %guid% path \grldr.mbr
bcdedit /displayorder %guid% /addlast
bcdedit /enum all

確認ができたら、C:\grldr, grldr.mbrmenu.lst(上で書いてる)を保存して下され(※ エクスプローラーは「管理者として実行」しないとだめかも)。

  • menu.lst をちょっと修正、WinREx86.iso はドライブのルートに保存
title Windows Recovery Environment (from /WinREx86.iso)
find --set-root /WinREx86.iso
map /WinREx86.iso (0xff) || map --mem /WinREx86.iso (0xff)
map --hook
chainloader (0xff)

いろいろ

  • 「コマンド プロンプト」起動後にドライバを入れる場合は、drvload <パス>\ほげ.inf などと打つべし
  • 起動時にIPアドレスは自動設定されないので、NICが認識済みなら startnet と打つべし。
DISM.exe

Windows 7(PE 3.0) では、peimg.exe はないのでマウントなども DISM でやった方がいいかもしれない。

クライアントモードとサーバーモード

上記ページに解説がありますが、サーバーモードにすると「システム回復オプション」開始時に自動修復を実行しない様にできました。

下記はクライアントモード時のもの。

  • Windows Vista

f:id:palm84:20181223071241p:plain

  • Windows 7

f:id:palm84:20181223071246p:plain

%makedir%\mount\sources\recovery\ToolsWinREConfig.xml 作成しませう。

<Recovery>
      <Server/>
</Recovery>