2006年06月16日

Sarge x86におけるSATA対応状況

いっぱい嘘書いてそうなので、詳細については本文末尾のサイトのほうを見ましょう。

これまでIDE接続の安価なディスクやCDドライブに多用されてきた「パラレルATA(PATA)」に代わり、より高速化が可能で接続や交換が容易になった「シリアルATA(SATA)」が目下のディスク接続バスのトレンドになっています。CD/DVDドライブの都合上、ほとんどのマザーボードにはPATAも用意されており、こちらに低速ドライブが接続されているのが一般的ですが、ハードディスクについてはSATAで構成する市販PCも多くなりました。SATAディスクの取り回しを一度でも味わったら最後、PATAでのそれはひどい苦行と感じるようになります。

さて、PATA→SATAに規格もバスも変わったことで、SATAディスクを認識するためには、その接続しているバス――SATAコントローラが認識されないと話になりません。WindowsならメーカなりMicrosoftなりがドライバを用意してくれているのでほぼ問題ないのですが、LinuxのようなフリーOS、さらに言えば、メーカとNDAを結んでバイナリドライバを作るといった作業が精神的にできないDebian GNU/Linuxの場合はかなり不利な立場に立たされます。

旧来のPATAコントローラ(いわゆるIDEコントローラ)のほうは過去からの蓄積でかなり枯れているのでほとんどのコントローラを認識でき、そこに接続されているディスクやCDドライブなどを利用できるのですが、SATAコントローラの場合には今まさに開発佳境で、日進月歩、あるいは苦戦中といった状況です。

ということで、利用するLinuxカーネルでどのようなSATAドライバが用意されているかによって、どのSATAコントローラおよびその接続デバイスを扱えるかどうかが決定します。ドライバがなければどんなにがんばっても多分無理です。

ようやく本題になりました。Sargeのx86版に話を絞りますが、Debian GNU/Linux Sarge x86(i386)では、カーネルバージョン2.4.27とバージョン2.6.8が採用されています。Debianリビジョンはセキュリティアップデートでときどき変わることがありますが、機能拡張は行われないため、このバージョンから更新されることはありません。SATAの対応は開発の活発な2.6シリーズのほうがよいので、2.6.8について見てみましょう。どのフレーバーを選ぶにせよ、収録されているSATAドライバは次の8種類です。

  • sata_nv
  • sata_promise
  • sata_sil
  • sata_sis
  • sata_svw
  • sata_sx4
  • sata_via
  • sata_vsc

1つひとつ見ていきましょう。

sata_nv: NVIDIA nForce SATA
nForce2/3、CK804/MCP04チップセットに対応。
sata_promise: Promise SATA TX2/TX4
Promiseの2037x、20319に対応。
sata_sil: Silicon Image SATA
Silicon Imageの3112、3114に対応。
sata_sis: SiS SATA
SiSのsis964/180に対応。
sata_svw: ServerWorks Frodo/Apple K2 SATA
Broadcom/ServerWorks/Apple K2に対応。
sata_sx4: Promise SATA SX4
Promise 20621に対応。
sata_via: VIA SATA
VIAのvt6420に対応。
sata_vsc: Vitesse VSC7174 DPA SATA
Vitesse VSC-7174、Intel 31244に対応。

これに当てはまるなら幸運です。Sargeを難なくインストールできるでしょう。

さて、上記に含まれないSATAコントローラの場合は困りました。 もしかしたら、より新しいカーネルを使うことで、これを解決できるかもしれません。現在unstableにあるカーネル2.6.16を見てみると、次のコントローラが追加されているようです。

