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が最初に動いて必要なものはセットアップしているな。いずれにしても再現環境が手元にないと試行錯誤もできない。
![[hatena]](http://d.hatena.ne.jp/images/b_entry_de.gif)
![[RSS]](/d/rss10.png)