2006年07月27日

SATAにd-iでインストール後、GRUBでのディスクデバイス名が変になる

いくつかwritebackで報告は受けていたのだけど、あまりまともな情報を得ていなかった(writebackのところでサポートする気はないし…まとめてdebian-usersなどに出してくださいね。YOUR RISKで使うものだし、debian-usersも本当は適切ではないが。)こともあり、どこかのバグか環境固有かなぁと思いつつ放置していた問題。

Association for Computing Machineryの人から詳細な情報付きで同じことが報告されてきて、これでようやく原因がわかった気がする。結論から言えば直しようがないんだけど。

報告者によると、4-in-1カードリーダをUSBに接続しているため、d-iの起動時にすぐに実行されるusb-discoverによってこれが/dev/sda〜/dev/sddの4つのデバイスがさっそく用意される。SATAドライブはこのあとのSATAコントローラが認識されてからのデバイス提供となるので、/dev/sdeになるわけだ。

GRUBのインストールやその実行はデバイス名ではなく、認識されたハードディスク単位(hd0)なので、GRUBが起動し、カーネルを読むところまでは問題ないことになる。 しかし、GRUB設定には「root=/dev/sde1」のようにd-iで認識されたときのパーティションデバイスが書かれている。

rootが実際に参照されるのはinitrd RAMディスク実行が完了してからということになるが、このinitrd内のミニルート環境では、SATAコントローラが先にロードされる(udev検索はPCI認識順?)。つまり、この時点でSATAドライブは/dev/sdaとなり、GRUBのroot設定と食い違い、環境が見つからない旨のエラーになってしまう。ちなみにUSBコントローラが認識されるのは、その後システムが起動してudevが呼び出されてから、ということになる(4-in-1カードリーダは/dev/sdb〜/dev/sdeになる)。

initrdの仕組みとも絡むので、d-i側でこれを回避する方法というのはけっこう難しい。USBキーボードをサポートするために用意している仕組みが仇となってしまっている。USBをd-iの時点で使わないのであれば、debian-installer/probe/usb=falseとして、無効にしておくという手がありそうだ。

うーん、でもいろいろ調べてみるとまたちょっと違う気がしてきた。どちらもudevdが最初に動いて必要なものはセットアップしているな。いずれにしても再現環境が手元にないと試行錯誤もできない。