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