« ubuntuのgrub2のLVM over RAID | トップページ | ブートローダまわりであれこれ »

grub2のusbms周りとそれに付随指定調べた情報

 最初に注意点。以下は全て、ソースから読み取ってないようであって、実際の確認は一部しか行っていません。試す前の参考程度や、試した後の確認には使えますが、ここに書いてあるからこの方法を取ろう・・・というのは、わなにはまるかもしれないので注意。

grub2のusb周り。
・サポートしているのは1.1のみ(chipに互換があるので2.0/1.1のハード(chip)でも利用可能。3.0はドライバレベルの互換は無いので不可能。)
・usb.modがモジュールの中心。
・下位にohci.modか、uhci.modのいずれかが必要。echiやxhciは未だ無い。
・上位には、現状ではusb_keyboard(キーボード)と、usbms(大容量記憶装置)がある。
・usbmsはストレージとしてはscsiの下位になる。ディスク名は(usbX)。
 (ちなみに、scsi本家は(scsiX,Y)っぽい)
・ohciやはuhciをロードすると、BIOSからUSBのコントロールを奪う(ohci/uhciが初期化してしまう)形になるようなので注意。結果、BIOS経由でのUSBキーボードは使えなくなる(usb_keyboardを入れれば、そちらは有効になるはず)


grub2のDisk Device
・biosdiskとataは混ぜるな危険。なので自動的に排他されます。
 biosdiskの後からataを入れるとbiosdiskは自動的にunloadされる。
 ataの後からbiosdiskを入れようとするとbiosdiskの初期化の途中で抜け、biosdiskはロードされない(debug messageはあるけどエラーは出ないので注意。lsしてもataしかで無いので首をかしげた・・・。よく考えると、1度制御を奪っちゃうのでata→biosdiskは無理。)
・usbmsは、ataやbiosdiskと混ぜてload可能。が、USB bootをサポートしたBIOSの場合、双方で同一のデバイスを指している可能性があるので注意。ただし、BIOSからのUSB Diskは、(ochi/uhciで初期化されちゃうので)制御から外れる可能性あり。だとすると安全(未確認)
・ataは、ata/atapiを汎用的に制御可能・・・と、すると、IDE互換モードのSATAも制御が可能かも?(未確認)
・AHCIモードのSATAは、今のところ、BIOSを経由する以外には打つ手無し(ahci.modは無い)
 (ehci/xhciやahciは、BIOSの実装が不足していたり、初期に拡張ボードが出回ったりする、過渡期の需要とも考えられるので実装はされないのかも
。古いリソースでがんばろうとすると必要なんですが)
※usb diskを、usbmsとbiosdiskの両方がある状態でsearch系コマンドで全体を通してアクセスしてみて、OKかNGかで判断できそう。

まとめ(の予想)
・usbmsを使いたい場合、usbの基本となるusbと、自分の環境のohciもしくはuhciを指定すること。
 (私の環境では、異なる方のドライバをロードしたらhangupしました。応答時間が長かっただけの可能性もあり。)
・さらに、キーボードがusb接続の場合、usb_keyboardも指定して、入力をconsole/keyboardから変更するのを忘れないこと。
 (たぶん、ps2接続なら必要なし)
・biosdiskは有っても無くても良い。あれば、usb以外のDiskにアクセスが可能になるので、いざというときに楽。

・biosdiskを使わないなら、以下でインストール。
grub-install --disk-module="usbms" --modules="uhci usb usb_keyboard" /dev/sd_

・biosdiskを使う(usbmsと併用)なら、以下でインストール。
grub-install --modules="uhci usb usbms usb_keyboard" /dev/sd_

・以下を設定
/etc/default/grub
GRUB_TERMINAL_INPUT=usb_keyboard

※/etc/default/grubの、GRUB_PRELOAD_MODULESもモジュールを優先的に読み込む機能なんですが、ここでの優先は、core.imgが読めて、/boot/grub/grub.cfgが無事読めてからinsmodで行われる。grub-installに指定するものは、/boot/grub/*を読むのに必要となるモジュールで、grub rescueに落ちても使える。


grub> insmod uhci; insmod usb_keyboard; terminal_input usb_keyboard
grub> insmod usbms

付録。
grub2のdebugメッセージの使い方
・環境変数のdebugを利用する
・環境変数debugは、setコマンドで設定可能(setはgrub rescueでも利用可能)
・デバッグメッセージを表示したい対象をスペースで区切って並べる。
・「all」だと全部。
・大抵のデバイスやパーティションのモジュールは、そのモジュールの読み込み時にいろいろするので、insmodの前にdebugを有効にする。
・対象は基本的にモジュール名(usbms.modなら、usbms)
・grub-installに--debug-imageを指定し対象を指定すると、stage1.5の先頭でset debug=にてその対象が定義され確認デバッグ可能。


probeコマンド
device(driver),partmap,filesystem,fs-uuid,labelは、probeコマンドで指定したデバイス/パーティションの属性を取得可能。
-d driver(debice)の名前を取得
-p partmapの名前を取得
-f filesystemを取得
-u fs-uuidを取得
-l labelを取得
※-sオプションとあわせて使うと、結果を環境変数に設定することが可能。
・・・searchシリーズと似ているような気が?


terminal_inputの設定
キーボードとして扱うモジュールは以下。
・console PC/AT biosのキーボード。grub-pcのデフォルト。
・usb_keyboard grub2のusbモジュールを使用したusb接続のキーボード。
・at_keyboard grub2でPS2接続のキーボードを直接制御。
・serial COMポート。
consoleの最大の利点は、BIOSで使えるよう設定すればPS2でもUSBでも繋がっているほうで使える。

|

« ubuntuのgrub2のLVM over RAID | トップページ | ブートローダまわりであれこれ »

コメント

貴重な情報、ありがとうございます。私が使っているNECのPC-LL900BDという古いノートPCのBIOSは、USBからの起動をサポートしていないので、外付けUSBドライブにインストールしたUbuntuをどうやって起動させたものかと、困っていました。
(インストールに使ったUbuntuのLiveCDは、USBドライブを自力で見つけていて、Grubの自動設定でも「見つかって当然」という前提でGrubの設定をしているので、いざ起動しようとすると、内蔵の hd0しか検知されない、という状態でした。)


この機種の場合は、uhciでは外付けディスクは検出できず、Grub2は相変わらず「そんなUUIDのディスクはない」という反応でしたが、ochiのほうを選んで grub-installすると、内蔵ハードディスク/dev/sdaにインストールしてあった GRub2は、ちゃんと外付けUSBハードディスクを見つけて、該当するUUIDから起動できました。ありがとうございます。

(ただ、Grub2起動時に一瞬、Prefix が指定されていない、というようなエラーメッセージが出ます。とりあえず起動はできているので、あまり気にしていませんが)

投稿: つじ | 2011/10/11 21:15

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/20195/51057899

この記事へのトラックバック一覧です: grub2のusbms周りとそれに付随指定調べた情報:

« ubuntuのgrub2のLVM over RAID | トップページ | ブートローダまわりであれこれ »