<!doctype linuxdoctr system>

<!-- The Ultra-DMA Mini Howto SGML source
  Version 1.45, 7/6/98
  by Brion Vibber
-->

<article>

<title>The Linux Ultra-DMA Mini-Howto
<author>Brion Vibber, <tt><htmlurl url="mailto:brion@pobox.com" 
name="brion@pobox.com"></tt>
<!-- <date>v1.41, 3 May 1998 -->
<date>v1.45, 6 July 1998
<trans>中野 正剛 訳, <tt><htmlurl url="mailto:sx3m-nkn@asahi-net.or.jp"
       name="sx3m-nkn@asahi-net.or.jp"></tt>
<!-- <tdate>v1.41J, 11 May 1998 -->
<tdate>v1.45J, 12 July 1998

<abstract>
この文書では、Ultra-ATA, Ultra33 とも呼ばれる Ultra-DMA 対応の
ハードディスクドライブおよびコントローラを Linux 上で使うための方法を
説明しています。
この mini-HOWTO の最新版は、以下の場所から HTML フォーマットの
ものを入手することができます。

<htmlurl url="http://pobox.com/~brion/linux/Ultra-DMA.html" 
name="http://pobox.com/&tilde;brion/linux/Ultra-DMA.html">
</abstract>

<toc>

<sect>まえがき<label id="main-intro">

<p>
この文書の目的は、Ultra-ATA, Ultra33 とも呼ばれる Ultra-DMA
対応のハードディスクドライブおよびコントローラを
Linux 上で使うための方法を説明することです。
特に意識しなくてもこれらのデバイスは動いてしまうケースもあります。
しかし、その場合も少し手を加えることで、より一層性能を上げることが可能です。
また、場合によっては、ハードディスクにアクセスできるようにするだけでも
途方も無く長い道のりになってしまうこともあるのです。

<sect1>免責事項<label id="disclaimer">

<p>
この文書に書かれている情報は (私の知る限りにおいて) 正確で、
きちんと動作するはずです。しかし、綴りのまちがいもあるかも知れませんし、
文書の転送中に謎のエラーが起きてしまうかも知れません。
また、あなたのシステム上に互換性の問題がある可能性もあります。
これらの理由から、ここに書かれた方法ではうまく動作しないかもしれません。
そういうわけですので、ハードディスクをいじり始める前に、大事なデータは
<bf>必ずバックアップをとって</bf>おいてください。
もしまだバックアップをとる習慣がないのでしたら、
これからはとるようにしましょう。あなた自身のためです。

<sect1>クレジット<label id="credits">

<p>
  Brion Vibber (<htmlurl url="mailto:brion@pobox.com" name="brion@pobox.com">)
   - この文書を書きました。

  Gadi Oxman (<htmlurl
  url="mailto:gadio@netvision.net.il" name="gadio@netvision.net.il">)
   - Promise 用 Ultra33 パッチと設定に必要な値を読み出す方法を
   見つけてくれました。

  John G. (<htmlurl url="mailto:prefect@ipass.net" name="prefect@ipass.net">)
   - VIA VP2 用パッチと情報を提供してくれました。

  Giovanni (<htmlurl url="mailto:giovanni@sudfr.com"
  name="giovanni@sudfr.com">)
   - UDMAを有効にする VIA 関連のパッチと情報を提供してくれました。

  Martin Gaitan
   - Promise で ide0/ide1 に設定するやり方を教えてくれました。

  Norman Jacobowitz - Bugged me to add info on the VP3
   - VP3 の情報を付け加えるように忠告してくれました。

  Andre Balsa (<htmlurl
  url="mailto:andrebalsa@altern.org" name="andrebalsa@altern.org">)
   - いくつかの一般的な UDMA に関する情報と Intel TX, SiS, VP1 用の
     汎用の UDMA 用パッチを作成してくれました。

  Masayoshi Nakano - 日本語に翻訳しました。

  Maxime Baudin - フランス語に翻訳しました。

<sect1>文書の履歴<label id="history">
<p>

  v1.45, 6 July 1998: 若干のアップデート。
Promise Ultra33 のための
Red Hat 5.1 と 2.0.34 カーネル用パッチに関する情報の追加。

  v1.41, 3 May 1998: タイプミスの修正、翻訳者をクレジットに追加。

  v1.4, 28 April 1998: UDMA用汎用パッチ、その他一般的な情報、
著作権についての章を追加。

  v1.3, 5 March 1998: VIA VP3 の情報を追加、パッチの当て方の説明を改善、
Promise 用パッチの場所を最新のものに変更。

  v1.2, 27 January 1998: Promise に関する情報の追加。

  v1.1, 21 January 1998: VIA チップセットに関する新しい情報の追加、
Promise Ultra 33 を使わないインストール方法を追加、バスマスタと UDMA
転送モードを有効にするための情報の追加。

  v1.0, 19 January 1998: SGML フォーマットで仕上げた最初のバージョン。

