・USB-3.0 HDD へのインストール
Plamo-7.0 を USB-3.0 な外付け HDDにインストールすると、インストールは終了するものの起動できない、というトラブルが報告されたので、少し手元でも追いかけてみた。
USBってケーブル1本挿すだけで接続できるので便利なんだけど、内部的には 最初期の1.0とそれに続く2.0、現在の3.0と3つの仕様があって結構面倒。 PC側のコントローラも1.0のころはOHCI、2.0のころはEHCI、3.0になるとxHCIが要求される。
USB-2.0なHDDだとインストールできるけど、USB-3.0 な HDDではインストールできない、 という報告を聞いて、まず思ったのはPC側のコントローラで、調べてみると、Plamo-7.0のデフォルトでは xHCI はモジュールとしてビルドしていたので、そのままでは USB-3.0 な HDD を root partition に指定することができない。
USB-3.0 なドライブを読むためのドライバが USB-3.0なドライブ上にある、という、「缶切りが缶詰の中」状態
この問題を解決するには xHCIなドライバをカーネル組み込みにすればいいはずなので、その設定でビルドしたカーネルをインストールしてみたものの、症状は全然変らない。
当初は、「他にも必要なモジュールドライバがあるのかな?」と思って、内蔵HDDをroot partitionにして起動し、USB-HDD をマウントしてモジュール類が変るかとか試してみたけど、モジュールドライバの追加は一切起きておらず、なぜ読めたり読めなかったりするのかさっぱり分からない。
カーネルのバージョンを変えたり、不要なドライバを限界まで削ったりしたカーネルで試してみても root partition な USB-3.0 な HDD をマウントできない状態は変らず、いよいよ八方塞がりな感じ。
「さて、どうしたものか。。」と思った時、root fsをマウントできずにハングするカーネルのメッセージでも調べてみようか、と思いつき、まずは boot_delay=N なオプションを起動時パラメータに追加してみる。
boot_delay=N は、カーネルの内部ログを出力する printk に一定時間の遅延を加えてメッセージ出力を見やすくする機能なものの、今回のトラブルでは複数回の printk を呼んでないようで、指定した delay は機能しない。
さて、困ったな、他に似たようなカーネルパラメータはあったっけ。。と /usr/src/linux/Documentation/admin-guide/kernel-parameters.txt を "delay" をキーワードに調べたら、root_delay=N とか rootwait というパラメータの存在に気づいた。
これらのパラメータが何をしてるのかと言うと、root partition を読み込むまでに一定時間待つ(root_delay)とか root partition が読めるまで待つ(rootwait)な機能で、これを見た時に、「USB-3.0 HDD のスピンアップが間にあっていない」という可能性がひらめいた。
考えてみると、USB-3.0 はデータの転送速度が 2.0 までよりもずいぶん速くなっているので、起動したカーネルがroot partitionを読み込むまでの余裕はかなり短かくなっていて、その間に HDD のスピンアップが間に合わなければカーネルは"root fsを読み込めない”なエラーになるはず。
それに気づいて、起動時のパラーメータに rootwait を追加してやると、USB-3.0なHDDからも問題なく起動できるようになった。
当初「カーネルが読めるならroot fsも読めるはず」と思い込んでいたけれど、カーネルはgrubが読み込んで時間制限は無いのに対し、root fs はカーネルが読もうとして読めなければエラーになるので、spin up の余裕を持たせるのは必須だった感じ。
USB-3.0なHDDにインストールできない問題をググってみると、mkinitrd に xHCI が入ってない、みたいな答を目にするものの、確かにドライバ的には xHCI が必要だけど、initrd を使う場合は spin up に余裕があって「ドライバを入れてるのにroot fsが読めない」という問題は生じないようで、このあたりは initrd を使っていないPlamo 固有の問題だった感じ。
何とか解決できたので、さっそくUSB-3.0なHDDに対応したDVDイメージを作って、手元でも3TB な USB-3.0 HDD から起動する環境を作り、現在その環境で作業中。ここ3,4年使ってマウントにずいぶん時間がかかるようになった内蔵3TB HDDから必要なファイルをUSB HDD上にコピーして、HDDを整理しようと目論んでいる(w