Palm84 某所の日記

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

マルチブートCDの作成 - 【Bootable CD Wizard】

INDEX

about

最近こんなんばっかですみません...えー我が家のサブのデスクトップ機はUSBブートもPXEネットワークブートにも対応していませんがCDドライブはまだまだ健在なのです。CD-RWでもしっかりブートしてくれます。そんなわけでメンテナンス用にこんなCDを作ってたりします。そこはそれ的(何)私的めもシリーズ第?弾。(※別名「マイノリティ向けレポート」w)

これって実際に作ってみると非常に簡単で面白いのですが、あれやこれやと考えて私的バージョンアップが頻繁になる、つまりしょっちゅうカスタマイズ欲求が発生してしまうという弊害(?)もあったりします(汗)。あれもしたいこれもしたいで、ほとんど使わないと思われるDOSイメージなんかにやたら凝ってしまったり、とか(w。

利用可能なイメージ

LiveCD版Linuxなどisolinuxをブートローダに使っているものはisoイメージそのままでは使えませんが(※ 正確には kernel と initrd 以外にルートイメージがあるものはisoイメージそのままではだめ、ルートイメージ不要のものでもisolinuxディレクトリの重複に注意)、ファイルを適切に展開すればチェーンロード(つまり多段マルチブート)が可能。

利点など

  • FDイメージはCDライティングソフトなどで簡単にブータブルCD化できますが、CD1枚に焼くのがもったいない
  • 容量の小さなCDイメージを1枚でまとめたい
  • 複数枚のFDを使うツールをCDブートで使いたい
    • 2.88MBイメージが使えます
    • DOS版プログラムなどで2.88MBに収まらない場合は、CD-ROMドライバを組み込んだFDイメージで起動して、CD自身に保存したファイルを参照・実行することも可能。
  • (ブート可能な)USBメモリでイメージを作成すれば、2.88MBオーバーなイメージも利用可能
注意点
  • CDですので基本的に書き込みは不可。例外として、syslinux(isolinux) + memdisk 経由で起動させたFDイメージでは仮想的な書き込みが可能(あくまで「仮想的」なので変更分は保存されません)。
  • isolinuxをチェーンロードする際は多少試行錯誤が必要かも。

準備

作成手順については下記ページの解説がとても詳しくてわかりやすいです。とりあえず通読されることをおすすめ。

  • ダウンロード
  • 必要なファイルはbcdwディレクトリのみなのでそれ以外をすべて削除(bcdw2dosディレクトリも不要)

この「bcdw-2.0a1」ディレクトリが仮想CDディレクトリとなります。(名前は任意でいいです)

isoイメージ作成ツールを準備。

BCDW.INI の編集

BCDW.INIを開く。

[MenuItems]

C:\				; Boot from drive C:
\WNPE\setupldr.bin		; Bart's Preinstalled Environment
\BCDW\bcdw2dos.ima \VC\vc.com	; Volkov Commander
\I386\setupldr.bin		; Microsoft Windows XP Setup
\BCDW\bcdw2dos.ima \WIN9X\setup.exe	; Microsoft Windows 98 Setup
/linux/isolinux.bin /linux/kernel ramdisk_size=16384 initrd=/linux/rescue.gz root=/dev/ram0 rw	; Linux
\ACRONIS\tis.iso		; Acronis TrueImage Server
:PowerOff			; Power Off
:
\boot\loader.bin		; BCDW for CD Shell demo script (\boot)
\cdsh\loader.bin		; BCDW for CD Shell demo script (\cdsh)
\bscript\loader.bin		; BCDW for Boot Scriptor demo script
\bcdw\gfxdemo.ima		; BCDW for DOS demo script
\floppy.ima			; Password protected option ;;; 5ebe2294ecd0e0f08eab7690d2a6ee69

不要部分をカットする。

[MenuItems]

C:\				; Boot from drive C:
:PowerOff			; Power Off

アイテムの追加ですが、基本がこんなかんじ。isoイメージやFDイメージは仮想CDディレクトリのルートに保存したとして。

[MenuItems]
C:\                ; Boot from drive C:
\dimage.img        ; DriveImage with NetBEUI
\memtest86-3.2.iso ; MemTest86
:PowerOff          ; Power Off
【追記】ブート可能な、というか起動可能なisoイメージは?

ブートはしても(ブートローダは起動しても)、本体が起動しないものもあり。本体が起動可能なものでも、起動後に仮想CDがあるわけではないのですね。

基本的にはこんなかんじでせうか

  • BCDW上でisoイメージをマウントして一気に読み込み
  • BCDWがそのブートローダーに対応している
  • オンメモリで動くタイプのもの
  • ISOLINUXなisoイメージだと、ISOLINUX(ブートローダ)は起動してもCD内の別の isolinux.cfg が読み込まれてしまったり

アイテムの追加

isolinuxなどのブートイメージを使わないCDイメージやFDイメージ、USBメモリのddイメージ(syslinuxでマルチブート化イメージ含む)などはそのまま指定するだけで使えたのでそれ以外でファイルの展開が必要なものについてです。

isolinuxについてはisolinux.cfgを編集すればマルチブートで(labelを指定して)選択起動できます。というかisolinuxを使うOSを複数追加する場合はisolinux.cfgの編集は必須かと(多分...)。つまり、isolinuxを使うイメージが複数ある場合は、isolinux.cfgは一つにまとめる(isolinux.cfgは/boot/isolinux, /isolinux, /.の順序で検索される) ということで。この際、kernelとinitrdファイルのパスに注意すること。

Berry Linux 0.7.9 (526MB)

isolinuxではなくブート用2.88MB FDイメージを指定。

  • isoファイル内のBERRYディレクトリを仮想CDのルートに保存
  • BCDW.INI に追記
\berry\boot.img ; Berry Linux 0.7.9
SystemRescueCd 0.3.4(115MB)
  • syslinuxディレクトリ以外を仮想CDのルートにコピー

sysrcd.datだけはルートに置かないとだめなもよう(※ subdir=sysrescd などとして指定可能)。isolinux.cfgを編集すれば他のファイルについてはディレクトリにまとめてもいいようです。

  • BCDW.INI に追記
\isolinux\isolinux.bin ; SystemRescueCd 0.3.4
HTTP-FUSE-KNOPPIX501 (8MB)
  • isoファイル内のbootディレクトリを仮想CDのルートに保存

  • BCDW.INI に追記
\boot\isolinux\isolinux.bin ; HTTP-FUSE KNOPPIX501
SLAX 5.1.8(230MB+)
  • isoファイル内のすべてを仮想CDのルートに保存

  • BCDW.INI に追記
\boot\isolinux.bin  ; SLAX

追加モジュールについてはダウンロードしたモジュールを modules ディレクトリにコピーするだけ。(SLAX起動後にモジュール追加も可能)

ISOLINUXをマルチで

/boot/isolinux/isolinux.cfg があれば常にそれが優先となります。 menu.c32(vesamenu.c32) を使い BCDW.INI で指定すれば切替は可能ですが、/boot/isolinux/isolinux.cfg がなく /boot/isolinux/linux があると自動ロードされてしまうとかややこしいです。

/boot/isolinux/isolinux.cfg を大元に設定するか、/boot/isolinux/ ディレクトリがない状態で /isolinux/isolinux.cfg を大元に設定するのがいいかなと思いまする。(isolinux.bin は最新版に置換しませう)

menu.c32(or vesamenu.c32)を使うとアイテムごとにメニューの切替が可能となります。大元のisolinux.cfgからそれぞれのアイテムの設定ファイルに切替します。最初の設定は結構面倒かもですけど...

注意点が以下の通り。

  • 複数のISOLINUXアイテムをコピーすると、isolinuxディレクトリやカーネルのファイル名が重複することがある。よって、アイテムごとにサブディレクトリに分けないとややこしい。
  • ISOLINUXの大元の設定ファイルである、isolinux.cfg/boot/isolinux, /isolinux, /.の順序で検索される
  • サブディレクトリに分けた場合、アイテムごとのisolinux.cfg内のファイルのパスを変更しないといけない
  • アイテムのルートイメージの場所を変更している場合、オプションの指定が必要になることがある
【一例】:SystemRescueCd 1.0.4 と SLAX 5
  • kernel.orgからsyslinuxのzip版をダウンロードして展開
  • 下記ディレクトリとファイル作成
├─isolinux (※ディレクトリ作成)
│      isolinux.bin (※ファイルをコピー)
│      isolinux.cfg (※ファイルを作成)
│      menu.c32 (※ファイルをコピー
  • /isolinux/isolinux.cfg
DEFAULT /isolinux/menu.c32
PROMPT 0
MENU TITLE Boot Options Menu

LABEL systemrescuecd
	MENU LABEL ^1. SystemRescueCd 1.0.4
	KERNEL /isolinux/menu.c32
	APPEND /sysrescd/isolinux/isolinux.cfg

LABEL slax
	MENU LABEL ^2. Slax-ja 5.1.8.1-3
	KERNEL /isolinux/menu.c32
	APPEND /slax/isolinux.cfg
  • SystemRescueCd 1.0.4 は sysrescd ディレクトリ、SLAX 5 は slax ディレクトリを作成し、内容を全てコピー
  • それぞれのisolinux.cfg内のファイルのパスをルートからのフルパスに変更する
  • サブディレクトリのオプションを追加指定
    • SystemRescueCd - subdir=sysrescd
    • SLAX 5 - from=/dev/hdc/slaxfrom=/dev/sr0/slax など(※-- hdc=セカンダリ・マスタ -- や -- sr0=USB CD -- は環境によって違うのややこしいかなぁ)
    • SLAX 5 - from=slax/
  • ※例:
default /sysrescd/isolinux/rescuecd
append initrd=/sysrescd/isolinux/initram.igz subdir=sysrescd
  • BCDW.INI
\isolinux\isolinux.bin   ; ISOLINUX -- Linux LiveCD

isoイメージの作成

  1. cdrecord_fe.exeを実行
  2. フォルダ構造からISOイメージを作成する
  3. 「ISO9660レベル」を「ISO9660 Lv.4
  4. 「RockRidgeオプション」を「Rationalize RockRidge
  5. 「ブータブルにする」にチェック
  6. 「ISOイメージの構築元ディレクトリ」に仮想CDディレクトリを指定
  7. 「El Torito 準拠ブートイメージ」に【Bootable CD Wizard】のブートローダーであるbcdw\loader.bin を指定
  8. 「El Torito準拠 非エミュレーションモードを使用する」にチェック

※「非エミュレーションモードでのロードセクタ数」に「4」を指定した方がいいかもしれません。

実行コマンドは下記の通り...

mkisofs -iso-level 4 -r -hide TRANS.TBL -T -b "bcdw/loader.bin" -no-emul-boot -boot-load-size 4 -o "(作成先パスとファイル名).ISO" "仮想CDディレクトリのパス"
  • CDに焼くと
    • Windows上ではファイル名はすべて大文字
    • Linux上では元のまま
  • ディレクトリごとにTRANS.TBLファイルが作成される

以上、簡単そうに書いてみましたが最初は失敗があるかも(私は5、6回しました...あせ)。isoイメージ作成後はVMware Player などの仮想マシンでの確認、またはCD-RWの利用をおすすめしときます。

BCDWのサイトによると下記のやりかたでもいいのかな?(TRANS.TBLファイルなし)

mkisofs.exe -iso-level 4 -joliet -joliet-long -r -hide-rr-moved -force-uppercase -volid "RESCUE" -A MKISOFS -sysid "Win32" -b "bcdw/loader.bin" -no-emul-boot -boot-load-size 4 -hide boot.catalog -o "(作成先パスとファイル名).ISO" "仮想CDディレクトリのパス"

-volid (または -V )は、ボリュームIDの指定

【めも】isolinuxでのisoイメージ作成

【Bootable CD Wizard】を使う場合は必要ありませんが、ディレクトリ構成がpxelinux用(ネットワークブート)、syslinux用(USBメモリなどでブート)としても使えるので(設定ファイルはそれぞれ syslinux.cfg、pxelinux.cfg/default と違いありますが)忘れないようにめも。

isoイメージ作成に必要なファイルは、CDRtoolsバイナリに含まれる mkisofs.execygwin1.dll だけ。

※あくまで一例ですが...

  • isolinux.bin と isolinux.cfg を仮想CDディレクトリルートに配置する場合
    • mkisofs.execygwin1.dll 仮想CDディレクトリルートにコピー
    • isoイメージの保存先はひとつ上のディレクトリ
mkisofs -v -l -r -J -o ../isoimage.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table .
  • isolinux.bin と isolinux.cfg 仮想CDディレクトリ内のisolinuxディレクトリに配置する場合
    • isoイメージの保存先を - "D:\isoimage.iso"
    • 仮想CDディレクトリを - "D:\bootable_cd" と仮定
mkisofs -v -l -r -J -o "D:\isoimage.iso" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table "D:\bootable_cd"
  • Manpage of MKISOFS
  • -o -- 作成されるisoファイル名を指定
  • -b -- ブートローダを指定
  • -no-emul-boot --- '非エミュレーション' イメージであると指定。エミュレーションしない
  • -c -- ブートカタログを作成
  • -v -- 詳細を出力(画面上で)
  • -l -- 30 文字のファイル名を許可(※ DOSで使えなくなるかもなので注意)
  • -r -- Rock Ridge を使用。uid,gid を0にする、など。
  • -J -- Joliet
  • -boot-info-table -- CD-ROM の配置に関する情報の 56 バイトのテーブルが、ブートファイルのオフセット 8 に置かれることを指示する。(CdRecordフロントエンドでは「ブートファイルのオフセット8から56バイトにレイアウト情報テーブルを書き込む」にチェック)

isolinux.cfgでのファイルの指定に注意(絶対パスで表記するなど)