<sect1>著作権について<label id="copying">
<p>
(訳注: この章は原文を併記します。内容については原文が優先されます)
<p>
  This document may be freely copied and distributed for informational
  purposes. It may not be modified, except for reformatting, without the
  permission of the author. If you wish to translate this document into another
  language you may do so, however you should contact the author first so that
  updated versions of this document can be sent out to translators as well as
  directly to the Linux Documentation Project.
<p>
情報を提供するという目的で使用される限り、この文書を自由に複製し、
配布して頂いてかまいません。
フォーマットを変換することも問題ありませんが、
著者の承諾無しに内容を書き換えることはしないでください。
もし他の言語に翻訳したいということであればしていただいてかまいません。
ただし、その際は前もって著者に連絡をしてください。
そうしていただければ、今後、この文書をアップデートした際に、
Linux Documentation Project に送るのと一緒に訳者の方にも
お送りすることもできるようになりますので。

<sect>Ultra-DMA って何？ なぜそんなものを使うの？<label id="udma-intro">
<p>

ここでは IDE 関連の技術について簡単に説明します。

<sect1>IDE と EIDE、そして ATAPI<label id="classic">
<p>

これらはドライブに関する古い技術です。現在、店で売っていたり
実際に使われていたりするドライブのうち、SCSI でないもののほとんどが
EIDE です。
その中でも、現在入手できる大容量ドライブの多くは UDMA (Ultra-DMA)
をサポートしています。

<sect1>バスマスタ DMA<label id="bm">
<p>

バスマスタ DMA は、ハードディスクの転送速度を上げるための技術です。
この機能を使うためには、マザーボード、BIOS そしてドライブが
サポートしていなくてはなりません。

この技術についてもっとお知りになりたい方は、
下記のページを参照してください。
  
<htmlurl 
  url="http://developer.intel.com/design/pcisets/busmastr/FAQs.htm"
  name="http://developer.intel.com/design/pcisets/busmastr/FAQs.htm">

<sect1>Ultra-DMA、またの名を Ultra-ATA、またの名を Ultra33、
またの名を...<label id="udma">

<p>
Ultra-DMA はいろいろな呼び方で呼ばれますが、ここでは単に、UDMA と
呼ぶことにします。

UDMA は、最大 33.3 MB/秒 (EIDE の 2倍) という
これまで以上の転送速度を持ちながら、
SCSI に比べてはるかに低価格が実現できるという先進的な技術です。
最近のコンピュータには、UDMA 対応のドライブとコントローラが
搭載されていますし、UDMA をサポートしていない既存のシステムでも、
(例えば Promise Ultra33 のような) UDMA コントローラカードを
増設することで、スピードアップをはかることが可能です。
こういったカードの増設は UDMA をサポートしない古いドライブの
パフォーマンスの向上にも有効です。

UDMA の概略については、下記の場所に非常に良い情報があります。

<htmlurl url="http://www.quantum.com/src/whitepapers/ultraata/"
    name="http://www.quantum.com/src/whitepapers/ultraata/">

ここで注意しないといけないのは、UDMA は通常の単なる DMA と比べて
ケーブルの長さ制限が厳しいということです。
できるだけケーブルの全長は 30cm 以下になるようにしてください。

<sect>UDMA ハードディスクを EIDE コントローラと組み合わせて使用する
    <label id="udma-on-eide">

<p>
これは簡単です。全ての UDMA ドライブは EIDE と完全に互換性があるので、
EIDE コントローラに接続した場合は、従来のタイプのドライブと同じように
動作します。
Linux からも何の問題もなく認識され、そのまま使用することができます。
しかし、この場合の転送速度の最大値は、EIDE の限界である 16.7 MB/秒に
制限されてしまいます。

<sect>ハードディスクを UDMA コントローラと組み合わせて使用する
    <label id="using-udma">

<p>
この組み合わせについては、うれしい情報とうれしくない情報があります。
うれしい情報とは、UDMA コントローラには UDMA 対応ドライブだけでなく
従来の EIDE ドライブも接続することができ、さらには EIDE コントローラに
接続したときよりもずっと大きな転送速度を出せる可能性があるということです。

うれしくない情報とは、現行の安定版の Linux カーネルでは (少なくとも 
<!-- 2.0.33 では) UDMA はサポートされていないということです。 -->
<!-- Begin New 1.45 -->
2.0.34 では) UDMA のサポートは十分とは言えず、PCI UDMA カードについては
全くサポートされていません。
<!-- End New 1.45 -->
<!--
開発版のカーネル (現在は 2.2.98) や、次にリリースされる安定版の 2.0.34
でないと UDMA サポートの機能は (標準では) 入っていません。
-->
<!-- Begin New 1.45 -->
より良い UDMA サポートの機能を得たいのなら
開発版のカーネル (現在は 2.2.108) を使用するか、
次にリリースされる安定版の 2.0.35 を待たなくてはなりません。
<!-- End New 1.45 -->
しかし、この点については現行のカーネル用の UDMA サポート用パッチが
いくつも公開されています。

