2012年1月14日土曜日

リカバリで使用するバッチメニューを作成してみた。

昨日、NECのリカバリ領域(LL370)の秘密、特にGHOSTイメージのパスワード(笑)を解き明かした(つもりになっている)ので、これに気を良くしてハードディスクに格納されているOS全部をトイレに行っている間にリカバリしてしまおう、という企画。
基本的にウイルス対策ソフトも遅くなるから使わず、かといってウイルス対策をしないわけじゃない。
今行ったサイトが怪しいとか、一週間に一回とか、会社に朝早く出社した時とか、そんな時にこいつを出してリカバリしちゃえばとりあえずのウイルス対策になり得る。しかし、こいつで用いる元ネタ(GHOSTファイル)はそれなりに使用に耐えるところまで構築しなければならないが、今さっきリカバリしたらAdobe Readerが入っておらず、シマンテックのGDISKのマニュアルが読めなかった(笑)。
しかも、前述のようにアプリケーションを入れた時とか、Windowsアップデートが来た時とか、面倒くさいことこの上ない。Sysprep前のイメージに一回戻しWindowsアップデートしてからアプリケーションを入れ、Windowsアップデートして…、完了したらWindowsアップデートのゴミを取り、履歴等を削除、この時点で不要なユーザーを極力削除、\Sysprep内に展開したSysprepを実行、再シールして、さらに違うパーティションから起動し、Administratorのプロファイルとpagefile.sys(スタンバイ用)やhiberfil.sys(休止モード用)を削除してからGHOSTイメージにしている。まあ、これも趣味だし…。

その際のイメージの元ネタとしては、適当なアプリを入れOSやアプリのアップデートを行なってから、IEの標準設定をレジストリでgoogleにしたり、壁紙設定したものを全ユーザに配布する目的でDefault Usesにプロファイルをコピーしたものになっている。こうすると、GHOST元ネタ作成の際の手数が少しは軽減される(ような気がする)。

さて、本題である。
当方のD430のハードディスク内は下記のパーティションで構成される。基本的にすべてプライマリパーティションで構成されるが、Linuxを複数入れたい、とか、Windowsをこれ以上扱いたい、となると当然拡張パーティションを使用しなければならないので、GDISKやGHOSTを拡張パーティションでどのように扱うかなど不安な部分があるので挑戦はしていない。通常LinuxやBSDはディレクトリごとパーティションにしてしまい、マウントしてやるのが本来のルールであるがそうするとかなり面倒なことにやるので『/』パーティション一つにして遊ぶのがここ十数年の私の姿である。また、SWAPパーティションも必要であるが最近の機器はメモリ自体を豊潤に積んでいるので、この機器からはSWAPを作ることをやめてしまった。

【ハードディスク内容】
パーティション1 … Windows XP Professional (SP3)
パーティション2 … Vine Linux 6
パーティション3 … Windows 7 Home Premium
パーティション4 … リカバリ領域(PE)

GHOSTイメージやメーカーのリカバリツールが入っているのは、PEのRESTOREフォルダ内となっている。Windows XPのみフォルダの外にいるが、これはXPのイメージのみメーカーのツールを流用することにしたためである。

【RESTOREフォルダ内容】
リカバリ領域のレイアウトは下記のとおりである。



Windows PEが起動した時に、WINPESHL.EXEが読み込まれるのだが、この定義ファイルがWINPESHL.INIである。しかし、以降のVistaベースのPEと比べてこの時のPEはなんて扱いが楽なんだろう…。こいつにリカバリメニューを記載したSTART.BATを呼び出させる。

【WINPESHL.INI】(\MININT\SYSTEM32内)
[LaunchApp]
AppPath = %SYSTEMROOT%\System32\START.BAT
;AppPath = %SYSTEMROOT%\System32\CHKENV.exe

リカバリメニュー自体は簡単に作成。PE上のメンテも同時に出来ることからリカバリ以外のメニューも入っている。
最後のPOWOFF.EXEはメーカー提供のものだけれども、いつが何をやっているかは謎。また、最後に当該リカバリ領域を非表示にしたり、XP起動領域をアクティブにしたり。こいつをやってしまうと、Windowsからいじくれなくなってしまうので、GHO元ネタを作成した後は表示のコマンドを打ってやるとか、Linuxでコピーかけてやるとかが必要になる…と想定したが、今Linuxでマウントしたところ、Windows側でも表示されてしまった…。愛嬌か。

【START.BAT】(\MININT\SYSTEM32内)

:MENU
@cls
@echo off
echo ***************** リカバリメニュー *******************
echo [1] : Microsoft Windows XP リカバリメニュー
echo [2] : Vine Linux 6 リカバリ
echo [3] : Microsoft Windows 7 リカバリ
echo [4] : Microsoft Windows PE コマンドシェル
echo [5] : Microsoft Windows PE メモ帳
echo [6] : Norton GHOST の起動
echo [7] : リカバリ領域の非表示とWindows領域のアクティブ化
echo [8] : このメニューを終了
echo ******************************************************
set /p NUM="リカバリメニューを選択してください >"
if "%NUM%"=="1" goto WinXP
if "%NUM%"=="2" goto Vine6
if "%NUM%"=="3" goto Win7
if "%NUM%"=="4" goto CMDSHELL
if "%NUM%"=="5" notepad
if "%NUM%"=="6" goto GHO
if "%NUM%"=="7" goto END
if "%NUM%"=="8" goto POFF

goto MENU

:WinXP
%SYSTEMROOT%\System32\CHKENV.exe
goto POFF

:Vine6
@ECHO 2番目のLinuxパーティションをリカバリします。
@ECHO 心の準備ができたら何かキーを押してください。
@PAUSE > NUL
%SYSTEMROOT%\System32\GHOST32\ghost32 -clone,mode=pload,src="X:\RESTORE\Vine Linux 6\SYSTEM.GHO":1,dst=1:2,szeE -quiet -sure -fx -ntil -auto -ffi
goto END

:Win7
@ECHO 3番目のWindows 7パーティションをリカバリします。
@ECHO 心の準備ができたら何かキーを押してください。
@PAUSE > NUL
%SYSTEMROOT%\System32\GHOST32\ghost32 -clone,mode=pload,src=X:\RESTORE\Win7Home\SYSTEM.GHO:1,dst=1:3,szeE -quiet -sure -fx -ntil -auto -ffi
goto END

:CMDSHELL
@ECHO EXITでメニューに戻る
cmd

:GHO
%SYSTEMROOT%\System32\GHOST32\ghost32

:END
%SYSTEMROOT%\System32\GHOST32\gdisk32 1 /hide /p:4
%SYSTEMROOT%\System32\GHOST32\gdisk32 1 /act /p:1
X:\RESTORE\TOOLS\powoff

:POFF

【完成品のご披露】

こんなモノ俺の人生にはなんの役にも立たない…。

0 件のコメント:

コメントを投稿