Palm84 某所の日記

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

USBメモリでブートいろいろ - マルチブート編

上記に続きまして、マイノリティ向け(何)超私的メモ第4弾。

と言っても、大したもんではなく、syslinuxを使いsyslinux.cfgを編集すれば誰でもできちゃうレベルです。

容量の関係で入れませんでしたが、VineやDebian、Fedora Coreなどのインストーラもおkでした。

注意事項とか

大まかな手順は...
  1. Linuxでパーティションを切る
  2. 必要なファイルをコピーする
  3. syslinuxのインストール
  4. syslinux.cfgの編集

[1]以外はWindowsでやった方が簡単かも。仕上げにWindows上で syslinux -ma <ドライブ名>: しておくといいかも。

注意事項

いやぁドキュメントは一通り目を通しましたが英語なので、ほんまに目を通しただけ(汗)。

  • ファイル名は8文字以内、または8文字以内+拡張子3文字
  • 大文字・小文字もそのままにした方がいいみたい?
  • LiveCD版Linuxのルートイメージファイルは(USBメモリの)ルートに置いた方がいいのかもしれない?
  • iso(pxe)linuxで使える「localboot 0x80」などの指定は使えない模様

isoファイルの展開(抽出・解凍)はSuper ウルトラISOWinRAR 7-Zip とかがいいかな。(ワンパターンw)

戻ります

ファイルのコピー

Windows上で直接isoイメージを展開(抽出)するには Super ウルトラISO7-Zip などが便利です(※7-Zipで展開時の[BOOT]ディレクトリはブートセクタなので基本的に不要です)。

仮想CDソフトやWinRARなどでは、ファイル名がすべて大文字の8.3形式となってしまうことがあるため上記をおすすめします。

あくまで私のやり方です。ファイル名の重複とsyslinux.cfgを編集する際のパスの指定に注意すればいいだけ(だと思う...)。

INSERT+ 1.2.18+

  • CD内のINSERTディレクトリをディレクトリごとUSBメモリのルートにコピー
  • CD内のルートにある.htmlファイルをUSBメモリのルートにコピー
  • CD内のisolinuxディレクトリの中身をUSBメモリのINSERTディレクトリにコピー
    • ※isolinux.* やboot.catは不要ですけど
HTTP-FUSE-KNOPPIX 5.0.1

  • USBメモリのルートにknoppixディレクトリを作成
  • CD内のisolinuxディレクトリの中身をknoppixディレクトリにコピー
    • ※isolinux.* やboot.catは不要ですけど
FDイメージ
  • USBメモリのルートに「fdboot」などの名前でディレクトリ作成
  • FDイメージをfdbootディレクトリにコピー
  • SYSLINUXをダウンロードして展開
  • memdiskディレクトリ内のファイル memdiskをfdbootディレクトリにコピー

戻ります

メニューを作成

※2ch(どのスレか忘れた...すんません)スレを参考にしました。

いっぱい入れるとラベル名を覚えるのが大変なのでブート時の表示用にメニューを作っちゃいます。ファイル名はとりあえずmenu.txtにしました。

あっと!多分改行コードをLFで保存しないと駄目かと思います。WindowsならLFを指定して保存できるテキストエディタを使いましょう(メモ帳はだめ)

F1 Boot Menu. F2  F3 - KNOPPIX help. F4 - INSERT help.
1 - HTTP-FUSE-KNOPPIX 5.0.1
2 - HTTP-FUSE-KNOPPIX 5.0.1 text mode
3 - INSERT+ 1.2.18
4 - INSERT+ 1.2.18 text mode
5 - memtest
6 - GRUB
7 - MBM (Multible Boot Manager)
8 - MS-DOS (Windows 98)
<以下略>

Fキーでメニューやhelpが出て、数字(アルファベットでも)1文字で選択するわけです。

ブートオプションを使う場合は、「1 toram」とかでおkでした。

戻ります

syslinux.cfgの編集

コピー元のCD内にあるisolinux.cfgを参照しつつ編集。

まずファイルの先頭部分、ブート画面の設定