また、マザーボードに組み込まれるよりアダプターカードに載っていることの
ほうが多いような、ある種の UDMA コントローラについては、使用するために
パッチを当てるか多少の技を使うかしなければなりません。

だからこそこの文書が存在しているのです。
パッチの入手方法やちょっとしたテクニックを説明するために。

<sect>Promise Ultra33 IDE<label id="promise">

<p>
これは 2つの UDMA チャネルを持っていて、4台までのドライブをサポート
する PCI カードです。仕様、価格等の情報は以下の場所で調べてください。

  <htmlurl url="http://www.promise.com" name="http://www.promise.com">

このカードは Gateway 2000 の初期の Pentium II システムに搭載されて
いました。最近のモデルはどうだか分かりません。

<!--
最近の開発版のカーネル (現在は 2.1.98) には PCI IDE コントローラを
-->
<!-- Begin New 1.45 -->
最近の開発版のカーネル (現在は 2.1.108) には PCI IDE コントローラを
<!-- End New 1.45 -->
サポートするための汎用のコードが入っていて、Promise Ultra33 は自動的
<!--
に認識されるはずです。しかし、安定版のカーネル (現在は 2.0.33) では、
-->
<!-- Begin New 1.45 -->
に認識されるはずです。しかし、安定版のカーネル (現在は 2.0.34) では、
<!-- End New 1.45 -->
パッチが必要になります。そのため、Linux のインストールをするのが少し
難しくなっています。

<sect1>Promise を使って Linux をインストールする
  <label id="linux-on-promise">

<p>
Promise コントローラ用のパッチは存在します。しかし、あなたが Linux
をインストールしたことがないのであれば、パッチを当ててカーネルを
再構築するのは「すごく簡単」とは言えません。
この章ではインストールの手順を紹介します。
なお、以下に示した、インターフェースの設定を読み出す方法を
教えてくれた Gadi Oxman に感謝します。

<tscreen><verb>
インストールディスクを使用してコンソールが使えるようにできるなら、
cat /proc/pci とタイプすることで Promise のインターフェースの設定を
表示させることができます。以下に例を示します。

    RAID bus controller: Promise Technology Unknown device (rev 1).
      Vendor id=105a. Device id=4d33.
      Medium devsel.  IRQ 12.  Master Capable.  Latency=32.
      I/O at 0xe000.   (a)
      I/O at 0xd804.   (b)
      I/O at 0xd400.   (c)
      I/O at 0xd004.   (d)
      I/O at 0xc800.   (e)

この読み出した値を使って、コマンドラインのパラメータとして
ide2=a,b+2 ide3=c,d+2 をカーネルに渡してやればよいのです。
</verb></tscreen>

(訳注: a,b,c,d には、それぞれのI/Oポートアドレスを代入してくださ
い。上の例であれば、(b) = 0xd804 なので、b+2 の部分には 0xd804+2
つまり 0xd806 が入ります)

注意しないといけないのは、上に出てきた数字は必ずしもあなたのマシンで
のものとは一致しないということです。

(訳注: BIOS やハードウェアの構成で変わります)

たとえば、上の例では、具体的にセットするべきパラメータは
<tt/ide2=0xe000,0xd806 ide3=0xd400,0xd006/になります。
もしかすると IRQの値を入れないとうまく動かないかもしれません。
上の例では、IRQ 情報を入れると、
<tt/ide2=0xe000,0xd806,12 ide3=0xd400,0xd006,12/のようになります。
1番目のチャネルしか使用しないのなら (たとえば、Promise にドライブを 
1つしか接続しないとか、2つのドライブをマスタ/スレーブで接続する場合)、
<tt/ide3/ のパラメータは必ずしも必要ではありません。

<!-- Begin New 1.45 -->
<bf>Red Hat 5.1 の場合:</bf> 
まず、ブートディスク (boot diskette) を使って立ち上げ、
プロンプトで Enter キーを押します。
カーネルがロードされ、続いて言語やキーボードのタイプ、インストール方法
について質問が現われますのでそれらに答えてください。
やがてどこからインストールするのか (source media) を聞いてくる画面が
表示されます。
これはあなたの環境に合ったものであればどれを選んでもかまいません。
次にインストール先の選択 (Select Installation Path)
の画面が現れますので、ここで Alt-F2 を押してコマンドプロンプトを
表示させます。
<tt>cat /proc/pci</tt> を実行し、表示された上記の各数字を書きとめ、
再びブートディスクから起動します。
今度は最初のプロンプトの画面で
<tt>linux ide2=</tt> 
<em/(ここに上記の数字が入ります。カッコは入れないで)/
<tt/ ide3=/<em/(ここも同じく)/ と入力してください。
ここまでで、後は問題なくハードディスクへのインストールができるはずです。

(訳注: パラメータ部分の「カッコ」は入力しないように :-)。
また、それぞれの内容はコマンドパラメータのときと同じものです。
また、ide3 以降のパラメータは、前にも書かれているように、1チャネル
しか使用しないのであれば省略可能と思われます(未確認ですが))

