【私的】 USBブート非対応PC用起動フロッピー/CDを作るの巻【kexec-loader編】

はてなブックマーク TOPSY

2010.5.30 作成

う〜ん、ベストな方法はどんなもんかと試行錯誤中...まだまだ勉強が足りないかも (´・ω・`)

CD(iso) 作成についても書いとりますが、主たる目的はCDブートできない旧世代PCでの Linux LiveCD のブートなのです。

※ USB CDドライブには対応していません。

これってナニ?

kexec-loader は“Linux based bootloader”、つまりLinux上で動くブートローダー。それをFD1枚に入る小さなLinuxに組み込んだのが、kexec-loader-floppy でありんす。

このFDはブートローダーとしてはGRUB起動ディスクなどに比べ機能は低いです。しかしながら、これはLinux上で動くということで、Linux上で認識したUSBデバイス(※ USBフラッシュメモリ, USB HD)のカーネルをロードできるという、他のブートローダーにない利点があるのであります。

つまり、BIOSがUSB(フラッシュメモリ、HD)ブート非対応であっても、このFDでブートすれば、USB(フラッシュメモリ、HD)からカーネルなどのロードが可能になるということですな。

PLoP Boot Manager が使えるならその方が楽なのですが、使えないこともあるので、そんな場合はこちらを試してみませう。

※ USB CDドライブは認識しません。

設定ファイルを書くのが少し手間ですが、PLoP Boot Manager を追加した起動ディスク(イメージ)を作っておけば、古めのPCのメンテ用として、結構重宝するんでないかなと思いますー。

特徴
  • 認識可能なデバイスは、FD + USBデバイスのFATフォーマットのみ(内蔵HD用モジュールなど追加可能ですけど)
  • カーネル・ロード専用
  • GRUBなどの様にPBRのチェインロード機能はなし
  • 起動させるLinuxの設定(kernel, initrd, オプション)は、自分で書いておくか、コマンドラインから入力する必要がある
  • grub.exe (GRUB for DOS) のチェインロードはできるが、GRUB上でUSBデバイスは認識しない
  • SYSLINUX, GRUB “から”ロード可能

モジュールを追加すれば、ext3, ext4 なども認識可能になる様ですが、私の環境ではうまくいかないので、未確認です。すみません。

ページ先頭 U

FD作成

RawWrite for Windows

備考
  • ボリューム ラベルは KEXECLOADER
  • 内蔵FDブートでは、kxloader.cfg などのロードはUSB(HD/フラッシュメモリ)よりも優先となる
  • USB-FDブートでは sda で認識した場合は優先

ページ先頭 U

CD(isoイメージ)作成

※ CDブート可能ならUSBメモリを使う必要はないような気がしないでもないですが、そこはそれ...

  1. Linux上にて
  2. Windows上でISOLINUX CD
  3. Windows上でISOLINUX + memdisk

Linux上にて

ダウンロードして展開する
シェル・スクリプト 実行

展開したディレクトリに移動し、スクリプト実行

$ ./mkiso.sh kexec-loader.iso
備考
  • ボリューム・ラベルは kexecloader
  • modules を追加しない場合は、kexec-loader 起動後にCDは認識しないのでCD内の設定ファイルはロードされない
  • iso-modulesディレクトリに追加モジュールがあれば、initrd(initramfs) に統合される
  • kexec-loader 起動時にCDが認識可能な場合、CD内の設定ファイルが優先的にロードされる

Windows上でISOLINUX CD

Windows版 mkisofs.exe でisoを作成してみました。

ダウンロードして展開する
ファイルの配置
kexec-loader - iso-files ディレクトリ
|   linux.cfg
|   kexec-loader.conf
|   cygwin1.dll        --- CDRtools バイナリ
|   mkisofs.exe        --- CDRtools バイナリ
|
\---isolinux
        initrd.img
        isolinux.bin
        isolinux.cfg
        vmlinuz
mkisofs 実行
mkisofs -v -R -J -o ../kexec_win_isolinux.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -V "kexecloader" -no-emul-boot -boot-load-size 4 -boot-info-table .
備考
  • ボリューム・ラベルは kexecloader
  • modules を追加しない場合は、kexec-loader 起動後にCDは認識しないのでCD内の設定ファイルはロードされない
  • CD内に modules を追加するは、initrd(initramfs) に統合する必要がある模様?
  • USB側(LABEL = KEXECLOADER) にmodulesを置けば、IDE-CDなど kexec-loader 起動後のファイルの参照は可能

Windows上でISOLINUX + memdisk

FDイメージをSYSLINUXのmemdiskを使いブートさせます。Windows版 mkisofs.exe でisoを作成してみました。

ダウンロードして展開する
ファイルの配置
  • isolinux.cfg 作成
DEFAULT memdisk
APPEND initrd=floppy.img
適当な作業ディレクトリ:
   cygwin1.dll   --- CDRtools バイナリ
   floppy.img    --- kexec-loader FDイメージ
   isolinux.cfg  --- 作成
   isolinux.bin  --- SYSLINUXの core\isolinux.bin
   memdisk       --- SYSLINUXの memdisk\memdisk
   mkisofs.exe   --- CDRtools バイナリ
mkisofs 実行
mkisofs -v -R -J -o ../kexec_win_isolinux_memdisk.iso -b isolinux.bin -c boot.cat -V "kexecloader" -no-emul-boot -boot-load-size 4 -boot-info-table .
備考
  • CD,FDイメージともボリューム・ラベルは kexecloader
  • kexec-loader 起動後、FDイメージは見えない、CD認識しない
  • USB側(LABEL = KEXECLOADER) にmodulesを置けば、IDE-CDなど kexec-loader 起動後のファイルの参照は可能

ページ先頭 U

基本的な使い方

USB(HD/フラッシュメモリ)のフォーマットについて

デフォルト状態のイメージで認識するのは、USB上のFATフォーマット (FAT16/FAT32) のみみたいです。他のフォーマットについてはモジュールの追加が可能ですが、確認できてません...すみません。

FDブートするとコマンド入力画面で止まります。(※ kexec-loader.conf or kxloader.cfg に起動設定がないため)

keymap.txt がない場合、キーボードはUS配列となってるので注意。

コマンドライン画面

help で使用可能コマンド表示

help コマンド

disks コマンドで認識されたデバイス(ファイル)名、ボリューム ラベル (LABEL) など表示

disks コマンド

root でパーティションを指定。

kernel, initrd、(※ 必要なら)cmdline でカーネル・コマンドライン・パラメータ(カーネル・オプション)を指定します。

root,initrd,cmdline コマンド

この後、boot コマンドで指定されたLinuxがブートします。

ページ先頭 U

ボリューム ラベル (LABEL) について

ボリューム ラベル (LABEL) の確認

【マイコンピュータ】からドライブのアイコンを右クリックでプロパティ画面を開く

  • XP - FDドライブ

XP - FDドライブのプロパティ

7 ではFDドライブのLABELが表示されない様です。この場合は【コマンド プロンプト】から vol コマンド

C:\Users\yassy>vol a:
 ドライブ A のボリューム ラベルは KEXECLOADER です
 ボリューム シリアル番号は 5CCE-35B2 です
  • 7 - USBメモリ

7 - USBメモリのプロパティ

ボリューム ラベル (LABEL) の変更

XP、及び7上のUSBメモリは上記画面より。

7上のFDドライブでは【コマンド プロンプト】から label コマンド

C:\Users\yassy>label a:
ドライブ A: のボリュームは KEXECLOADER です
ボリューム シリアル番号は 5CCE-35B2 です
ボリューム ラベルを入力してください。
(半角で 11 文字、全角で 5 文字以内)
必要なければ、Enter キーを押してください: KEXECLOADE

C:\Users\yassy>vol a:
 ドライブ A のボリューム ラベルは KEXECLOADE です
 ボリューム シリアル番号は 5CCE-35B2 です
ddコマンドでFDイメージを操作
  • LABEL確認
D:\CommandLine\dd>dd if=floppy.img of=test.bin bs=1 skip=9728 count=11
rawwrite dd for windows version 0.5.
Written by John Newbigin <jn@it.swin.edu.au>
This program is covered by the GPL.  See copying.txt for details
11+0 records in
11+0 records out

D:\CommandLine\dd>more test.bin
KEXECLOADER
D:\CommandLine\dd>dd if=floppy.img bs=1 skip=9728 count=11 | more
rawwrite dd for windows version 0.5.
Written by John Newbigin <jn@it.swin.edu.au>
This program is covered by the GPL.  See copying.txt for details
11+0 records in
11+0 records out
KEXECLOADER
  • LABEL変更(※ 1文字消し)
D:\CommandLine\dd>dd if=/dev/zero of=floppy.img bs=1 seek=9738 count=1
rawwrite dd for windows version 0.5.
Written by John Newbigin <jn@it.swin.edu.au>
This program is covered by the GPL.  See copying.txt for details
1+0 records in
1+0 records out

D:\CommandLine\dd>dd if=floppy.img of=test2.bin bs=1 skip=9728 count=11
rawwrite dd for windows version 0.5.
Written by John Newbigin <jn@it.swin.edu.au>
This program is covered by the GPL.  See copying.txt for details
11+0 records in
11+0 records out

D:\CommandLine\dd>more test2.bin
KEXECLOADE
D:\CommandLine\dd>dd if=floppy.img bs=1 skip=9728 count=11 | more
rawwrite dd for windows version 0.5.
Written by John Newbigin <jn@it.swin.edu.au>
This program is covered by the GPL.  See copying.txt for details
11+0 records in
11+0 records out
KEXECLOADE

ページ先頭 U

設定ファイル - kxloader.cfg - について

選択メニューを表示する設定ファイルは kxloader.cfg (kexec-loader.conf) であります。

floppy.img には kexec-loader.conf がありますが、起動エントリは書かれていません。

kexec-loader.conf が優先みたいですが、kxloader.cfg にリネームして使用した方がいいと思います。

デフォルトではキーボード配列がUS仕様なので JP106 仕様にするには下記からダウンロード、keymap.txt にリネームして使用します。

kxloader.cfg の置き場所
  • 設定ファイル - kxloader.cfg (kexec-loader.conf) - は ボリューム ラベル = KEXECLOADER のデバイス(パーティション)から読み込まれる
  • keymap.txt も同上
  • modules ディレクトリも同上
  • floppy.img のデフォルトの ボリューム ラベルは KEXECLOADER

同じ LABEL(= KEXECLOADER) が複数ある場合は fd0 が優先の様です。

※ USB-FDブートの際はUSB-FDが sdb、USBメモリが sda となり sdax が優先されることがあるので注意。

起動エントリの書き方
title CDlinux 0.9.3 Standard (vga=0x318)
root LABEL=KEXECLOADER
kernel /CDlinux/bzImage
cmdline CDL_LANG=ja_JP.UTF-8 root=/dev/ram0 vga=0x318
initrd /CDlinux/initrd
root(パーティション)の指定

root(パーティション)の指定は3通り

  • sda1 などのデバイス(ファイル)名
root sda1
  • ボリューム ラベル (LABEL)
root LABEL=KEXECLOADER
  • uuid
    • uuid を調べるには、Windows - vol X:、Linux - blkid
root UUID=xxxx-xxxx

というわけで...

下記はあくまでワタシのやりかたですが、ネットワークブートなどでもFDイメージがそのままつかえるようにしてみました。ちょっとややこしいような気もしますが...

【私的】おすすめ設定
  • FD(イメージ)の ボリューム ラベル (LABEL) を KEXECLOADE に変更する
  • USBメモリの ボリューム ラベルを KEXECLOADER に変更する
  • kxloader.cfg, keymap.txt をUSBメモリ側に保存する
  • kxloader.cfg では root LABEL=KEXECLOADER を指定する

ページ先頭 U

カスタマイズ

あくまで【私的】ですが...

ページ先頭 U

USBメモリ側へ kxloader.cfg をコピー

HDブートやネットワークブートでもFDイメージがそのまま使えるようにしてみます。

  1. FDの ボリューム ラベル (LABEL) を KEXECLOADE(※ 1文字消し)に変更する
  2. USBメモリの ボリューム ラベル を KEXECLOADER にする
  3. USBメモリに kxloader.cfg, keymap.txt をコピーする

【私的】kxloader.cfg には下記のデフォルト設定を書いてあります。

ddコマンドでFDイメージの ボリューム ラベル (LABEL) を変更
dd if=/dev/zero of=floppy.img bs=1 seek=9738 count=1

※ 1文字消して KEXECLOADE にしてるだけですが...

戻る | ページ先頭 U

FDのリメイク

PLoP Boot Manager, SYSLINUX メニュー、GRUB(for DOS) などを追加します。

※ GRUB for DOS に関しては、halt(poweroff), reboot, chainloader コマンドを使用することを目的として追加しています。FD内のファイルが読めず menu.lst が表示されないことがあり、GRUB起動ディスクとして使用するにはちょっと不安ありです。また、GRUB上ではUSBデバイスは認識しません。

上記作業3点の実行後に、FDへファイルを追加します。

ダウンロード

【注意】SYSLINUX上では、アンダースコア【_】はShift-0となってます。

ファイルの配置
  • ファイル一覧
A:.
|   grub.exe       --- GRUB for DOS
|   initrd.img
|   linux.cfg
|   menu.lst
|   README.html
|   vmlinuz
|
+---syslinux
|       jp106.kbd
|       ldlinux.sys
|       menu.c32       --- SYSLINUXの com32\menu\menu.c32
|       plpbt.bin      --- PLoP Boot Manager
|       poweroff.com   --- SYSLINUXの modules\poweroff.com
|       reboot.c32     --- SYSLINUXの com32\modules\reboot.c32
|       syslinux.cfg
|
\---modules
SYSLINUX の再インストール

menu.c32 が使えなかったので...

展開したSYSLINUXのwin32ディレクトリに移動して下記コマンドを(「管理者として」)実行

syslinux.exe -d syslinux a:

戻る | ページ先頭 U

CD (iso) のリメイク

FDブート比べるとなんかややこしいです。CD内には追加ファイルは一切置かずに、USB側のボリューム ラベルを KEXECLOADER にして、USB側に kxloader.cfg, keymap.txt, modules ディレクトリなど置くのがわかりやすいかな?

戻る | ページ先頭 U

【その1】

ダウンロード

【注意】SYSLINUX上では、アンダースコア【_】はShift-0となってます。

ファイルの配置
kexec-loader - iso-files ディレクトリ
|   cygwin1.dll   --- CDRtools バイナリ
|   grub.exe      --- GRUB for DOS
|   linux.cfg
|   menu.lst
|   mkisofs.exe   --- CDRtools バイナリ
|
\---isolinux
        initrd.img
        isolinux.bin
        isolinux.cfg
        jp106.kbd
        menu.c32       --- SYSLINUXの com32\menu\menu.c32
        plpbt.bin      --- PLoP Boot Manager
        poweroff.com   --- SYSLINUXの modules\poweroff.com
        reboot.c32     --- SYSLINUXの com32\modules\reboot.c32
        vmlinuz
mkisofs 実行
mkisofs -v -R -J -o ../kexec_win_isolinux_remake.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -V "kexecloade" -no-emul-boot -boot-load-size 4 -boot-info-table .

【注意】ボリューム ラベルは kexecload を指定。USB側の modules ディレクトリに ide.tlz, isofs.tlz を置けば kexec-loader 起動後にGRUBの reboot コマンドなどが使えました(IDE-CDドライブの場合ですが)。

戻る | ページ先頭 U

【その2】リメイクしたFDイメージをそのまま使う

前述の方法と同じで。

戻る | ページ先頭 U

スクリーン・ショット

SYSLINUX メニュー

kexec-loader メニュー

PLoP Boot Manager メニュー

GRUB for DOS メニュー

※ 環境によっては、FD内のファイルが見えず、メニューが出ない場合あります(※ コマンド画面となる)。メニューが出なくても haltreboot コマンド、chainloader コマンド(※ HDのチェインロード)は使えるはずです...

【注意】このGRUB上ではUSBデバイスは見えません。

戻る | ページ先頭 U

FD/CD以外でブート

通常のLinuxと同様に普通に kernel, initrd をロードしてもいいのですが、下記はFDイメージをそのまま使う方法。

※ 【注意】kexec-loader 起動後はFDは見えなくなります。kexec-loader 起動後はFD内のファイルはロードできません。

HDブート

GRUB for DOS が楽かな?

  • menu.lst
title kexec-loader-floppy
find --set-root /floppy.img
map --mem /floppy.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

isoイメージの場合は...

title kexec-loader.iso
find --set-root /kexec-loader.iso
map --mem /kexec-loader.iso (0xff)
map --hook
chainloader (0xff)
rootnoverify (0xff)
ネットワークブート

PXELINUX + memdisk

  • pxelinux.cfg/default(※ など)
LABEL kxloader
KERNEL /memdisk
INITRD /floppy.img

isoイメージの場合は...

LABEL kxloader_iso
KERNEL /memdisk
APPEND iso
INITRD /kexec-loader.iso
kexec-loader 起動後に grub.exe の reboot コマンドなどを使うには

USBメモリ側に grub.exe を 置き、USBメモリ側の kxloader.cfg を修正しませう。

title boot from HD
root LABEL=KEXECLOADER 
kernel /grub.exe
cmdline --config-file="chainloader (hd0)+1"

title Reboot
root LABEL=KEXECLOADER 
kernel /grub.exe
cmdline --config-file="reboot"

title Poweroff
root LABEL=KEXECLOADER 
kernel /grub.exe
cmdline --config-file="halt"

ページ先頭 U

いろいろ

モジュールの追加

※ 未確認ですが...

FD内 LABEL = KEXECLOADER の FD or USBメモリの modules ディレクトリに追加すると起動時にFD,USB以外のデバイスも認識可能になるようです。

  • ide.tlz - IDE(PATA) HD
  • ext3.tlz - ext3 ファイルシステム
  • ext4.tlz - ext4 ファイルシステム
  • isofs.tlz - iso(CD) ファイルシステム

※ USB HD上の ext4 パーティションについては、ide.tlz + ext4.tlz で可能でした。

※ USB CDドライブも認識できたらいいのになぁ...

ページ先頭 U

Written by yassy