第18章 大きなイメージファイルをそのまま起動する

期待の星 GRUB for DOS

第6章において、イメージファイルのファイル名をbcdw.iniに記述するだけで、BCDWからチェーンロードする例を示した。

[MenuItems]
C:\                  ; Boot from drive C:
\hal91.img           ; HAL91
\rescue-0.9.0.img    ; BG Rescue
\memtest.iso         ; MemTest86
:PowerOff            ; Power Off

ところが次の第7章では一転して、イメージファイルをわざわざ展開しないと上手く行かない例を示した。一般的にイメージファイルのサイズが大きくなると、イメージファイル名直接指定方式では上手く行かなくなることが多い。

しかしもしも第6章のようなシンプルな方式で、あらゆるイメージファイルからブートさせる事ができれば、マルチブータブルCD/DVDの製作はとても簡単なものになる。第15章のような職人的方法は、もはやマルチブートを実現すること自体が目的になってしまっていて、とても汎用的な方法とは言えない。マルチブート化という作業は、自分にとって使いやすい『詰め合わせ』を手軽に作れることが大事で、専門的な知識とややこしい手順を要するようではいけない。手軽さが無ければ、シングルブータブルメディアを複数作った方がよほどラクだということになってしまう。

第9章でも登場した【GRUB for DOS】は、この夢を実現しつつある。イメージファイル名直接指定機能が進化しており、BCDWではブート出来ないイメージファイルでも起動可能にしている。現状で残念ながらすべてのイメージファイルに対応しているわけではないが、これからの更なる進化に期待して、この章で簡単に紹介しておこうと思う。

GRUB for DOSの入手

GRUB for DOS のダウンロードページで最新版を探す。(私がこれを書いている時点では、grub4dos-0.4.4.zip であった。) これをダウンロードしてzip展開する。今回は中身のgrldrとmenu.lstの2つのファイルだけを使用し、残りは削除してかまわない。

BCDWの場合と同じように、ハードディスク上にxという名前(名前は何でも良い)の空の新規フォルダを作り、grldrとmenu.lst、および1.isoと2.isoという名の2つのブータブルイメージファイルをそのフォルダ内に入れる。すなわち以下のようなシンプルな階層構造になる。

x
├ grldr
├ menu.lst
├ 1.iso
└ 2.iso

menu.lstの書式

BCDWのbcdw.iniに相当する設定ファイルがmenu.lstである。今回入手したmenu.lstをテキストエディタで開いて中身を見てみると、書式などが参考になるだろう。

しかしbcdw.iniの時と同じように、今回もバッサリと中身を全て消してしまおう。そして次のように記述する。

color white/light-blue yellow/cyan light-gray/magenta white/light-red

title No.1
find --set-root /1.iso
map /1.iso (0xff) || map --mem /1.iso (0xff)
map --hook
chainloader (0xff)

title No2
find --set-root /2.iso
map /2.iso (0xff) || map --mem /2.iso (0xff)
map --hook
chainloader (0xff)

title reboot
reboot

title halt
halt

colorで始まる1行目は、メニューの色指定である。使える色は、 black, blue, green, cyan, red, magenta, brown, light-gray, dark-gray, light-blue, light-green, light-cyan, light-red, light-magenta, yellow, whiteである。それを 文字色/背景色 の形式で書いていく。1組目が中央のメニュー項目欄、2組目が選択項目、3組目が下部の操作説明欄、4組目が表題欄である。仕切りの空白は半角スペースを使う。どのように反映されるのかは、下のGRUB for DOSのメニュー画面を参考にして欲しい。

GRUB for DOSメニュー画面

この行を記述することは必須ではなく、省略すればモノクロ表示になる。機能的にはそれで十分である。

そして次の行から5行に渡る段落が1つの塊と考えればよい。最も重要な部分であるが、専門的な文法を理解する必要はない。興味のある方のみが調べれば良いと思う。一種の定型句としてファイル名のみ置換していけば、十分に使いこなせる。

title行はメニューに表示される項目名になる。(上のメニュー画面参照)