ただし LILO のインストールはこれだけではうまく行きません。
LILO とカーネルにパッチを当てるまでは(詳細は後述)、
ブートフロッピーを用いて先ほどと同じパラメータをブートのたびに
手で入力して立ち上げてください。
<!-- End New 1.45 -->

<bf>Red Hat 5.0</bf> での具体的な手順は以下のようになります。
まず、インストール用ブートフロッピー (Installation boot floppy) を
使って立ち上げ、ブートプロンプトで <tt/rescue/ と入力します。
いくつかのファイルをロードした後、サプルメンタルディスク 
(supplemental disk) を入れるようとの指示やらモニターやキーボードに
ついての質問に答えていくと、最後にコマンドプロンプトの画面になります。
<tt>cat /proc/pci</tt> と入力し、先に述べた、設定に必要な数字を
書きとめます。それからマシンをリブートし、再びブートフロッピーから
立ち上げます。今度は、ブートプロンプトで
<tt>linux ide2=</tt><em/(先に示したパラメータと同じ数字)/ 
<tt/ide3=/<em/(ここにも)/ と入力します。

<!--
(訳注: パラメータ部分の「カッコ」は入力しないように :-)。
また、それぞれの内容はコマンドパラメータのときと同じものです。
また、ide3 以降のパラメータは、前にも書かれているように、1チャネル
しか使用しないのであれば省略可能と思われます(未確認ですが))
-->
<!-- Begin New 1.45 -->
(訳注: RedHat 5.1 の場合の訳注を参照してください。)
<!-- End New 1.45 -->

<!--
これで問題無くハードディスクにインストールできるようになります。
-->
<!-- Begin New 1.45 -->
これで LILO 以外は問題無くハードディスクにインストールできるように
なります。
後述のように LILO とカーネルにパッチを当てるまでは、
インストールに使用したブートフロッピーを使用して
ブートのたびに先ほどと同じパラメータを入力し、
立ち上げなければなりません。
<!-- End New 1.45 -->

<bf>Slackware 3.4</bf> での具体的な手順もほぼ同様です。
まず、あなたのシステムにあったブートディスクを使い、ブートプロンプト
で何も入力せずに Enter だけ押します。
カーネルがロードされ、ルートディスクを入れるようにとの指示が現れます。
ルートディスクを入れ、ロードされるのを待ちます。root でログインし、
<tt>cat /proc/pci</tt> と入力し、先に示した数字を書きとめます。
それからマシンをリブートし、再度ブートフロッピーから立ち上げます。
今度は、ブートプロンプトで <tt/ramdisk ide2=/<em/(先に示した
パラメータと同じ数字)/ <tt/ide3=(ここにも)/ と入力します。

(訳注: カッコそのものは入力しないように :-)。それぞれの内容は
コマンドパラメータと同じものです。また、ide3 以降のパラメータは、
前にも書かれているように、1チャネルしか使用しないのであれば省略可能と
思われます (未確認ですが))

<!--
これで正常にハードディスクにインストールできるようになります。
-->
<!-- Begin New 1.45 -->
これで LILO 以外は問題無くハードディスクにインストールできるように
なります。
後述のように LILO とカーネルにパッチを当てるまでは、
起動用にブートフロッピーを作成して
ブートのたびに先ほどと同じパラメータを入力して
立ち上げてやる必要があります。
<!-- End New 1.45 -->

その他の Linux ディストリビューションの場合は、それぞれに応じて若干
変わってくるものと思います。ただ、その場合でも基本的なやり方は先に述べた
ものと変わらないはずです。

<bf><em>重要:</em></bf> パッチ (これについては
<ref id="patch-promise" name="Promise 用のパッチを当てる">
の章で述べます) が入っていない状態では、カーネルがハードディスクに
アクセスするためには、先に示したようなブートパラメータが<bf>必要</bf>
です。
そのため、LILO を設定する際にも (ハードディスクにインストールする場合でも
フロッピーの場合でも) インストール時と<bf>全く同じパラメータ</bf>を
指定するということがとても重要になります。きちんと設定されていないと
システムはブートしません。
毎回ブート時に LILO にパラメータを入力して (たとえば、ブートする度に 
Shift キーを押して <tt/linux ide2=/<em/...../ と入力して) 
立ち上げることは可能です。
しかし、そのためには必要なパラメータを覚えていなければいけません。
おすすめなのは、できるだけ早くカーネルにパッチを当ててしまうという
ことです。
パッチ入りのカーネルをブートできるようにしてしまえば、
もうブートパラメータなど気にしなくてもよくなるのです。
それに、私の知る限りでは、(<tt/make zdisk/ で作ったような) 純粋な
カーネルブートフロッピーにブートパラメータを渡す手段はありません。
ブートパラメータを渡すためには、LILO やその他のローダ (例えば loadlin) 
を使わなければなりません。