default 1
display menu.txt
F1      menu.txt
F2      knoppix/f2
F3      knoppix/f3
F4      insert/f2
prompt 1

promptを0にするとbootプロンプトは出ずにdefaultの1で起動する。時間指定するには timeout をミリ秒で指定。

続いてブートイメージの指定

label  1
       kernel knoppix/linux
       append ramdisk_size=100000 init=/etc/init lang=ja.utf8 apm=power-off vga=791 initrd=knoppix/minirt.gz nomce quiet BOOT_IMAGE=knoppix
label  2
       kernel knoppix/linux
       append ramdisk_size=100000 init=/etc/init lang=ja.utf8 apm=power-off vga=791 initrd=knoppix/minirt.gz nomce quiet BOOT_IMAGE=knoppix 2
label  3
       kernel insert/vmlinuz
       append ramdisk_size=100000 init=/etc/init lang=ja apm=power-off vga=791 initrd=insert/miniroot.gz nomce noapic BOOT_IMAGE=insert
label  4
       kernel insert/vmlinuz
       append ramdisk_size=100000 init=/etc/init lang=ja apm=power-off vga=normal initrd=insert/miniroot.gz nomce noapic BOOT_IMAGE=insert 2
label  5
       kernel fdimage/memdisk
       append initrd=fdimage/memtestp.img
label  6
       kernel fdimage/memdisk
       append initrd=fdimage/grub.img floppy
<以下略>

syslinux.cfgをUSBメモリのルートに置いた場合です。ディレクトリ内に置いた場合は/knoppix/linuxな風に絶対パスで指定。

syslinuxをインストール(Windowsなら syslinux.exe -ma <ドライブ名>:)で一応完成となります。

戻ります

めも - 2.88MB FDイメージ作成

【追記】間違っておりました。すみません。(<イメージファイル> が抜けてました...)

Windows 98 起動ディスク

Windows 98 の2枚組み起動ディスクを一つのイメージにしました。

  1. Virtual Floppy Driveを起動して2.88MBを選択
  2. mkbt.exeで98起動ディスクイメージ(1枚目)からブートセクタを仮想FDドライブにコピー
    • mkbt -x <イメージファイル> <仮想FDドライブ名>:
  3. io.sys msdos.sys command.comの順番でコピー。その他のファイルをコピー
  4. Virtual Floppy Driveでイメージを保存

AUTOEXEC.BATはそのままでいいかな。

PC DOS(DR-DOS) 起動ディスク

Norton Ghost やDriveImageなどのDOS起動用FDを一つのイメージにしました。

  1. Virtual Floppy Driveを起動して2.88MBを選択
  2. mkbt.exeで起動ディスクイメージ(1枚目)からブートセクタを仮想FDドライブにコピー
    • mkbt -x <イメージファイル> <仮想FDドライブ名>:
  3. ibmbio.com ibmdos.com command.comの順番でコピー。その他のファイルをコピー
  4. Virtual Floppy Driveでイメージを保存

必要ならAUTOEXEC.BATを編集。

FreeDOS 1.0ではブートセクタコピー後に kernel.sys → command.com の順番でコピー

USB1.1や2.0、MSネットワーククライアントなども組み込んで選択起動できるイメージを作ってみました。(※でも私はDOS版のGhostは普段使ってなかったりします。CD版9.0があるので。何やってんだか...)

戻ります

めも - FDイメージあれこれ

内蔵FDドライブのあるデスクトップ機とFDドライブのないノートPCで確認したこと。

  • Windows XP で作成したMS-DOS起動ディスクイメージでは起動できない
    • rawオプションで可能でした。

EMM386と相性が悪いのかな?他のDOSイメージでもEMM386をキャンセルすると正常起動できる場合がありました。

  • FDイメージでブートした際、仮想的に書き込みが可能となる

変更分は保存されませんが。

  • DOSイメージではUSBメモリ自身をドライバなしでBドライブとして認識可能な場合がある(内蔵FDが無い場合は他にUSBデバイスを繋いでみる)