find --set--root /<イメージファイル名> で起動したいイメージファイル名を直接指定する。find --set-root /<サブフォルダ名>/<イメージファイル名> というふうに階層を深くすることも可能だが、せっかくシンプルに指定できるのだから単一階層が良いと思う。grldr/menu.lstの存在する階層にイメージファイルを一同に集めてしまえばよいのだ。

map /<イメージファイル名> (0xff) || map --mem /<イメージファイル名> (0xff) の行は少し説明をしておこう。命令A||命令Bと書くと、まずAという命令を実行し、成功すると命令Bは実行されずに省略される。命令Aを実行したが失敗した時にのみ命令Bが実行されるというような流れになる。mapは、指定したイメージファイルを仮想CD/DVDメディアと考え、(0xff)という名前の仮想CDドライブに装填する命令と捉えておけば分りやすいと思う。 --mem は、イメージファイルの中身を一旦すべてRAMにロードするというオプションだ。ここまでのことをまとめると、まずは通常の方法でイメージファイルを仮想CDにマウントすることを試み、もしもエラーが出たときには、RAMに全ての中身をロードしてからマウントするという命令であることが分る。

そしてmap --hookchainloader (0xff) の2行で、指定したイメージファイルにgrldrからチェーンロードするのである。イメージファイルを展開したり、ブートイメージやブートセクタを抽出したりといった面倒な手間は全く必要ないのである。

ちなみに、title rebootやtitle haltの部分はまさしく定型句で、それぞれ「再起動」「シャットダウン」を行う命令である。

実例

1.isoとか2.isoとかでは実感が湧かないだろうと思うので、実例を示そうと思う。

1つめは第8章でも登場したおなじみの【UBCD】を取り入れる。これを書いている時点ではV5.02が最新版なのでそれを使っている。

2つめは、無料で使えるのにも関わらず高性能ということで最近大人気のバックアップソフト、【Paragon Backup & Recovery Free Edition】を取り入れてみる。

UBCDはISOファイル形式で配布されているのでそのまま使えるが、Paragonの方はユーザー登録してシリアルをもらい、一旦インストールしてからリカバリーメディアを作るというような手間が掛かるので、ここでは登録・インストール不要の簡易法を使おう。まず上記公式サイトからFree版を普通にダウンロードしてくる。br_free.msiというファイルである。このファイルを、拙作msi2fileを使って展開するとbootcd.isoという名前のファイルが見つかるはずだ。これがブータブルメディアのイメージファイルである。今回はこのファイルだけを利用しよう。

x
├ grldr
├ menu.lst
├ ubcd502.iso
└ bootcd.iso

menu.lstの書式は以下のようになる。先ほどの1.iso/2.isoをそれぞれubcd502.iso/bootcd.isoに変更してある。(ちなみに色設定も少し変えた。お好みでご自由に。)

color white/blue yellow/cyan white/red white/magenta

title UBCD
find --set-root /ubcd502.iso
map /ubcd502.iso (0xff) || map --mem /ubcd502.iso (0xff)
map --hook
chainloader (0xff)

title Paragon Backup & Recovery Free Edition
find --set-root /bootcd.iso
map /bootcd.iso (0xff) || map --mem /bootcd.iso (0xff)
map --hook
chainloader (0xff)

title reboot
reboot

title halt
halt

UBCDについては、第8章と違い丸ごとイメージファイルを指定してあるだけだ。第8章の苦労は何だったんだと感じる。またParagonの方も丸ごとイメージ指定で超簡単だが、これもBCDWでチェーンロードしようとすると、実はすごく難しいのだ。bcdw.iniに比べればmenu.lstの方が記載は難解だが、その他の部分が桁違いにラクなので、十分おつりが来る。

ブータブルCD/DVDイメージの作成

ここまでの作業で作ってきたxフォルダ以下の構成をブータブルCD/DVDイメージファイルに変換する。使用するソフトは【CDRecord フロントエンド】である。以下、順次画面の通りに入力していって欲しい。気をつけるところは赤く印を付けてある。なお、以下の例では(上の段落で作った)xフォルダは、Dドライブのルートにあることを想定している。これ(4つ目の画面の「ISOイメージの構築元ディレクトリ」)に関しては、各自の環境でのxフォルダのパスを指定する。 また、9つ目の画面の「ISOイメージの出力先」も任意の場所で良い。なお、【CDRecord フロントエンド】の普遍的な解説は第4章を参照して欲しい。

