DA(4)

名称
da - SCSI ダイレクトアクセスデバイスドライバ

書式
device da0 device da1 at scbus0 target 4 lun 0

解説
da ドライバは、サポート済みの SCSI ホストアダプタを用いてシステムに接続されているダイレクトアクセス型のすべての SCSI デバイスのサポートを提供します。 ダイレクトアクセス型はディスク、光磁気、 そして半導体デバイスを含みます。

SCSI ホストアダプタは SCSI ダイレクトアクセスデバイスが設定される前に システムの中で別に設定されることが必要です。

区画割り (パーティショニング)
da ドライバはディスクに 2 つのレベルの区画割りを持つことを許可します。 1 つ目の層は、 “スライス層” と呼ばれ、 ほかのオペレーティングシステムで使用されている領域から、 FreeBSD のディスクの領域を分離するために用いられます。 2 つ目の層は、 4.4BSD に固有の区画構成で、 disklabel(5) によって、 個々のファイルシステムとスワップ空間のための領域に FreeBSD のスライスを再分割するために用いられます。 より詳しい情報は、それぞれ、 fdisk(8) と disklabel(8) を見てください。

もし、初期化されていないディスクを開いた場合には、 ディスク全体を計測して、 仮の FreeBSD スライスを用いて、スライステーブルの初期化が行われます。 同様に、初期化されていない (または非 FreeBSD) スライスが開かれた場合、そのディスクラベルは ドライブによって返されるパラメータで初期化され、 単一の ‘c’ パーティションでスライス全体を包括します。

キャッシュの効果
多くのダイレクトアクセスデバイスは、読み込みと書き込みの両方もしくは一方の キャッシュを持っています。 デバイスキャッシュの効果をもたらすパラメータはモードページ 8、 すなわちキャッシュ制御ページに納められています。 モードページは camcontrol(8) ユーティリティによって調べて、変更することができます。 読み込みキャッシュは、何度も用いられるデータだけでなく、 デバイスによる先読み操作のデータを格納するために用いられます。 読み込みキャッシュはユーザに透過であり、 有効にしてもまったく害はありません。 読み込みキャッシュを持ったほとんどのデバイスは、 工場出荷時にこの機能が有効にされています。 読み込みキャッシュはキャッシュ制御モードページの RCD (読み込みキャッシュ不許可) ビットをセットすることで、 不許可にできます。 書き込みキャッシュは書き込み操作による遅延を大幅に減らすことができ、 効率と性能を増加させるために、書き込みを再編成することをデバイスに 認めます。 この性能の増加にはかなりの代償が発生します。 もし、 書き込み操作が終了していないキャッシュを含んでいるときに、 デバイス電源が消失すると、これらの書き込みは失われるでしょう。 書き込み処理の失敗の影響は、ファイルシステムに不確定性をもたらし、 不正な状況を引き起こすでしょう。 多くのデバイスでは、書き込みトランザクションをエージングし、 最近完了報告した少数のトランザクションのみに弱点を限定します。 しかし、それでもなお、無停電電源装置 (UPS) を備えた書き込みキャッシュを 可能にしたデバイスのシステムでは、推奨されます。 da デバイスドライバは、 デバイスの最後のクローズ、または予期しないシャットダウン (パニック) イベントの ときに、キャッシュとメディアが同期すること保証します。 これにより、オペレーティングシステムが停止したことを報告した後では、 電源を切断しても安全であることが保証されます。 書き込みキャッシュはキャッシュ制御モードページの WCE (書き込みキャッシュ許可) ビットをセットすることで 許可に出来ます。

タグ付きキューイング
da デバイスドライバは、タグ付きキューイングとして知られている SCSI 機能の利点を 完全に利用します。 タグ付きキューイングはデバイスが同時に多数のトランザクションを処理することを 可能にし、しばしばシークの数と長さを減らすために、それらを並べ変えます。 現在のヘッドの位置により近いサービスの要求によって、 メディアの遠い部分へのトランザクションが 不確定に延期させられるかもしれません。 このようなトランザクションが適切な時期に完了することを保証するために、 デバイスの操作が続いている間、 順番付けされたタグ付きトランザクションが 1 つ 15 秒ごとに送られます。