デスクトップではBドライブで認識。ノートでは他にUSBデバイス(FDやデジカメ)を繋いでおくとBドライブで認識。他のUSBデバイス自身は認識しない。GhostではUSBドライバを読み込んでおくとDドライブで認識。(BIOSがUSBブート対応な場合、USBドライバなしでDOS上でも普通にドライブとして認識できたりするので特別なことではないかもしれませんけど。)

USBメモリ自身を認識できるなら、DOS版プログラムをUSBメモリに普通にファイルとして保存しておけば実行できますね。

  • GRUB起動ディスク - ノートではkernelコマンドを使うと再起動してしまう。chainloaderコマンドならOK。
  • Windows XP緊急起動ディスク - ノートではメニューは出るがWindowsは起動しない。デスクトップでは問題なく起動
  • Norton Ghost 2003 - パーティションを切っていない場合、USB2.0ドライバ(aspiehci.sys)を読み込むと起動しない。パーティションを切っていれば問題なし。(※あっと、USBブートに対応していれば既にDOS上で認識されてる筈なので、USBドライバは不要だと思います。)

戻ります

めも - その他

GRUB for DOS

grub.exeを保存するだけ。必要ならmenu.lstも作成。

label grub
      kernel grub.exe

【ご注意追記】私の環境では、0.4.2と0.4.3のgrub.exeでWindowsの起動が非常にスローになってしまうというちょっと困るトラブルがありました。0.4.1のgrub.exeでは今のところ無問題。

ということで、BIOSの対応(HD扱いなのかFD扱いなのかとか)、USBメモリの仕様(パーティションの構成とか色々違ったり)によって変わってくるので、正式には対応していないのかもしれません。

grubinst.exeでMBRまたはブートセクタにインストール、memdisk経由でFDイメージを使うなど使い分けが必要かもしれません。でも、これもバージョン毎に違ったり、機種によって相性みたいなのがあったりするので最善ではありませんけど。

SystemRescueCd

systemrescuecd-x86-0.4.1.isoの例

  • ルートイメージのsysrcd.datはルートに置く
  • 他のファイルはrescuecdディレクトリを作成してコピー
  • CD内に含まれる\syslinux\syslinux.cfgを参考にsyslinux.cfgを編集&パスの修正
F5 f1boot.msg
F6 f2images.msg
F7 f3params.msg
F8 f4arun.msg
F9 f5troubl.msg
F10 f6pxe.msg

label rescuecd
      kernel rescuecd/isolinux/rescuecd
      append initrd=rescuecd/isolinux/rescuecd.igz video=ofonly vga=0 scandelay=10 cdroot=/dev/sd

label vesa
      kernel rescuecd/isolinux/rescuecd
      append initrd=rescuecd/isolinux/rescuecd.igz vga=788 scandelay=10 cdroot=/dev/sd forcevesa 
label vmlinuz2
      kernel rescuecd/isolinux/vmlinuz2
      append initrd=rescuecd/isolinux/vmlinuz2.igz video=ofonly vga=0 scandelay=10 cdroot=/dev/sd
label fb640
      kernel rescuecd/isolinux/rescuecd
      append initrd=rescuecd/isolinux/rescuecd.igz vga=785 scandelay=10 cdroot=/dev/sd
label fb800
      kernel rescuecd/isolinux/rescuecd
      append initrd=rescuecd/isolinux/rescuecd.igz vga=788 scandelay=10 cdroot=/dev/sd
label fb1024
      kernel rescuecd/isolinux/rescuecd
      append initrd=rescuecd/isolinux/rescuecd.igz vga=791 scandelay=10 cdroot=/dev/sd
Linuxインストーラ

一応確認しましたレベルですけど(汗)。こんなかんじで。

Debian etch
label debian
      kernel debian/linux
      append vga=normal initrd=debian/initrd.gz
Vine 4.2
label vine
      kernel vine/vmlinuz
      append load initrd=vine/initrd.img
Fedora 8
label fedora
      kernel fedora/vmlinuz
      append initrd=fedora/initrd.img
Ubuntu Feisty
label ubuntu
      kernel ubuntu/linux
      append vga=normal initrd=ubuntu/initrd.gz

戻ります