以下の設定は一例であり、これで全てOKというものではなく、ケースバイケースで試行錯誤する必要がある。

タスクの選択
ファイル名規則・対応環境の設定
ISO互換性オプションの設定
構築元ディレクトリ・ブートの設定
ブータブルの詳細設定
ファイルとフォルダの設定
HFS/Rockridgeの設定
ID設定
ファイル出力設定
10 確認と構築画面

以上の操作によって、この例では、Dドライブのルートにrescue.iso という名のイメージファイルが出来上がる。

イメージファイルをCD-R(W)などにライティング

あとは、完成したイメージファイル(rescue.iso)を、CD-R(W)/DVD±R(W)などに焼くだけだ。いつもご自分が使い慣れたソフトで良いと思う。ただし、イメージファイルとして焼くことをお間違いなく。ISOをそのままファイルとして焼いてしまうようなことがないように。

適切なライティングソフトを持っていない人は、上で使った【CDRecord フロントエンド】でもできる。最初の画面で「ディスクイメージをメディアに書き込む」を選べばよい。ただし【CDRecord フロントエンド】はDVDライティングに関しては、最適とは言いがたいように感じる。もし、「フリーソフトで何が良いか?」と問われれば、大定番ソフトの【ImgBurn】を推薦する。

実際の使用法

完成したCD/DVDをドライブに入れ、PCを起動する。BIOSでHDDよりもCD/DVDドライブの起動順位を優先しておくことは言うまでもない。

GRUB for DOSメニュー画面

ここでキーボードの上下矢印キーで項目を選んでEnterキーを押せば、選んだ項目が起動する。たとえばParagon...を選ぶと以下のようになる。

Paragon起動画面

注意点

【GRUB for DOS】でチェーンロードできるCDイメージファイルと不可能なCDイメージファイルがある。私もいろいろ試しているが、こればかりは実際に試してみないと分らない。

まず、Windows PE系のものはかなりいける。これは非常にありがたい。最近は市販ソフトでも、レスキューメディアとしてWindows PEの技術を応用しているものが多くなってきているようで、これらをマルチブート化することができる。もちろん自分で使ったPEもマルチブート化できる。

AcronisのTrue ImageやDisk Directorとも相性が良いようだ。最近のAcronisはLinux系とWinPE系の2種類のレスキューメディアを作れるようになっているが、どちらも大丈夫そうだ。

ただし本格的にバックアップ・リストアやパーティション操作を試してみたわけではないので、もしかするとGRUB for DOSを介することで何か問題が出るかもしれない。リストアやパーティション操作などは途中でフリーズしたりすると甚大な被害をこうむるので、仮想PCとか壊れても良いような環境で十分にテストしてから実際の運用をした方が良いだろう。

逆に駄目なのがKNOPPIXやPuppy Linuxなどだ。Ubuntuに関しては、このページに説明しているmenu.lstの記述方法では起動しないが、kernel initrdなどと具体的に書くと起動可能だ。

上記の内容および、より高度な内容に関しては、Palm84氏の「GRUB for DOS めも」および「isoイメージをマルチブートするの巻」をお読みいただくことを薦める。さすがスペシャリストという情報にあふれている。

また英語を苦にしない人は、Boot Landのフォーラムを読むと、成功例が投稿されていて参考になると思う。

今後のGRUB for DOSのアップデートで、今は起動できないCDイメージも起動できるようになることを期待している。

その他の問題点としてはメモリの容量の問題がある。map --memはもちろん、そうでなくても結構メモリを食うと思われる。最近は2GB以上のメモリを搭載するPCが多くなったが、メモリが少ない場合には動作が非常に遅いとか、起動途中で止まるとかのトラブルが起こるかもしれない。

また、マルチブートイメージ作製時にイメージファイルが断片化してしまうと、完成物の動作エラーが出てしまうこともあるらしい。数百メガバイトから数ギガバイトのファイルも扱うわけだから、必ずしも連続した領域に存在しているとは限らないということだろう。小さなイメージファイルのときには問題にならなかったことが問題になりえる一例だ。

<目次へ> <前の章へ>