USBブート非対応PCでFDブートからUSBメモリのLiveCD Linuxをブートしてみた

2008.8.17追記

こんなのありましたー。

上記のページのやつが使えるなら(※USB CDは非対応)、このページに書いてるやつはいらないですね...。orz

【追記】DOS用USBドライバを使わない方法も書いてみました。

【2008.4.13 さらに追記】

メニュー表示とか色々設定してみました。

というわけで方法は3通りあるわけですな。

  • kernelとinitrdがそれぞれFDに収まるサイズなら、FDを入れ替えてloadlin.exe(or LINLD.COM)実行
  • DOS用USBドライバを準備して、USBデバイス内のkernelとinitrdを直接指定してloadlin.exe(or LINLD.COM)実行
  • kernelとinitrdをFDサイズに分割して、RAMドライブ上に展開後にloadlin.exe(or LINLD.COM)実行

【2008.4.6追記】linldのコマンドの書式が少し間違ってました。すみません。

2ch見ててなるほどと思い試してみためも。

考えるポイントは...

  • GRUBなどのブートローダはBIOSレベルで非対応のUSBデバイスを認識できない
  • Linuxカーネルとミニルート(initrd)読み込み後はUSBデバイスの認識可能
  • 最近のLiveCDなどはLinuxカーネルが1.44MB FDに入らない

つまり、BIOSがUSBデバイスでのブートに非対応でもLinuxカーネル(とミニルート)を読み込めばUSBの認識が可能になるけど、そのファイルがFDに収まらないのでどうすべか?というお話。

※CDブート、HDブート、またはPXEネットワークブートが可能ならそっちの方が簡単です。

【追記】というか、INSERT+ 1.2.18 ではkernelとinitrdがそれぞれFDに収まるサイズなので、FDを2枚にして、USBドライバなしで直接LINLDからロードさせてUSBメモリ内の本体のマウントが可能でした。FD入替のためにパスをごまかし(何)します

LINLD image=A:\vmlinuz initrd=B:\miniroot.gz vga=normal "cl=【ここにオプション】"

※BIOSでFDのBドライブを無効にしておく必要があるかもしれません。

Berry Linux 0.84でもUSBドライバなしでブートできました。kernel(CD内のSetupディレクトリにある)が起動ディスクに入らないのでFDは3枚2枚必要。initrdを1枚目、kernelを2枚目に。(※オプションは多少いじった方がいいかも?)

LINLD image=B:\vmlinuz initrd=A:\initrd.gz vga=791 "cl=ro cdrom berry_dir=/berry/berry splash=silent overlay=ram"

他にも、試してませんがDamn Small Linuxなどでもこの方法で可能かなと。

こんな方法をとりますた。(※カーネルとinitrdがそれぞれFDに入らない場合)

  1. DOS起動ディスクでブート
  2. USBドライバ(ASPIマネージャとディスクドライバ)を組み込みUSBメモリをドライブとして認識させる
  3. LINLD.COM(loadlin.exeの後継版みたいなの)でUSBメモリ内のLinuxカーネルをロード
  4. Linuxが起動してUSBメモリ内ののルートイメージをマウント

USBドライバについて

DOSでUSBストレージデバイスを使うにはUSBコントローラを認識させるためのASPIマネージャというやつと、ドライブレターを割り当てるためのディスクドライバなるものが必要らしい。私はNorton Ghost 2003 に付属のものでやってみた。

ASPIマネージャ(USBストレージ用)

USB1.1 では、UHCI(Universal Host Controller Interface)とOHCI(Open Host Controller Interface)の2種類。USB2.0ではEHCI(Enhanced Host Controller Interface)。それぞれ対応とconfig.sysの記述方法を要確認。

※どれもフリーではないけど...

  • Norton Ghost 2003 などIomega製
    • aspiuhci.sys(USB1.1 UHCI用)
    • aspiohci.sys(USB1.1 OHCI用)
    • aspiehci.sys(USB2.0用)
  • NOVACのHDケースに付属
    • USBASPI.SYS(USB1.1用)
  • PanasonicのUSB光学ドライブに付属
    • USBASPI.SYS(USB1.1/2.0 兼用らしい)
ディスクドライバ

ドライブレターを割り当てる

  • Norton Ghost 2003 などIomega製
    • GUEST.EXE
  • NOVACのHDケースに付属
    • Di1000dd.SYS
  • PanasonicのUSB光学ドライブに付属
    • USBCD.SYS(USB-DVD/CDドライブ用)+ MSCDEX(SHSUCDX)も必要?

※USB-FDドライブでブートして差換えする場合は、RAMディスクドライバも必要になるかと。

【追記】Panasonic USB-CDドライブの例
  • CONFIG.SYS
REM DEVICE=A:\RAMFD.SYS
DEVICE=A:\USBASPI.SYS /W /E
DEVICE=A:\USBCD.SYS /D:USBCD001