<!--
パッチの当たっていないカーネルでは、正常にドライブを検出した場合でも
ide2, ide3 をうまく使えない場合があります。
-->
<!-- Begin New 1.45 -->
パッチの当たっていないカーネルやインストールプログラムでは、
正常にドライブを検出しているにもかかわらず
ide2, ide3 をうまく扱えない場合があります。
この問題は、Slackware 3.4, RedHat 5.0 で発生することが確認されています。
見たところ RedHat 5.1 では改善されているようです。
<!-- End New 1.45 -->
先に挙げた方法で Linux がうまくインストールできない場合は、
ide2, ide3 の代わりに、ide0, ide1 を使ってみてください。
(このテクニックを教えてくれた Martin Gaitan に感謝します)。
この方法の原理は、カーネルに Promise Ultra33 のことをオンボード
コントローラだと思わせてしまうというものです。(すでにオンボード
コントローラがあった場合はそれらはカーネルからは見えなくなります)。
この方法を使うと、実際にドライブの結線を変えてしまったときと同様に
次章で紹介する手順でインストールすることができます。
注意しないといけないのは、インストールのための IDE CD-ROM をオンボード
コントローラに接続しているのなら、その CD-ROM のつながっている
コントローラを置き換えないようにしなければいけないということです。
そうしないと インストールができなくなってしまいます。CD が hda もしくは 
hdb であるなら、ハードディスクには ide1 を使うようにし、CD が hdc もしくは
hdd であるなら、ハードディスクには ide0 を使うようにしてください。

<sect1>Promise を使わずに Linux をインストールする<label id="around-promise">

<p>
ソフトウェア的な細工をする方法ができないのなら、少し野蛮な手段を
とらなくてはいけません。ここで紹介する方法がそれで、このやり方でもうまく
いくはずです。ただし、このやり方では、コンピュータの箱を開けて中を
いじらなければなりません。
<bf/注意:/ もし IDE ドライブをつないだり外したりするのにあまり詳しく
なければ、コンピュータやハードディスク、Promise Ultra33 についてきた
マニュアルを<bf/作業の前に読んで/おいてください。もしどこかで失敗して、
そこでどうすればいいのか分からなくなってしまったら、申し訳ないですが、
そこでお手上げになってしまうかもしれません。

やるべきことはとても単純です。最近のマザーボードにはたいてい EIDE 
コントローラが組み込まれています。ハードディスクを Ultra33 から外し、
マザーボード上のコントローラのコネクタにつなぎかえます。
CD-ROM やテープドライブ、Zip ドライブがすでにマザーボード上のコントローラ
に接続されていたのなら、未使用の側のチャネル(例えばプライマリの代わりに
セカンダリ) に接続するか、とりあえず必要でないデバイス(たとえば Zip や
テープドライブ)は、一時的に外してしまうというのが簡単でよいでしょう。
そして Linux をインストールします。
それから Promise 用の UDMA パッチをダウンロードし、カーネルに
このパッチを当てます。(次の章を参照してください。)

これでドライブをPromiseにつなぎ直す準備が *ほぼ* できました。
安全のために、カーネルイメージ・ブートフロッピーを作成します
(<tt>cd /usr/src/linux ; make zdisk</tt> と入力します)。
このフロッピーは、LILO が動かなかったときにシステムをブートさせるのに
使用します。<em>安全のために</em>、フロッピーは 2 つ作って、
1 つはとっておきましょう。

さて、ここで少し頭を使いましょう。たとえば、ハードディスクが 1 台きり
しかなくて、それを Promise に接続する場合を考えます。多くの場合、この
ハードディスクは <tt>/dev/hde</tt> になります。

(プライマリのオンボード (マザーボード上の) コントローラが <tt/hda/, 
<tt/hdb/ に、セカンダリのオンボードコントローラが <tt/hdc/, <tt/hdd/
になります)ハードディスクの台数を増やしたい場合は、Promiseの最初の
チャネルが <tt>/dev/hdf</tt>、2 番目のチャネルのマスタが 
<tt>/dev/hdg</tt>、2 番目のチャネルのスレーブが <tt>/dev/hdh</tt>
になります。

(訳注: ATA (IDE, EIDE..) の規格では、コントローラ 1 チャネルにつき
2 台までのドライブが接続できます (それぞれマスタ、スレーブと
呼ばれます)。
最近のマザーボードの多くは 2 チャネルのコントローラをオンボードで
持っているので、上に書かれているようになります。)

<tt>/etc/fstab</tt> を編集してハードディスクのパーティションに
関する全ての記述を書き換えます。
今は、インストールのため一時的にオンボードに接続されていたときの
デバイスに設定されている (<tt>/dev/hda</tt>, <tt>hdb</tt> 等々) 
ので、これを Promise に接続し直した (戻した) ときの設定
(<tt>/dev/hde</tt>, <tt>hdf</tt> 等々) に変更します。
また、インストール時に接続を変えたデバイス (例えば CD-ROM や Zip
等) があって、それらをオンボードの元の位置に接続しなおすので
あれば、ハードディスクと同様に設定を変更します。

