SA(4)

名称
sa - SCSI シーケンシャルアクセスデバイスドライバ

書式
device sa0 device sa1 at scbus0 target 4 lun 0

解説
sa ドライバはサポートされている SCSI ホストアダプタを経由して、システムにアタッチされている シーケンシャルなアクセスクラスのすべての SCSI デバイスへのサポートを提供します。 シーケンシャルアクセスクラスはテープなどのリニアなアクセスデバイスです。

SCSI ホストアダプタは SCSI シーケンシャルアクセスデバイスが設定される前に 別にシステムに設定されていなければなりません。

マウントセッション
sa ドライバは、テープがマウントされてからアンマウントされるまでの 期間として定義される “マウントセッション” の概念に基づいています。マウントセッションの間にセットされた 任意のパラメータは、そのセッションの残り期間あるいは テープが取り替えられるまで、有効になっています。 何からの方法でセッションをクローズすることで、 テープをアンマウントすることができます。 クローズする方法には次のようなものがあります。

1.  以下に示すサブモード 00 にしたがい `巻戻しデバイス' をクローズする。例えば /dev/rsa0。

2.  ioctl(2) の MTOFFL コマンドを使う。 mt(1) の ‘offline’ コマンドを利用することにより可能です。

テープデバイスは排他的にオープンされるデバイスであることに 注意すべきです。制御モードデバイスがオープンされている場合は例外で、 必要な時 (例えばパラメータをセットする時) に限り排他的な アクセスをする必要があります。

サブモード
マイナー番号のビット 0 とビット 1 は ‘サブモード’ として解釈されます。 サブモードの違いは、デバイスがクローズされた時の挙動にあります:

00  クローズされるとデバイスを巻戻します; もしテープに書き込まれていたら、 巻戻しが要求される前にファイルマークが書き込まれます。デバイスは アンマウントされます。

01  クローズ後もテープがマウントされたままにします。 テープに書き込まれていたら、ファイルマークが書き込まれます。 それ以外にヘッドの移動は行なわれません。 さらに読み込んだり書き込んだりすると、最後に読み出された り、あるいはファイルマークが書き込まれた後から直接行なわれます。

10  クローズされるとデバイスを巻き戻します。もしテープに書き込まれて いたら、巻き戻し要求の前にファイルマークが書き込まれます。 巻き戻しが完了すると、アンロードコマンドが発行されます。 デバイスはアンマウントされます。

ブロッキングモード
SCSI テープは ‘可変’ あるいは ‘固定’ ブロックサイズモードで動くことができます。 ほとんどの QIC タイプのデバイスは固定ブロックサイズモードで動き、 ほとんどの 9 トラックテープと多くの新しいカートリッジフォーマットは 可変ブロックサイズを許容します。この二つの違いはつぎの通りです:

可変ブロックサイズ: デバイスへの書き込み毎に、単一の論理レコードがテープに書き込まれます。 レコードの 一部分 をテープから読み込んだり書き込んだりすることはできません (たとえ大きなブロックを要求して小さなレコードを読んでもです); 複数のブロックを読み込むこともできません。 すなわち、1 回の書き込みによるデータは 1 回で読み込まれます。 ブロックサイズは、デバイスすなわち SCSI アダプタとシステムがサポートしている任意の値です。 (大抵は 1 バイトから 64K バイトの間で、もっと大きくなる場合もあります。)

テープから可変長のレコードやブロックを読み込む時、 ヘッドは最後に読み込まれたアイテムの直後にあり、 次のアイテムの直前にあると考えられます。もし次のアイテムがファイルマークで、 まだ読まれていなかったとすると、読み込みですぐにそのファイルマークに 当たり、ファイル終端 (end-of-file) の通知を受けます。

固定ブロックサイズ: ユーザが書き込んだデータは固定サイズのブロックの連続としてテープに 渡されます。それはメモリ中で連続しているかもしれませんが、 独立したブロックの連続と考えられます。 ブロックサイズの正確な整数倍ではない量のデータを読み込む ことはできません。異なるレコード集合として、同じデータを読み込んだり 書き込んだりすることはできます。 言い換えると、一緒に書き込まれたブロックを別々に読み込むことが できますし、逆もまた可能です。

ファイルの中に残っているものより多いブロックが要求されると、ドライブは ファイルマークに遭遇するでしょう。返すべきデータが存在する ので (ファイルマークより前にレコードが存在する限り)、 そのデータは返され、読み込みは成功します。 次の読み込みは直ちに 0 を返します。 (上のように、もしファイルマークが読まれないと、非巻き戻しモードの場合は 次の読み込み処理へ残ります)。

ファイルマークの扱い
ファイルマークは自動的に扱われます。ユーザがテープに書き込み、 最後に書き込んでから読み込みをしなかった場合、デバイスをクローズ する時にファイルマークがテープに書き込まれるでしょう。 書き込みの後に巻き戻し要求があると、ドライバはテープ上の最後のファイルが 書き込まれたと仮定し、テープに書き込まれた 2 つのファイルマークが存在 することを保証します。 これには例外があって、 ある種のテープは、実際には 2 つのファイルマークを書き込まず、 最後のファイルが読み込まれた時に `幻の' ファイルマークを報告するという 標準 (我々はこれに従いますが、どうしてそうするのか理解できません) が存在するようです。 それらのデバイスには、QIC ファミリが含まれます。 (このデバイスは固定ブロックデバイスと同じかも しれません。これはまだはっきりとしていませんが、現在ドライバは別の 振舞いとして扱っています。)

IOCTL
sa ドライバは mtio(4) のすべての ioctl をサポートしています。

ファイル
/dev/[n][e]rsa[0-9]
    一般的な形 :
/dev/rsa0
    クローズ時に巻き戻し
/dev/nrsa0
    クローズ時に巻き戻さない
/dev/erst0
    クローズ時にイジェクトする (可能なら)
/dev/rsa0.ctl
    制御モードデバイス (他のプログラムがそのデバイスにアクセスしている間に 状態を検査するなどのためのもの)

バグ
古いデバイスを扱うために必要な多くのハックが欠けています。 多くの古い SCSI-1 デバイスは、このドライバでは正しく動かないでしょう。

特別なデバイス名に結合された、高密度および圧縮モードのサポートを 加える必要があります。

パーティションの利用による高速なインデックシングのサポートがありません。

診断
ありません。

関連項目
mt(1), scsi(4), sa(9)

歴史
sa ドライバは CAM SCSI サブシステムのために Justin T. Gibbs と Kenneth Merry が書きました。 Julian Elischer が書き、 Mach 2.5 から移植した st デバイスドライバからはたくさんのアイディアを得ています。

現在、記録を所有しているのは、 テープドライバを破壊してきたあまりにも長い年月を 犠牲にしている Matthew Jacob です。