ahci: AHCI SATA
IntelのICH6/ICH6M/ICH7/ICH7M/ICH7R/ICH7M-DH/ICH8/ICH8M/ESB2、UliのM5288、JMicronのJMB360/JMB363に対応。最近はこれがポピュラーなのではないかと思います。つまりSarge純正ではインストールできません。BIOSでPATA互換に切り替えることができる場合もあります。
sata_mv: Marvell SATA
Marvell 504x/5080/508x/604x/608x、Adaptec 604xに対応。それなりに採用されているみたいなのですが、ドライバの開発が止まっているとか…
sata_qstor: Pacific Digital Corporation QStor SATA
Pacific Digital CorporationのQStor 2068チップに対応。
sata_sil24: Silicon Image 3124/3132 SATA-2
Silicon Imageの3124/3131/3132に対応。
sata_uli: ULi Electronics SATA
ULiの5281/5287/5289に対応。

ほかにもsata_nv: MCP51/MCP55に対応、sata_promise: 20619/20771に対応、sata_sil: 3512に対応、 sata_via: vt6421に対応といった追加サポートもあります。

新しいカーネルを使う方法ですが、すでにシステムがあってそこにこれらのPCIカードを追加するというならカーネルをbackports.orgから取ってきてインストールするなり、あるいは独自ビルドするなりで済みます。しかし、まったくまっさらなシステムをインストールする場合には、そもそもディスクが見えないということになるので、インストーラレベルでなんとかすることになります。

1つの案はEtchのインストーラを使う方法です。Etchのインストーラには新しいカーネルが採用されているので、おそらく上記のドライバも収録されており、認識される確率も高いと言えます。Sargeシステムを希望している(普通はそうですよね)場合には、そのあとでPINなどを駆使しつつちょっと苦労してカーネルを除くパッケージの退行作業を行うことになります(でもカーネルのせいで結局あまり退行できないかも)。EtchのインストーラではSargeをインストールできるようになってもいるのですが、結局これはカーネルをSarge純正の2.6.8から拾ってインストールすることになるため、意味がありません。

もう1つの案はSargeのカーネルを入れ替えたカスタムインストーラを使う方法です。たとえば私の作ってるカスタムインストーラのポータル。現時点では2.6.15を用意しています。それなりに実績はありますが、まだ若干不具合はありそうです。2.6.16にしろという圧力がありますが、CUPSの大量のバグに目途をつけてからということで。つまり、CUPSに修正パッチをどしどし応募してくれると、2.6.16カーネル版をリリースできます(笑)。

なお、ドライバはあるのにDebian Sargeインストーラ(あるいはカスタムインストーラ)ではコントローラが認識されない、ということがあるかもしれません。こういうときにはAlt+F2でシェルに移動して、「modprobe ドライバ」を手動で実行するとうまく認識される可能性があります。なぜこういうことが起きるかですが、DebianインストーラではPCI IDとそれに対応するドライバのマッピングファイルに基いてドライバを組み込むdiscoverというツールを使っています。つまり、このマップに書かれていないと、そんなPCIデバイス向けのドライバはないよ、ということになっちゃうわけです。インストール後のシステムではhotplugあるいはudevといったホットプラグ機構でカーネルが直接にPCIデバイスとそのドライバを対応付けてくれるので、いちいち手動で行う必要はないようになっています。インストール後の最初の起動ではどうやってコントローラを認識させているのかですが、これはカーネルのインストール時に動的に生成されたinitrd RAMディスクの中にミニシステムが用意されていて、この中で「とりあえず手持ちのコントローラドライバを試行してみる」というようになっています。「手持ちの」はインストール時点の状況に依存しているので、システムを丸ごとPATA→SATAに移行するといったときにはinitrd RAMディスクの構成設定を書き換えて再作成する必要があります。

より詳しいSATA対応の最新情報については、Gentoo JPで翻訳されている「LinuxのシリアルATA(SATA)対応状況」を読むのがよいでしょう。最新情報のため、機能やサポートなどにおいてDebian(特にSarge)での対応とは食い違う点はありますが、参考になる点は多くあるはずです。

ミートソーススパゲッティ

ニンニク、玉葱、人参、挽肉で。