次に例を示します。
CD-ROM が元々プライマリチャネルのマスタ (<tt>/dev/hda</tt>) に設定
されていたとします。
この場合、インストールのためにハードディスクをプライマリマスタに
するためには、この CD-ROM をスレーブ (<tt>/dev/hdb</tt>) または
セカンダリチャネル (のマスタ) (<tt>/dev/hdc)</tt> にしなければ
なりません。
そして、インストールが終ったら、この CD-ROM の接続を元に
戻すのに伴って fstab 内の CD-ROM のデバイスの記述を <tt>/dev/hda</tt> 
に変更します。

LILOをお使いであれば、LILOを設定し直してドライブ指定を変更後のものに
してやらなければいけません。
(LILOの設定についてはこの文書では触れません。
具体的な手順が知りたい方は、
<url url="http://sunsite.unc.edu/LDP/HOWTO/mini/LILO.html"
  name="LILO mini-HOWTO"> を参照してください)

(訳注: 日本語訳がJFの
<url url="http://jf.linux.or.jp/JF/JF-ftp/euc/LILO-Mini-HOWTO.euc"
  name="ここ"> にあります) 

これを忘れると、ハードディスクからブートできなくなってしまい、先ほど
作っておいたブートフロッピーを使わざるを得なくなってしまいます。
この際、新しいパーティションからブートできるように設定してしましょう。
これには <tt/rdev/ コマンドを使用します。フロッピーをドライブに入れ、
<tt>rdev /dev/fd0 /dev/hde1</tt> と入力します。
もちろん、これはルートパーティションが最初の UDMA ドライブの最初の
パーティションにある場合の例です。もしこれと条件が違う場合 
(たとえば、私の場合は <tt>/dev/hde7</tt> です) は、それぞれの場合に
応じた正しいパーティション番号を使わなくてはなりません。

リブートします。これであとはうまく動作するはずです。

<sect1>Promise 用のパッチを当てる<label id="patch-promise">

<p>
Promise Ultra33 のためのカーネルパッチが存在します。
これは、Gadi Oxman (<htmlurl url="mailto:gadio@netvision.net.il" 
  name="gadio@netvision.net.il">) が作成したものです。

<!-- *** Removed From 1.45
現在のバージョンのパッチは、2.0.33 カーネルとの組み合わせで動作します。
このパッチは
<url url="http://www.huwig.de/linux/mama/20-newdriver.html"
  name="Linux Mama"> から入手できます。このパッチを展開するためには
gzip でなく、<url url="http://www.muraroa.demon.co.uk/" name="bzip2">
が必要です。

