どうも、いつも妙な事に挑戦している馬場崎です。
今回は好奇心と実益を兼ねて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
__/__/__/__/__/__/__/__/__/__/