vine-users ML アーカイブ



[vine-users:076417] GRUB起動 でBIOSが認識 しないUSB-HDD のVineLinux を使う

  • From: Seiichirou Babasaki <mindgear@xxxxxxxxxxxx>
  • Subject: [vine-users:076417] GRUB起動 でBIOSが認識 しないUSB-HDD のVineLinux を使う
  • Date: Sat, 17 Mar 2007 00:00:29 +0900
どうも、いつも妙な事に挑戦している馬場崎です。

今回は好奇心と実益を兼ねてBIOSから認識しないUSB接続のハードディスク上
のVineLinuxを使えるようにできないかという事に挑戦しました。
(実益の部分は、職場のノート型コンピュータのHDDにインストールせずに
 VineLinuxが使えたら、すっきりする事も多いというものです)
※毎度長文で読む方に迷惑かけます。要点だけだともっと短いのですが。

■本来のクリーンな手段と順序……
最初に参照するべきは
[vine-users:073138] 外付けHDにインストールする方法
……で始まるスレッドでしょう。そして、本来の順序から言えば
VineLinux4.1のインストールCDを使い、
 boot: linux usb-storage
             ~~~~~~~~~~~
……というパラメーターを与えてインストールするところから始めるべき
なのでしょうが、手法を確立していなかった事とか、解決していない疑問点
その他の理由で、当初この機器のハードディスクのDドライブパーティション
を切り直して普通にインストールし、しばらくそのまま運用しました。
なお、後に追試したところ、上記パラメータの追加でインストール開始時の
別コンソール画面でUSB-HDDを認識している所までは確認しました。

■2.5インチ USB-HDDの構成 (MBR未設定、起動フラグも無しです)
1: 1GB /bootディレクトリ、ラベルは mobileboot 、 ext3
2: 1GB swap ラベルは swap-mobile
3: 残り全部(約115GB) /ディレクトリ、ラベルは mobileroot ext3
4: 1GB (空き)、ラベル無し、将来のシステム更新用、VFAT(FAT16)
※ラベルはフォーマット時に設定したもので、任意ですが通常VineLinuxが
  使わないボリュームラベルにしています。もちろん、UUIDを使うという
  選択肢もあります。要するに、このHDDを特定できるユニークなもので
  あれば良いというものです。
※システム更新用の第4パーティションは必須ではありませんが、あれば
  将来ここにインストールCDのイメージファイルを納めることでメジャー
  アップデートでちょっとだけ楽になります。また、VineLinux提供の物では
  無いけれど、自分が常に使うものを保管しておく場所にも出来ます。

続いてルートディレクトリに # rsync -avc を用いて機器本体内蔵のHDDに
インストールした内容を出来るだけ複製しました。ただし、ディレクトリ内容に
よっては複製不能な(不必要な)ものもありましたので、そのあたりは適当に
飛ばして進めました。
※後で思いましたが、この時にインストールCDを使って基本的なインストールを
  しておいて、それから rsync を使えば良かったですね。

必ず変更する箇所は USB-HDD側の /etc/fstab です。通常ラベルが
 / や /boot そして SWAP-sda4(ここは可変) のものをマウントする記述に
なっていると思います。これを用意したボリュームラベルにします。
前述したようにUUIDでも良いようです。VineLinuxで通常使用するラベルと
変える理由は、これがUSB-HDDで、他のLinux機の特定のディレクトリに
マウントしたい事もあり、その際の利便性を考えてのものです。

ここまでがUSB-HDD側での準備です。
ディスク代やケース代で12,000円から15,000円ほどかかるでしょうか。
2.5インチUSB-HDDの場合、電源はUSBだけで賄えるはずですが、安定しない
場合は補助電源や Y字ケーブルタイプが良いようです。不調の時はケースの
性能も疑った方が良さそうでした。

■起動ディスクの準備
最初にGRUBのマニュアルを読みます。日本語版が少なくて迷いましたが、
基本は info grub でした。参考になったサイトは、
http://jo1upk.blogdns.net/linux/index.php?ソフト/GRUB/コマンド
……です。

まずテストのためにGRUB起動フロッピーを作成しました。
FATでフォーマット済み、またはLinuxでFATフォーマットしたフロッピーを
用意して、root でマウント(例えば/media/fd0/)します。そしてGRUBの
コマンドを使うのですが、私の環境では --no-floppy オプションを付けないと
コマンドが終了しませんでした。(もともと時間のかかる作業ではあります)
# grub-install --root-directory=/media/fd0/ '(fd0)' --no-floppy
続いてフロッピーのセットアップ
# grub            <-- 対話コマンド起動
grub> root (fd0)  <-- 起動デバイスはフロッピー
grub> setup (fd0) <-- フロッピーに設定
grub> quit        <-- 終了

……本体側の/boot/grub/ディレクトリにあるものからコピーしなくてはならない
必須のものはありません。menu.listが無くても対話メニュー(grubシェル)が開く
だけですが、オプションを試したかったので私は本体の menu.list に若干手を
加えたものをコピーしました。容量に余裕があったので *stage1_5ファイルは
全部コピーしました。stage2ファイルは必須ですが、既にフロッピーに入っている
と思います。device.mapも通常は変更する必要は無いと思います。
(fd0 cd hd0,1,2,3……のルールを知っていれば足りるはずです)
特殊な機器を使う場合は device.mapに記載したり削除したりというケースも
あるようですね。(そうした記事は多いので参照に事欠かないでしょう)

