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

2021.4.1 移転しました...
  • このページの旧URLは
    • http://www10.plala.or.jp/palm84/kexec_loader.html

はてなブックマーク

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 なども認識可能になる様ですが、私の環境ではうまくいかないので、未確認です。すみません。

FD作成

RawWrite for Windows

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

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 起動後のファイルの参照は可能

基本的な使い方

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がブートします。

ボリューム ラベル (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

設定ファイル - 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 を指定する

カスタマイズ

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

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 にしてるだけですが...

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:

CD (iso) のリメイク

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

【その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ドライブの場合ですが)。

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

前述の方法と同じで。

スクリーン・ショット

SYSLINUX メニュー

kexec-loader メニュー

PLoP Boot Manager メニュー

GRUB for DOS メニュー

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

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

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"

いろいろ

モジュールの追加

※ 未確認ですが...

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ドライブも認識できたらいいのになぁ...

Written by yassy