(注意しないといけないのは、このバージョンに限ったことなのですが、
このパッチを当てると、カーネルが Promise に接続されているドライブを
IDE0, IDE1 というように認識してしまうため、マザーボード上のコントローラが
使えなくなってしまうのです。
この現象に関しては、改造した (ハックした) パッチが
<url url="http://pobox.com/~brion/linux/lmpromisehack.bz2" name="ここ">
にあります。これを使うと、オンボードのコントローラが IDE0, IDE1 として
使えるようになります。このとき Promise は IDE2, IDE3 に認識されます。

カーネル 2.0.30 用のパッチ (こちらは gzip で圧縮されています) は、
<htmlurl url="http://pobox.com/~brion/linux/promise_update.gz" 
    name="http://pobox.com/&tilde;brion/linux/promise&lowbar;update.gz">
からダウンロードできます。このパッチは 2.0.33 でも動作しますが、
``unknown PCI device'' というメッセージが現れるようになってしまいます。
これは 2.0.30 から 2.0.33 までに pci.c に入った変更が原因です。

カーネルにパッチを当て、再構成するに当たっては、カーネルのソースと
gcc がインストールされていることを確認してください。
また、事前に /usr/src/linux/README を読んでおいてください。

ブートパラメータ云々の問題から開放されること以外に、パッチを当てるな
どという面倒なことをする理由なんてあるのでしょうか。
パッチの作者によると、こういうことです。
-->
<!-- Begin New 1.45 -->
2.0.34 カーネル用のパッチは
<url url="http://pobox.com/~brion/linux/promise34.gz" name="ここ">
で入手できます。
このパッチは 2.0.35 (この文書を書いている時点でまだプレリリース版
(最終でない、評価用)ですが)
もしくはそれ以降のカーネルでは必要ありません。
もし古いカーネルをまだお使いでしたらアップグレードすることをお勧めします。
古いカーネルにはセキュリティー上の穴などいくつものバグを持っています。

(訳注: 新しいカーネルは「古いカーネルには無かった」バグが新たに
入り込んでいる可能性があります。
アップグレードする前には十分に情報収集をして、自分の責任で行いましょう)

RedHat ユーザーは、次のことに注意してください。
RedHat 5.1 のパッケージに含まれている 2.0.34 カーネルはプレリリース版
です。アップグレードすることをお勧めします。

パッチを当てるために、手の加わっていないカーネルを入手したいのであれば、
<htmlurl url="http://ftp.kernel.org" name="ftp.kernel.org">
から入手してください。

カーネルへのパッチの当て方、再構築の手順については、
<htmlurl name="Kernel HOWTO" url="http://sunsite.unc.edu/LDP/HOWTO/Kernel-HOWTO.html">.
を参照してください。
(訳注: JF に日本語訳があります。)

一度パッチを当ててしまえば、以下に書いたようにすれば
DMA 転送が使えるようになります。
<!-- End New 1.45 -->

<tscreen><verb>
カーネルパッチの優位な点のひとつは、Triton (*) ドライバをカーネルに組
み込みさえすれば、バスマスタ DMA 転送 ("hdparm -d1 /dev/hdx") が使用
できるようになるということです。
</verb></tscreen>

(訳注: Intel Triton chipset のこと。カーネルを再構築する際のオプション
で選択できるようになっています。カーネルの再構築に関する詳細は、JF にも
日本語訳のある、
 <url url="http://jf.linux.or.jp/JF/JF-ftp/other-formats/Kernel-HOWTO/Kernel-HOWTO.euc.html"
    name="Kernel-HOWTO"> (もしくはミラーサイト) を参照してください)

<!-- *** Removed From 1.45
言い方を変えるとこういうことです。
パッチを当てることによって、単にハードディスクを使えるようになるだけで
なく、より高速のモードで使うことができるようになるのです。
UDMA の機能をフルに生かすというわけにはいきませんが、決して悪くありま
せん。
なお、<tt>hdparm -Tt /dev/hdx</tt> でハードディスクの転送速度をテストする
ことができます。
-->
<!-- Begin New 1.45 -->
2.0.34 以降のカーネルでは自動的 UDMA が使えるようになるはずですが、
うまく動作しないこともあるようです。
なお、<tt>hdparm -Tt /dev/hdx</tt> でハードディスクの転送速度をテストする
ことができます。
通常の UDMA ドライブでは 9.5MB/s 程度の値になります。

また、ブートに LILO を使用したいのであれば
LILO にもパッチを当てなければなりません。
LILO のソースは、
<htmlurl url="ftp://sunsite.unc.edu/pub/Linux/system/boot/lilo/lilo-20.tar.gz"
name="ftp://sunsite.unc.edu/pub/Linux/system/boot/lilo/lilo-20.tar.gz">
から入手することができます。
また、LILO 用のパッチは、
<htmlurl url="http://pobox.com/~brion/linux/lilo-promise.patch"
name="http://pobox.com/~brion/linux/lilo-promise.patch">
から入手できます。
<!-- End New 1.45 -->

<sect>Intel TX オンボード UDMA コントローラ<label id="intel-tx">

<p>

この情報を提供してくれた Gadiに感謝します。

<tscreen><verb>
Intel TX チップセット用のバスマスタ DMA は 2.0.31 以降のカーネルで
サポートされています。
</verb></tscreen>

それより古いカーネルでは(例えば Slackware 3.4 では 2.0.30 です)、この
コントローラはより低速の EIDE モードで動作しか動作しません。ただし、
どちらの場合でもカーネルはこのコントローラを自動的に認識しますので、
動作させるうえで問題となることはありません。

TX チップセット用の UDMA フルサポートの機能は、
<ref id="generic" name="UDMA 汎用"> パッチに含まれています。

<sect>VIA VP2 とそのファミリーのチップセット<label id="via">

<p>
このコントローラもパッチの当たっていないカーネルでも自動認識され、
少なくとも EIDE モードでは動作します。
しかし、これらのチップセットのどれかをお使いでしたら、
パッチを当ててみてください。
ハードディスクのもつ性能をより引き出すことができるようになるだけでなく、
あのうっとうしい "unknown PCI device" というメッセージからも
解放されるようになります。

パッチの1つは、  <htmlurl url="http://www.ipass.net/~prefect"
  name="http://www.ipass.net/&tilde;prefect/"> で入手できます。これは、
FIC PA-2007 と PA-2011 マザーボードで採用されている、VIA VP2/97という
チップセット用のものですが、それ以外の(VPx のファミリーの)チップセット
でも、ものによっては動作します。なお、VIA VP3 という新しいチップセット
については、このパッチで動作したとの報告があります。選択肢が増えましたね。

注意点は、このパッチがサポートするのはバスマスタモードのみで、全ての
UDMA の機能がサポートされるわけではありません。しかしそれでも単なる 
EIDE モードよりは有用です。バスマスタ DMA を有効にする方法については、
パッチの置かれているサイトにある指示にしたがってください。

そして、UDMA の機能を完全にサポートした別のパッチが
<htmlurl url="http://www.pyreneesweb.com/Udma/udma.html"
  name="http://www.pyreneesweb.com/Udma/udma.html">,
から入手できます。
このパッチは、VIA VT82C586B 用に書かれたものですが、VP2, VX3, VPX, P6,
AGP Apollo といったチップセットでも動作するはずです。インストールおよび
UDMA を有効にするための手順は、上記の場所にありますのでそれに従って
ください。なお、あなたのマザーボードが潜在的に互換性の問題を持っているかも
しれません。失っては困るデータは全てバックアップをとってから作業を行う
ようにしてください。ただし、一度動いてしまえば、あとは何の問題も起きない
はずです。

VP1 チップセットについては、これらのパッチでうまく動作するかどうかは
不明です。
しかし、少なくとも <ref id="generic" name="UDMA 汎用"> パッチでは
サポートされています。

<sect>UDMA 汎用<label id="generic">
<p>

UDMA 汎用のパッチは、Mark Lord が作成した Triton DMA ドライバを
Andre Balsa (<htmlurl url="mailto:andrebalsa@altern.org" 
  name="andrebalsa@altern.org">) が改造したもので、
このパッチにより、以下のチップセットで UDMA の機能を使えるように
なります。

<itemize>
<item>Intel TX
<item>SiS 5513 (これは SiS 5571, 5598 そしてたぶん 5591 チップにも
組み込まれています)
<item>VIA VP1 (未テストですが)
</itemize>

また、このパッチは他のチップセットをサポートするための拡張が容易なように
設計されています。
この UDMA 汎用パッチは 2.0.29 から 2.0.33 までのカーネルでうまく動作する
ことが確認されていますが、2.0.32 より前のカーネルでは多少設定が必要となる
かもしれません。

<!-- Begin New 1.45 -->
(また、Grand Unified (大統一) UDMA Patch と呼ばれている、
より多くのチップセットをサポートするパッチのベータテストが
現在行われています。
このパッチが入手できるようになるのは、おそらく
近々リリースされる 2.0.35 カーネルのリリース後になるかと思います。)
<!-- End New 1.45 -->

<!-- *** Removed From 1.45
このパッチは、
-->
<!-- Begin New 1.45 -->
現在のカーネル用の UDMA 汎用パッチは
<!-- End New 1.45 -->
<htmlurl url="http://pobox.com/~brion/linux/udma-generic-latest.tar.gz"
  name="http://pobox.com/&tilde;brion/linux/udma-generic-latest.tar.gz">,
からダウンロードすることができます。
使用法については、同梱されている INSTALL と UDMA.txt をお読みください。

以下は作者からの注意点です。

<tscreen><verb>
IBM 製の UDMA ドライブと良質のマザーボードの組合せでのデータ転送速度を
測定 (hdparm -t -T として行いました) したところ、最大で約 10MB/s でした。

Intel TX チップセットは、ハードディスクのデータ用の FIFO を 1 つしか持って
おらず、それを 2 つの IDE コントローラで共有するようになっています。そのた
め、2 台の UDMA ドライブを使用した場合には、1 台のドライブのみを使用したと
きのようなパフォーマンスの大幅な向上は望めないでしょう。
それに対し、SiS5598 は完全に独立した 2 つのコントローラを持っており、それ
ぞれ専用の FIFO を備えています。そのため SiS5598 チップを使用したマザーボ
ードでは、md ドライバ (*) と 2 台のドライブを使ってストライピングをするこ
とで、理論的には 66MB/s のバースト転送に挑戦することもできるのです。
SiS5571 は同じアーキテクチャのコントローラだと思います。VIA チップセットに
ついては、私はデータシートを持っていないので何とも申し上げられません。

(訳注: md については、JF の ROOT RAID HOWTO 等を参照してください)

Mark Lord の作成した Linux IDE (U)DMA カーネルドライバは、特にセットアップ
タイム (たとえばデータ転送のレイテンシ) の値が小さくなっています。
これは (Linux ニュースサーバのような) 小さなデータ転送が頻繁に起こるような
環境では効果的です。
場合によっては性能面で SCSI をも上回ることもあるでしょう。

</verb></tscreen>

<sect>それでも動かないとき<label id="help">

<p>
もし、この文書が全く役に立たなかったら、
または何かうまくいかないところがあったら、どこでつまづいているのか、
使用している UDMA コントローラ (オンボードでもアダプタカードでも) は何か、
ハードディスクは本当に UDMA に対応しているのか
(それともただの EIDE なのか)、どこにどういうドライブを接続しているのか
(全てのドライブについて)、Linux のバージョン
 (ディストリビューション名とカーネルのバージョンも) は何か、
 その他の役に立ちそうなことを具体的に書き、
<htmlurl url="news:comp.os.linux.hardware" name="comp.os.linux.hardware">
に投稿してみてください。
すぐに役に立つ情報が得られるのではないかと思います。

<sect>このmini-HOWTOに書かれていないUDMAについての情報を持っている。
<label id="suggest">

<p>
すばらしい! 私の知らない情報をお持ちなら、ぜひ私
(<htmlurl url="mailto:brion@pobox.com" name="brion@pobox.com">) 宛てに
送ってください。すぐにこの文書に反映させたいと思います。

<p>
(訳注: 日本語版に関してお気づきの点等ありましたら、
中野 正剛 <htmlurl url="mailto:sx3m-nkn@asahi-net.or.jp"
name="sx3m-nkn@asahi-net.or.jp"> までお知らせください。
なお、この文書の作成に当たって有益なご助言をいただいた、中野 武雄 さん
ほか JF の皆さんに感謝いたします。)

</article>
