SAND STORM

朝ぼらけ

2012年3月1日

ImageXによる自動backupとrestore

Filed under: 未分類 — Tags: , — sajin @ 18:05

ImageXはMicrosoftが配布しているAIK(Windows Automatic Install Kit)に含まれる指定したdrive/directory以下を圧縮したimageを高速に作成・展開するtool。複数のimageをひとつのfileに圧縮して格納し、さらに事後的にそれらをfile/folder単位で操作することもできる。柔軟な除外設定が行えるのが利点。

ここでは主にramdiskのimageを保存・展開する方法について書く。


[準備と基本]

imagexは単体で配布されていないのでWAIKから取り出す必要がある。WAIKはOSごとに提供されており、Vista/7,7 SP1などでそれぞれ異なる。XP用は存在しない。また、downloadできるのはCD imageで仮想drive(DaemonToolsなど)にmountして取り出さねばならない。

AIKからimagex.exeを取り出したら、それを%windir%\system32に入れる、hardlink/symbolic linkを%windir%\system32に置く、PATHを通しておくなどしてcommand lineで打ち込みさえすれば機能するようにしておく。

実行はAIKのinstallによって出来たconsoleでやってもいいが、度々打ち込まねばならないので基本的にbatch fileをつくって処理する。※Wordpressか何かの仕様で”(double quotation)が半角から他の全角文字に置き換えられている。batchとして正常に実行するには一括置換で半角に置き換える必要あり。

・Imageの作成

imagex /capture image_path image_file name

例: imagex /capture R: ramdisk.wim “ramdisk save file”

※pathが空白を含む場合は””で囲む。

・Imageの適用

imagex /apply image_file image_number image_name image_path

例:imagex /apply ramdisk.wim 1 R:

.wim fileは複数のimageを格納できるため、file名の後にその番号を書いておかねばならない。

ImageX 構成ファイルを作成する @ Microsoft TechNet

◇OS開始時の自動適用

起動時はbatch fileをStart menuの”スタートアップ”に入れておけば自動的に実行される。

・startup用batch

@ECHO off

echo Do you deploy RamDisk image to R:?
echo Press “N” to terminate,or any other key to deploy.

set /p choice=
set choice=%choice:n=N%
if “%choice%” == “N” goto terminate else goto deploy

:deploy

imagex /apply ramdisksave.wim 1 R:

echo deployed!
pause
exit

:terminate

echo terminated!
exit

◇Windows終了時の保存

Windows Professional/Ultimate限定だが、Local group Policy editorを使ってscriptを実行させれば起動・終了ともに自動的に実行される。

Windows key+Rでgpedit.mscを起動し、起動時と終了時のscriptに割り当てる。※この方法はProfessional/Ultimateでないと使えないので、Home editionなどだとgpedit.mscは起動しない。

Microsoft DOS shutdown command

Run a batch file on Windows 7 shutdown before closing programs (preferrably on power button press) @ stackoverflow – group policyl以外でのshutdown前自動実行を模索している。

Home editionの場合、自分でimageをつくってから終了させるbatchを組んで、shutdownする際はそれを手動で実行するなどしなければならない。

・手動での選択的image保存とshutdown用batch

@ECHO off

echo Choose how shutdown Windows.
echo i = save ramdisk image and exit command prompt
echo s = save ramdisk image and shutdown
echo r = save ramdisk image and restart
echo l = save ramdisk image and logoff
echo any other key = exit command prompt without save image

set /p choice=
if “%choice%” == “i” goto takeimage
if “%choice%” == “I” goto takeimage
if “%choice%” == “s” goto shutdown
if “%choice%” == “S” goto shutdown
if “%choice%” == “r” goto restart
if “%choice%” == “R” goto restart
if “%choice%” == “l” goto logoff
if “%choice%” == “L” goto logoff
goto exit

:takeimage
echo imagex /capture R: ramdisksave.wim “RamDisk”
echo really? [Y/N]
set /p approve=
set approve=%approve:y=Y%
if not “%approve%” == “Y” goto exit
imagex /capture R: ramdisksave.wim “RamDisk”
pause
exit