不良ブロックの修復
ダイレクトアクセスデバイスは欠陥のあるメディアの部分を マップアウトする能力を持っています。 メディアの修復パラメータはモードページ 1、すなわち読み書きエラー修復モード ページに位置しています。 ほとんどの重要なメディアの再配置機能は '自動書き込み再割り当て' と '自動 読み込み再割り当て' であり、それぞれ、読み書きエラー修復ページの AWRE ビットと ARRE ビットを有効にすることで機能します。 多くのデバイスは、工場出荷時にこれらの機能が無効にされています。 モードページは camcontrol(8) ユーティリティによって調べて、変更することが出来ます。

カーネルの設定
ひとつの da デバイスを明示的に設定することのみが必要です。 SCSI バス上に見つかったディスクごとに データ構造が動的に割り当てられます。

IOCTL
次の ioctl(2) 呼び出しは 他のディスクと同様に SCSI ドライブにも適用されます。 それらは、ヘッダファイル <sys/disklabel.h> の中で定義されています。

DIOCSBAD
    一般にディスクの不良ブロックのマッピングシステムのセットアップに 用いられます。 SCSI デバイスはそれら自身に不良ブロックマッピングが組み込まれているので、 このコマンドは実装されていません。

DIOCGDINFO
    ドライブのディスクラベルの in-core コピーをカーネルから 読み込みます。もし、ドライブが一度も初期化されていないときは、 仮のディスクラベルを与え、その場合には、 SCSI の inquiry コマンドから、読み込んだ情報を含んでいます。

DIOCSDINFO
    使用する新しいディスクラベルをドライバに与えます。 ドライバはディスクに新しいディスクラベルを書き込み ません 。

DIOCWLABEL
    ディスク上のディスクラベルに対する、ドライバの ソフトウェア書き込みプロテクトを有効または無効にします。

DIOCWDINFO
    使用する新しいディスクラベルをドライバに与えます。 ドライバはディスクに新しいディスクラベルを書き込み ます 。

注
もし、デバイスが無効になると (メディアが取り外される, デバイスが 応答しなくなる)、 カーネル中に保持されているディスクラベルやデバイスについての情報は 無効になります。 新たに挿入されたメディアや置き換えられたデバイスの破壊を防ぐために、 古いデバイスを参照している最後のファイル記述子が閉じられるまで、 デバイスへのすべてのアクセスは破棄されます。 この間は、すべての新しいファイルを開こうとする試みは拒否されます。

関連ファイル
/dev/rdau
    raw モード SCSI ディスクユニット u, 区画割りされていないデバイスとしてアクセスされます
/dev/dausn
    block モード SCSI デバイスユニット u, スライス n, 区画割りされていないデバイスとしてアクセスされます
/dev/rdausn
    raw モード SCSI ディスクユニット u, スライス n, 区画割りされていないデバイスとしてアクセスされます
/dev/daup
    block モード SCSI ディスクユニット u, 初めの FreeBSD スライス, パーティション p
/dev/dadup
    raw モード SCSI ディスクユニット u, 初めの FreeBSD スライス, パーティション p
    /dev/da u s n p block モード SCSI ディスクユニット u, n 番目のスライス, パーティション p
    /dev/dad u s n p raw モード SCSI ディスクユニット u, n 番目のスライス, パーティション p

診断
なし。

関連項目
wd(4), disklabel(5), disklabel(8), fdisk(8), da(9)

歴史
da ドライバは CAM SCSI サブシステム用に Justin T. Gibbs が書きました。 Julian Elischer が Mach 2.5 から移植して書いた sd デバイスドライバから、多くのアイデアが集められました。 スライスのサポートは Bruce Evans が書きました。