このフロッピーを使って起動し、eキー で編集モードに入り、さらに eキーで
ライン編集に入って、
grub> root ( <-- ここまで入力して、[TAB]キーを押す
……ようにドキュメントに示されています。その結果、この機ではstage2時点で
 hd0、fd0、cd の3デバイスしか認識していない事が分かり、これはBIOSの
メニューで得られる情報とほぼ同じです。このPCがUSB機器からの起動には対応して
いない事を再確認した事になり、(たぶん間違い無く)USB-HDD上に置いた
 /boot以下のファイルを読みに行くことは出来ない、と判断しました。

続いて、# info grub の情報を元にCD-ROMの作成を行いました。
(※実際はやり直すことを考えてメディアにはCD-RWを使いました)
info grub のセクション「3.4 Making a GRUB bootable CD-ROM」になります

問題は起動時に読み込む vmlinuz と initrd.img だろう、という判断の元
 [vine-users:073206] の記事を参考にしつつ、mkinitrd のマニュアルから
initrd.usb.img を作成しました。(パラメータはかなり冗長です)
#  mkinitrd -v --preload=uhci-hcd --preload=ehci-hcd \
 --preload=ohci-hcd --preload=usb-storage --with-usb \
 /boot/initrd.usb.img 2.6.16-0vl68
エラーがでなければイメージファイルが出来ています。

任意の作業ディレクトリ(今回は~/isolinux/)に/boot/以下の必要なファイルと
/boot/grub/以下の必要なファイルをコピーします。起動だけが目的なので、
シンボリックリンクは無しにして、実体の vmlinuz-2.6.16-0vl68 を vmlinuzと
リネームして使いました。(他のリンク物も同様にリネームしています)

stage2_eltorito が必要なので /usr/lib/grub/i386-pc/stage2_eltorito を
~/isolinux/boot/grub/stage2_eltorito にコピーします。

そしてmenu.listを変更します。以下は実際の物です。

default=0
timeout=30

title VineLinux (USB-HDD)
 root (cd)
 kernel /boot/vmlinuz ro root=LABEL=mobileroot resume2=swap:/dev/sda2 vga=0x317 
 initrd /boot/initrd.usb.img

title VineLinux
 root (hd0,2)
 kernel /boot/vmlinuz ro root=LABEL=/ resume2=swap:/dev/sda4 vga=0x317
 initrd /boot/initrd.img

title Back Windows
 rootnoverify (hd0,0)
 makeactive
 chainloader +1

デフォルトの「VineLinux (USB-HDD)」では起動デバイスに(cd)を選択しています。(1行目)
2行目ではルートファイルシステムとしてLABEL=mobilerootを指定し、サスペンド設定として
swapファイルと /dev/sda2を指定します。これについてはサスペンドやhibernateを
キーワードに意味を調べる必要がありました。
面白いことに、この機械には内蔵HDDがSATAで、通常こちらが /dev/sda になるのですが、
こうやってUSB-HDDをルートファイルシステムにすると、USB-HDDの方が /dev/sda に変わり
ます。そのため、swap の位置を /dev/sda2 としています。
(一般的にこうなるのかは判断できません)
3行目はモジュールを追加した initrd イメージです。追加モジュールはもっと少なくても
いいのかもしれませんが、私の機器では以前にコントローラーに不安な事もあったので
思い付くものを全部含めました。

二つ目のタイトルは内蔵HDDに普通にインストールしたVineLinuxのための物です。
三つめは内蔵HDDにもともと入っているWinXPのための物です。

確認が済んだところでCDイメージを作成します。上位ディレクトリ ~/ に戻って、
$ mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot \
  -boot-load-size 4 -boot-info-table -o grubusb.iso isolinux
…… GRUB のinfoに従い、実際のディレクトリに合わせて作成コマンドを実行。

できあがった grubusb.iso を使い、CD-ROMを作ります。今回は xcdroast を使いました。
grubusb.isoを使えばCD-ROM作成はどのツールでも問題ないと思います。

■CD-ROM起動
CD-ROMデバイスが内蔵HDDより優先的に起動するように設定されていれば、このCD-ROMを
セットして、用意したUSB-HDDをつないだ状態で電源を投入することで GRUB が起動し、
grub はCD-ROM上の /boot/ ディレクトリに置かれた vmlinuz カーネルと
 initrd.usb.img を読み込み、パラメーターを渡します。usbを認識できる状態になった
カーネルはパラメーターからラベル mobileroot を探してルートファイルシステムとして
マウントし、後は普通に見慣れた起動画面状態に移行します。
起動完了後は起動に使ったCD-ROMはイジェクト出来ますから、光学ドライブを占領される
事はありません。

※その後、この環境で間違い無く仕事もできることが確認できたので、内蔵HDD上の
  VineLinuxを削除しております。


■可搬性?
Xの設定、特にビデオカード、や、ネットワーク設定、ユニークなハードウェア
デバイスあたりがネックでしょうか。このCD-ROMとUSB-HDDがあれば、どこでも
Myマシン、という所まではいきません。ただ、職場のように似たような機器が
ある所だと、必要に応じて仕事にもレスキュー目的にも、ストレス無く利用できて
かなり気持ちよいです。
また、USB起動に対応したマシン用にはMBRにGRUBを入れておくという事もやって
みようかなと思っています。

-- 
__/__/__/__/__/__/__/__/__/__/
 ZON or MaruArt. 
>> Babasaki Seiichirou (Jap)
E-Mail mindgear@xxxxxxxxxxxx
Zaurus      zon@xxxxxxxxxxxx
__/__/__/__/__/__/__/__/__/__/