:restart
echo imagex /capture R: ramdisksave.wim “RamDisk”
echo shutdown -r
echo really? [Y/N]
set /p approve=
set approve=%approve:y=Y%
if not “%approve%” == “Y” goto exit
imagex /capture R: ramdisksave.wim “RamDisk”
shutdown -r
pause
exit

:shutdown
echo imagex /capture R: ramdisksave.wim “RamDisk”
echo shutdown -s
echo really? [Y/N]
set /p approve=
set approve=%approve:y=Y%
if not “%approve%” == “Y” goto exit
imagex /capture R: ramdisksave.wim “RamDisk”
shutdown -s
pause
exit

:logoff
echo imagex /capture R: ramdisksave.wim “RamDisk”
echo shutdown -l
echo really? [Y/N]
set /p approve=
set approve=%approve:y=Y%
if not “%approve%” == “Y” goto exit
imagex /capture R: ramdisksave.wim “RamDisk”
shutdown -l
pause
exit

:exit
exit

image保存後、shutdown/restart/logoffを行うのに停止する必要がないならexitの上のpauseを消す。

Y/Nによる実行前確認が必要ないなら

echo really? [Y/N]
set /p approve=
set approve=%approve:y=Y%
if not “%approve%” == “Y” goto exit

を消す。

◇自動での定期日付時刻付加image作成

・日付時刻付加image作成batch

@ECHO off

set dd=%date%
set dd-year=%dd:~0,4%
set dd-month=%dd:~5,2%
set dd-day=%dd:~8,2%
set tt=%time%
set tt-hour=%tt:~0,2%
set tt-minute=%tt:~3,2%

set ddtt=%dd-year%-%dd-month%-%dd-day%_%tt-hour%-%tt-minute%

echo date=%date%
echo dd-year=%dd-year%
echo dd-mont=%dd-month%
echo dd-day=%dd-day%
echo time=%tt%
echo tt-hour=%tt-hour%
echo tt-minute=%tt-minute%
echo attatch date = %ddtt%

imagex /capture R: “[保存path]\ramdisk%ddtt%.wim” “RamDisk”
pause
exit

上は日付時刻を付加したimageを作成するbatch。これをtask schedulerで定期実行させる。

・task作成batch

SCHTASKS /Create /SC DAILY /ST 05:25:00 /TN “task name” /TR “[実行するprogram/batchなどのpath]”

このtaskを常駐させていると際限なくimage fileが増えてdisk spaceを圧迫するので注意。

◇Schtasks

Microsoft Windows XP – Schtasks

GUIでつくるtaskではDOSのbatchが機能しないが、Schtasks.exeで作成したtaskならbatchを働かせることができる。
例えば、

SCHTASKS /Create /SC DAILY /ST 05:25:00 /TN “imagex-auto-save” /TR “C:\Programs\Windows\imagex\imagex-save-withdate-auto-exit.bat”

とするとimagex-auto-saveという名前のtaskがつくられ、C:\Programs\Windows\imagex\imagex-save-withdate-auto-exit.batのbatchがDAILY=毎日、05:25:00に実行される。このSchtasks.exeでつくったtaskはGUIのtask schedulerから確認したり実行することも可能だし、好きな時間に好きな間隔で実行できる。

例えば、

SCHTASKS /Create /SC HOURLY /MO 12

とすれば十二時間ごと、即ち一日二回実行になる。/MOは/SCでの設定と連動し、/SC DAILY /MO 3なら三日ごと、/SC MINUTE /MO 30なら三十分ごとになる。

※/TRで指定するpathやfile nameが半角空白を含むと、例え””で囲っていてもtask scheduler側の解釈が正常に行われず機能しない。もしspaceを含むpath内のものを実行させるなら、task scheulerから一旦該当taskをexportして、.xmlを編集して修正しimportするか、一時的にjunction/symbolic linkで空白を含まないpathにpointerを置いてそれ経由で実行させる。