※USB1.1では、/U または /O。USB-FDドライブでブートする場合は1行目のREMを外す。

  • AUTOEXEC.BAT(MS-DOS) - (※間違ってた。すみません。
A:\MSCDEX.EXE /D:USBCD001
  • AUTOEXEC.BAT(FreeDOS)
A:\shsucdx /D:USBCD001

FreeDOS起動ディスク作成

FreeDOSの起動ディスクイメージ(fdboot.img)、またはBalderのFDイメージをダウンロード

RawWrite for WindowsなどでFDへ書き込み

最低限必要なファイルは下記のみなので、それ以外はFDから退避しておく

  • kernel.sys
  • command.com
  • himem.exe
CONFIG.SYSを作成
DOSDATA=UMB
DOS=HIGH,UMB
FILES=20
LASTDRIVE=Z
DEVICE=HIMEM.EXE

FDに保存

Norton Ghost 2003 のドライバ組み込み

必要ファイルは C:\Documents and Settings\All Users\Application Data\Symantec\Ghost\Template\commonにある

FDにGHOSTフォルダを作成、ファイルをコピーしてCONFIG.SYSに“追記”する。

CONFIG.SYS
  • USB1.1 UHCI
DOSDATA=UMB
DOS=HIGH,UMB
FILES=20
LASTDRIVE=Z
DEVICE=HIMEM.EXE
DEVICE=A:\GHOST\aspiuhci.sys /int /all
DEVICE=A:\GHOST\aspiuhci.sys /int /all /D1
DEVICE=A:\GHOST\aspiuhci.sys /int /all /D2
DEVICE=A:\GHOST\aspiuhci.sys /int /all /D3
  • USB1.1 OHCI
DOSDATA=UMB
DOS=HIGH,UMB
FILES=20
LASTDRIVE=Z
DEVICE=HIMEM.EXE
DEVICE=A:\GHOST\aspiohci.sys /int /all
DEVICE=A:\GHOST\aspiohci.sys /int /all /D1
DEVICE=A:\GHOST\aspiohci.sys /int /all /D2
DEVICE=A:\GHOST\aspiohci.sys /int /all /D3
  • USB2.0 EHCI
DOSDATA=UMB
DOS=HIGH,UMB
FILES=20
LASTDRIVE=Z
DEVICE=HIMEM.EXE
DEVICE=A:\GHOST\aspiehci.sys /int /all
AUTOEXEC.BAT を作成

GUEST.EXEをFDのGHOSTフォルダにコピーしておく

@ECHO OFF
A:\GHOST\GUEST.EXE

FDに保存

LINLD.COM or loadlin.exe

尚、USBキーボードでは、USBデバイスが有効になった後使えなくなる場合がありました。その場合はコマンド、またはbatファイルをAUTOEXEC.BATに記述して自動実行させる必要があるかもしれません。(※UHCI.EXE,OHCI.EXEなどを設定すれば使えそうなのですが私にはわかりませんでした。)

キーボード配列について

キーボードドライバを入れていない場合はUS配列となるのでご注意。

後述の手順でキーボードドライバを設定すればjp106配列で使用できます。

DOS上からLinuxカーネルの読み込み。LOADLIN.EXEはカーネル2.6系には非対応らしい(?)のでBusyBoxのサイトで配布されてたLINLD.COMを使用。ブートの確認は、INSERT+ 1.2.18*1Knoppix 5.1.1/CD(高速起動版)(ライブCDの部屋さん版)とHTTP-FUSE-KNOPPIX501。

モニタの設定がおかしくなることがあったので、なるべく安全設定オプションで起動させた方がよさそう。vesaとかnofbとか。

書式

LINLD [image=] [initrd=] [vga=vgamode] [cl=]
vgamode: ask,extended,normal or dec/oct/hex number
Defaults:
        image=bzImage
        initrd=(nothing)
        cl=auto
        vga=0
Use quotes: "cl=..." if you need spaces in cmdline
Use cl=@filename to take cmdline from file

USBメモリがC:\場合はこんなかんじで実行(Knoppix 5.1.1/CD ライブCDの部屋さん版の例)

LINLD image=C:\boot\isolinux\linux initrd=C:\boot\isolinux\minirt.gz vga=normal "cl=ramdisk_size=100000 init=/etc/init lang=ja-utf8 im=scim apm=power-off xmodule=vesa nomce loglevel=0 quiet BOOT_IMAGE=knoppix"

これをいちいち入力するのは辛いので、このままbatファイルで保存した方がいいかと。

オプションを別ファイルにすることも可能。例えば、こんなかんじでoptions.txtを作成

ramdisk_size=100000 init=/etc/init lang=ja-utf8 im=scim apm=power-off vga=normal xmodule=vesa nomce loglevel=0 quiet BOOT_IMAGE=knoppix

コマンドはこうなる

LINLD image=C:\boot\isolinux\linux initrd=C:\boot\isolinux\minirt.gz vga=normal cl=@a:\options.txt

LINLD.COMとbatファイル、options.txtをUSBメモリのカーネルと同じディレクトリに保存しておけばパスの記述が要らなくなるのでそっちの方がいいかな?

LOADLIN.EXE

こっちも試したので一応めも。カーネル2.6でも使えたりした。でも、何故かHTTP-FUSE-KNOPPIX501ではだめ。

  • ダウンロード(※LinuxのインストールCDに入ってたりしますがDebianのが新しめかなと?)
  • ftp://ftp.jp.debian.org/debian/tools/lodlin16.zip
  • Index of /pub/linux/debian/debian/toolsとか

コマンドの書式(Knoppix 5.1.1/CD ライブCDの部屋さん版の例)

loadlin C:\boot\isolinux\linux initrd=C:\boot\isolinux\minirt.gz ramdisk_size=100000 init=/etc/init lang=ja-utf8 im=scim apm=power-off vga=normal xmodule=vesa nomce loglevel=0 quiet BOOT_IMAGE=knoppix

設定ファイルを書く場合は「すべての指定」を改行で分けて書く

  • option.txt(Knoppix 5.1.1/CD ライブCDの部屋さん版の例)
C:\boot\isolinux\linux
initrd=C:\boot\isolinux\minirt.gz
ramdisk_size=100000
init=/etc/init
lang=ja-utf8
im=scim
apm=power-off
vga=normal
xmodule=vesa
nomce
loglevel=0
quiet
BOOT_IMAGE=knoppix

コマンドはこう

loadlin @a:\option.txt

Can't find KNOPPIX filesystem sorry.
Dropping you to (very limited) shell.

上記の様なメッセージが出て、USBメモリ内のKnoppixイメージがマウントできない場合に、kernel,initrd読み込み後USBランプが消えた直後にUSBポートを挿し直すとマウント可能になることがあります。

Allowing slow USB-devices some more time to register...ok

このメッセージが出れば多分OK。

FreeDOS起動ディスクをもっと使いやすくする

Balderに含まれるコマンドとGrub.exeを追加。

  • [ディレクトリ]GHOST
    • aspiehci.sys
    • aspiohci.sys
    • aspiuhci.sys
    • GUEST.EXE
  • [ディレクトリ]ATAPICD
    • shsucdx.com - CDROM用プログラム
    • xcdrom.sys - ATAPI-CDドライバ
  • command.com
  • deltree.com - ディレクトリごと削除
  • edit.exe - テキストファイル編集
  • fdisk.exe - FDISK
  • format.exe - フォーマット
  • kernel.sys
  • keyb.exe - キーボードマネージャ
  • keyboard.sys - キーボードドライバ
  • keybrd2.sys - キーボードドライバ
  • LINLD.COM
  • loadlin.exe
  • more.exe - テキストファイル表示など
  • sys.com - システムを転送
  • xcopy.exe - ディレクトリごとコピー

ついでにブートローダGRUB for DOS

  • grub.exe
  • menu.lst
CONFIG.SYS

USB2.0のみ有効の状態。REM行は無効なので適宜変更。

!SWITCHES=/E
menucolor=7,0
menudefault=0,100
menu
menu FreeDOS USB driver support
menu
menu 0 - USB2.0
menu 1 - USB2.0 + ATAPI CDROM
menu 2 - USB1.1
menu 3 - USB1.1 + ATAPI CDROM
menu 4 - Clean boot
menu

4?shell=command.com command.com /P
0123?DOSDATA=UMB
0123?DOS=HIGH,UMB
0123?DEVICE=HIMEM.EXE
01?DEVICE=A:\GHOST\aspiehci.sys /int /all
23?DEVICE=A:\GHOST\aspiuhci.sys /int /all
23?DEVICE=A:\GHOST\aspiuhci.sys /int /all /D1
23?DEVICE=A:\GHOST\aspiuhci.sys /int /all /D2
23?DEVICE=A:\GHOST\aspiuhci.sys /int /all /D3
23?DEVICE=A:\GHOST\aspiohci.sys /int /all
23?DEVICE=A:\GHOST\aspiohci.sys /int /all /D1
23?DEVICE=A:\GHOST\aspiohci.sys /int /all /D2
23?DEVICE=A:\GHOST\aspiohci.sys /int /all /D3
13?DEVICEHIGH=A:\ATAPICD\XCDROM.SYS /D:FDCD0001
!FILES=20
!BUFFERS=20
!LASTDRIVE=Z
AUTOEXEC.BAT

キーボード配列をjp106仕様に。

@ECHO OFF
set path=a:\
if %CONFIG% == 4 goto end
if %CONFIG% == 3 goto CD
if %CONFIG% == 2 goto USB
if %CONFIG% == 1 goto CD
if %CONFIG% == 0 goto USB

:USB
A:\GHOST\GUEST.EXE
A:\KEYB JP
goto end

:CD
A:\GHOST\GUEST.EXE
A:\ATAPICD\shsucdx /D:FDCD0001
A:\KEYB JP
goto end

:end

尚、DOSのFDは結構ファイルが壊れたりするのでFreeDOS自体がエラーを出して起動しない時などは、フォーマットし直すか、新しいFDを使いましょう。

choice.exeでメニュー選択

DOS素人なのでいまいちかもですが、choice.exe + loadlin.exe で設定してみた。

【2008.4.6追記】う〜ん、loadlinだとUSB CDがだめな場合が多いみたい?

といわけでlinldと両方試す方がいいかも。

ライブCDの部屋Knoppix 5.1.1/CD(高速起動版)
choice.exe

展開してchoice.exeをFDルートへコピー

loadlin.exe

※lodlin16.zipを展開。loadlin.exeをFDルートへコピー

設定ファイル詰め合わせ

展開してfdos_usb_lcr_filesフォルダ内のファイルをFDへ上書き

ブートの流れ
  1. DOS起動後にknoppix.batを実行(またはautoexec.batに記述)
  2. Cドライブ以降から Knoppixのカーネル(\linux)を探しディレクトリを%usbdir%にset
  3. %usbdir%に移動
  4. a:\choice.exe を実行。a:\welcome.txt を表示。番号を入力
  5. 指定に従い、a:\loadlin @a:\knoppix5\knoppix.txt などが実行される
  1. loadlin.exe, choice.exe をFDルートにおく
  2. FDのknoppixディレクトリ内にオプションファイルwelcome.txt作成
  3. FDルートにknoppix.bat作成
  • knoppix.bat
@echo off
for %%x in ( C D E F G H I J ) do if exist %%x:\boot\isolinux\linux set usbdir=%%x:\boot\isolinux
for %%x in ( C D E F G H I J ) do if exist %%x:\boot\syslinux\linux set usbdir=%%x:\boot\syslinux
for %%x in ( C D E F G H I J ) do if exist %%x:\syslinux\linux set usbdir=%%x:\syslinux
for %%x in ( C D E F G H I J ) do if exist %%x:\knoppix\linux set usbdir=%%x:\knoppix
for %%x in ( C D E F G H I J ) do if exist %%x:\knoppixl\linux set usbdir=%%x:\\knoppixl
for %%x in ( C D E F G H I J ) do if exist %%x:\linux set usbdir=%%x:
cdd %usbdir%
cls
type a:\knoppix5\welcome.txt
a:\choice /C:12345678X boot:
IF ERRORLEVEL=9 GOTO Ende
IF ERRORLEVEL=8 GOTO 8
IF ERRORLEVEL=7 GOTO 7
IF ERRORLEVEL=6 GOTO 6
IF ERRORLEVEL=5 GOTO 5
IF ERRORLEVEL=4 GOTO 4
IF ERRORLEVEL=3 GOTO 3
IF ERRORLEVEL=2 GOTO 2
IF ERRORLEVEL=1 GOTO 1

:1
a:\loadlin @a:\knoppix5\knoppix.txt
GOTO Ende

:2
a:\loadlin @a:\knoppix5\vesa.txt
GOTO Ende

:3
a:\loadlin @a:\knoppix5\text.txt
GOTO Ende

:4
a:\loadlin @a:\knoppix5\fb800.txt
GOTO Ende

:5
a:\loadlin @a:\knoppix5\fb1024.txt
GOTO Ende

:6
a:\loadlin @a:\knoppix5\fb1280.txt
GOTO Ende

:7
a:\loadlin @a:\knoppix5\failsafe.txt
GOTO Ende

:8
a:\loadlin @a:\knoppix5\test.txt
GOTO Ende

:Ende
  • a:\knoppix5\welcome.txt
===================================================
         Knoppix Live CD LCR 5.1.1 Boot Menu
===================================================

Type one of the following numbers and press return
to select Your preferred video mode:

1 :     default
2 :     vesa
3 :     text mode
4 :     fb 800x600
5 :     fb 1024x768
6 :     fb 1280x1024
7 :     failsafe
8 :     test
  • (オプションファイルの例)a:\knoppix5\knoppix.txt
linux
ramdisk_size=100000
init=/etc/init
lang=ja-utf8
im=scim
apm=power-off
vga=791
initrd=minirt.gz
nomce
loglevel=0
quiet
BOOT_IMAGE=knoppix

*1:LiveCDの部屋さんバージョン。カーネルは2.4なのでLINLD.COMは非対応かなと思いましたがブート可能でした。