EN JA
SA(4)
SA(4) FreeBSD Kernel Interfaces Manual SA(4)

名称

saSCSI シーケンシャルアクセスデバイスドライバ

書式

device sa

解説

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

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

マウントセッション

sa ドライバは、テープがマウントされる時間と、それがアンマウントされる時間の間の期間として定義される“ マウントセッション”の概念に基づいています。マウントセッションの間に設定されたあらゆるパラメータは、セッションの残り、または置き換えられるまで、有効です。いくつかの方法でセッションを終わらせ、テープをアンマウントすることができます。これらは、次のものを含んでいます:
  1. 下記のサブモード 00 のように、`rewind device' をクローズします。例えば、 /dev/sa0 です。
  2. mt(1) の‘ offline’コマンドを通して到達可能な MTOFFL ioctl(2) コマンドを使用します。

制御モードデバイスがオープンされる場合を除いて、テープデバイスが排他的なオープンデバイスであることに注意すべきです。後者の場合では、(例えば、パラメータを設定するために) 必要なときに排他的にアクセスされます。

サブモード

マイナ番号のビット 0 と 1 は‘サブモード’として解釈されます。サブモードは、デバイスがクローズされるときに取られるアクションで異なります:
00
クローズされるとデバイスを巻き戻します。テープに書き込まれると、巻き戻しが要求される前にファイルマークが書き込まれます。デバイスは、アンマウントされます。
01
クローズされてもテープは、マウントされたままにします。テープに書き込まれていたなら、ファイルマークが書き込まれます。他のヘッドの位置決めは行われません。さらなる読み込みか、または書き込みは、最後に読み込まれるか、またはファイルマークが書き込まれた直後に起こります。
10
クローズされるとデバイスを巻き戻します。テープに書き込まれると巻き戻しが要求される前にファイルマークが書き込まれます。巻き戻しが完了すると、アンロードコマンドが発行されます。デバイスは、アンマウントされます。

ブロッキングモード

SCSI テープは、‘ 可変’または‘ 固定’ブロックサイズモードのいずれかで実行します。ほとんどの QIC タイプのデバイスは、固定ブロックサイズモードで実行し、そこでは、ほとんどの 9 トラックのテープと多くの新しいカートリッジ形式は、可変ブロックサイズを許可します。 2 つの違いは、次の通りです:
可変ブロックサイズ:
デバイスに行なわれるそれぞれの書き込みは、テープに書き込まれた単一の論理レコードの結果となります。 (より大きなブロックを要求し、より小さなレコードを読み込むかもしれませんが) テープからレコードの 一部 を読み込むか、書き込むことは決してできます。また、複数のブロックを読み込むことはできません。したがって、ただ 1 つの書き込まれたデータは、単一の読み込みによって読み込まれます。使用されるブロックサイズは、デバイス SCSI アダプタとシステムでサポートされた (通常 1 バイトと 64 キロバイトの間、ときどきより大きな) 任意の値を指定できます。

テープから可変長のレコード/ブロックを読み込むとき、ヘッドは、最後の項目を読み込んだ直後、とその以後の次の項目の前にあると論理的に考えられます。次の項目がファイルマークであるが、それが決して読み込まれなかったなら、次の読み込むプロセスは、直ちにファイルマークに遭遇し、ファイルの終り (end-of-file) の通知を受け取ります。

固定ブロックサイズ:
ユーザによって書き込まれたデータは、一連の固定サイズのブロックとしてテープに渡されます。メモリで連続しているかもしれませんが、それは、一連の独立したブロックであると見なされます。ブロックサイズの正確な倍数でないデータの量は、決して書き込めません。異なった組のレコードと同じデータを読み込み書き込みできます。言い換えれば、一緒に書き込まれたロックは、別々に読み込むことができますし、逆もまた同様です。

ファイル中に残っているものより多くのブロックが要求されるなら、ドライブは、ファイルマークに遭遇します。返されるいくつかのデータがあるので、(ファイルマークの前にレコードがなかったなら)、読み込みは、そのデータを返して、成功します。次の読み込みは、直ちに 0 の値を返します。 (上記のように、ファイルマークが決して読み込まれないなら、巻き戻さないモードの場合は、次の読み込むプロセスのために残ります。)

ブロックサイズ

デフォルトで、ドライバは、単一の書き込みまたは読み込み要求を使用してマウントされたテープから書き込むか、または読み込むより大きなテープデバイスに読み込むか、または書き込みを受け付け「ません」。このために、アプリケーションの作者は、テープに書き込まれたブロックサイズに関して作者の希望が尊重されるということを確信しています。例えば、ユーザがテープに 256KB ブロックを書き込むことを試みるが、コントローラが、128KB を越えで扱うことができないなら、書き込みは、失敗します。以前の FreeBSD の振る舞いは、 FreeBSD 10.0 より前に、テープに行くとき、大きな読み込みまたは書き込みをより小さなブロックに分解することでした。しかしながら、その振る舞いに関する問題は、少なくとも可変ブロックモードで、アプリケーションの作者から実際のオンテープブロックサイズを隠すことです。

ユーザが作者の大きな読み込みと書き込みのように個別の部分に分割されるなら、作者は、次のローダ調整変数を設定します。これらの調整変数は、 FreeBSD 11.0 に「立ち去る」ことに注意してください。それらは、移行の目的だけに提供されています。

kern.cam.sa.allow_io_split

この変数は、1 に設定されたとき、必要である場合に、大きなバッファより小さな部分に分割する、すべての sa デバイスを設定します。

kern.cam.sa.%d.allow_io_split

この変数は、1 に設定されたとき、大きなバッファを複数の部分に分割するために与えられた sa ユニットを設定します。これは、それが存在するなら、グローバルな設定を上書きします。

パラメータを扱うブロックを見るために利用可能ないくつかの sysctl(8) 変数があります:

kern.cam.sa.%d.allow_io_split

この変数によって、ユーザは、現在の I/O 分割の設定を修正せずに、見ることができます。ユーザは、テープがマウントされる間に、アプリケーションのために変更する振る舞いの機会がないように、この設定を修正することは許されません。

kern.cam.sa.%d.maxio

この変数は、カーネル調整パラメータ (MAXPHYS、DFLTPHYS) とテープドライブにアタッチされるコントローラのケーパビリティの組み合わせによって許可される、バイト単位の最大の I/O サイズを表示します。アプリケーションは、どれくらい大きな I/O が許可されるかのガイドのためのこの値を見ますが、実際の最大が SCSI READ BLOCK LIMITS コマンドを通してテープドライブによってさらに制限されると留意するべきです。

kern.cam.sa.%d.cpi_maxio

この変数は、CAM パス問い合わせ CCB (XPT_PATH_INQ) によって報告される、バイト単位のコントローラによってサポートされた最大の I/O サイズを表示します。これが 0 であるなら、それは、コントローラが最大の I/O サイズを報告しないことを意味します。

ファイルマークの扱い

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

IOCTL

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

関連ファイル

/dev/[n][e]sa[0-9]
一般的な形式:
/dev/sa0
クローズで巻き戻す
/dev/nsa0
クローズで巻き戻さない
/dev/esa0
(能力があるなら) クローズでイジェクトする
/dev/sa0.ctl
(例えば、別のプログラムがデバイスにアクセスしている間に状態を調査するための) 制御モードデバイス。

診断

なし。

関連項目

cam(4), mt(1)

作者

sa ドライバは、 CAM SCSI サブシステムのために Justin T. GibbsKenneth Merry によって書かれました。 Julian Elischer によって書かれ Mach 2.5 から移植された st ドライバから多くのアイデアが取り入れられました。

現在の記録の所有者は、壊れているテープドライバであまりに何年も苦労している Matthew Jacob です。

バグ

このドライバは、より古いデバイスを処理するために必要とされる多くのハックが不足しています。多くより古い SCSI-1 デバイスは、まだこのドライバで適切に動作しないかもしれません。

さらに、 FreeBSD 2.X の下で書き込まれた特定のテープ (ほとんどは QIC テープ) は、このドライバで自動的に正しく読み込めません: FreeBSD 2.X の下で書き込まれたテープを読み込むためには、利用者が明白に可変ブロックモードを設定するか、または利用者のデバイスのために最もよく動作するブロックサイズを設定する必要があります。

細粒密度と特定のデバイス名に結びつけられた圧縮モードのサポートを加える必要があります。

パーティションの使用によって速いインデックス付けのサポートが不足しています。

August 23, 2013 FreeBSD