junction -d “%TEMP%\Dungeon_Crawl”
junction “%TEMP%\Dungeon_Crawl” “C:\Game\RPG\[Roguelike]\Dungeon Crawl”
SCHTASKS /Create /SC MINUTE /MO 1 /TR “%TEMP%\Dungeon_Crawl\DingeonCrawl-autosave.bat” /TN “DingeonCrawl-AutoSave” /F
“C:\Game\RPG\[Roguelike]\Dungeon Crawl\crawl.exe”
SCHTASKS /Delete /TN “DingeonCrawl-AutoSave” /F
junction -d “%TEMP%\Dungeon_Crawl”

上は一例。

◇不用file/directoryの除外

・/capture,/compress時における特定file/folderの除外

imagex.exeのある場所にwimscript.iniを新規作成>text fileでつくる。

そこに

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

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

といった形で記述していく。[ExclusionList]が含入除外file/folderで、[CompressionExclusionList]が圧縮しないfile/folder。上に書いてあるのはdefaultで除外されているfile/folder。pagefileやごみ箱はimageに含まないし、.mp3や.zipなど元から圧縮されているものをまた圧縮しないという設定。

\$ntfs.log
\hiberfil.sys
\pagefile.sys
"\System Volume Information"
\RECYCLER
\Windows\CSC

は本来記述する必要がなく、imagex.exeが最初から除外規定している。これを外すには[ExclusionException]に上記の記述を移さなければならない。[ExclusionException]はそのためだけに存在する。

imagex /capture実行時に表示されるのはこのdefaultで規定されているものだけで、後から追加されたものは処理されたかどうか一切表示されないので、自分で処理結果を見て確かめなければならない。

そもそもwimscript.ini自体が読み込まれているかどうかは[ExclusionException]に[ExclusionList]のdefault記述を移せば処理時に表示されなくなるので判明する。※恐らく日本語環境ではSJIS/ANSI以外で保存すると読み込まれない。UNICODEなどは駄目。

相対path,絶対path(C:\user\koko\incur.txtなどpathをすべて記述)どちらでもよい。ただし、%TEMP%などSETで代入した変数は処理できない。

相対pathはimagex.exeの存在する場所からではなく、image化を指定した場所からcountされる。

\myfolder
\folder\subfolder

[ExclusionList]にこう指定した場合、/capture C:\をすると

c:\myfolder
c:\folder\subfolder

上のpathは除外されるが、

c:\main\myfolder
c:\data\folder\subfolder

このpathでは除外されない。

◇事後操作

中身を見るだけなら7zipなどで開けば確認できる。操作する場合はimageを特定のpathにmountする必要がある。

imagex /mountrw image_file image_number image_name image_path {/check}

例: imagex /mountrw d:\imaging\data.wim 2 c:\mounted_images

/mountrwでないと中身を変更できない。image_pathに操作可能な形で現れるので追加・削除など自由に行える。

Mount and Modify an Image @ Microsoft TechNet

ImageX Command-Line options


[Link]

GImageX – GUI interface

管理者必携! 最強のデータ・サルベージ・ツールを自作する2.Windows PE 2.0による起動ディスクの作成手順(1) | @IT
やさしい講座 ~第28回 WindowsXPシステムのバックアップ手順~ @ パソコン三昧

関連記事

1 Comment »

  1. An A-Z Index of the Windows CMD command line
    http://ss64.com/nt/

    List of Windows and DOS Command Prompt Environment Variables
    http://www.mydigitallife.info/list-of-windows-and-dos-command-prompt-environment-variables/

    Command Availability Across Microsoft Operating Systems
    http://pcsupport.about.com/od/commandlinereference/a/command-availability.htm

    なぜdeltreeが消えたのだろう

    Comment by sajin — 2012年1月1日 @ 14:47

RSS feed for comments on this post. TrackBack URL

Leave a comment


sand-storm.net