Provided by: manpages-ja_0.5.0.0.20180315+dfsg-1_all bug

名前

       st - SCSI テープデバイス

書式

       #include <sys/mtio.h>

       int ioctl(int fd, int request [, (void *)arg3]);
       int ioctl(int fd, MTIOCTOP, (struct mtop *)mt_cmd);
       int ioctl(int fd, MTIOCGET, (struct mtget *)mt_status);
       int ioctl(int fd, MTIOCPOS, (struct mtpos *)mt_pos);

説明

       st  ドライバーは様々な  SCSI テープデバイスのインターフェイスを提供する。 現在では、ドライ
       バーは検出された全ての “シーケンシャルアクセス (sequential-access) ”  タイプのデバイスへの
       制御を行う。 st ドライバーはメジャーデバイス番号 9 を用いる。

       それぞれのデバイスは  8  つのマイナーデバイス番号を使う。  マイナー番号の低位側の 5 ビット
       は、検出された順に割り当てられる。 カーネル 2.6 では、 低位側 8 ビットよりも上位にあるビッ
       ト群がこの 5 ビットに連結 (concatenate)  され、テープ番号となる。 マイナー番号は、それぞれ
       4 つの数字からなる二つのセットに グループ分けされる。 基本 (自動巻き戻し) デバイス番号 n、
       および  “非巻き戻し (no-rewind) ” デバイス番号 (n + 128).  である。 基本デバイス番号を用い
       てオープンされたデバイスには、 クローズする時に REWIND  コマンドが送られる。  “非巻き戻し”
       デバイス番号を用いてオープンされた場合は REWIND コマンドは送られない (自動巻き戻しデバイス
       をテープの位置決めに (例えば mt で) 用いても、 望む結果は得られない。テープは mt  コマンド
       の後で巻き戻され、 次のコマンドはテープの先頭から始まってしまう)。

       それぞれのグループで、異なった特性  (ブロックサイズ・圧縮・ 密度など) のデバイスを定義する
       ために 4 つのマイナー番号が利用できる。 システムが起動したときには、最初のデバイスだけが使
       える。  他の 3 つはデフォルトの特性が定義されて初めて使えるようになる (後述)。 (コンパイル
       時の定数を変更することによって、テープドライブの最大数と、  それぞれのドライブに割り当てら
       れるマイナー番号の個数とを調整できる。  デフォルトの割り当てでは 32 台までのテープドライブ
       を制御できる。 例えば 64 台までのテープドライブを、異なったオプションを持つ 二つのマイナー
       番号で制御するようにもできる。)

       デバイスは普通次のように作られる:

           mknod -m 666 /dev/st0 c 9 0
           mknod -m 666 /dev/st0l c 9 32
           mknod -m 666 /dev/st0m c 9 64
           mknod -m 666 /dev/st0a c 9 96
           mknod -m 666 /dev/nst0 c 9 128
           mknod -m 666 /dev/nst0l c 9 160
           mknod -m 666 /dev/nst0m c 9 192
           mknod -m 666 /dev/nst0a c 9 224

       これらには対応するブロックデバイスは存在しない。

       ドライバは内部バッファーを使い、その大きさは少なくともテープの  1 ブロックを保持できるよう
       に取られる。 2.1.121 以前のカーネルでは、 バッファーは連続する一つのブロックとして割り当て
       られる。この方法だと、  ブロックサイズの最大値はカーネルの割り当て可能な連続メモリーブロッ
       クに 制限される。この制限は 32 ビットアーキテクチャーでは  128  kB、  64  ビットアーキテク
       チャーでは  256 kB である。これ以降のカーネルでは、 ドライバは必要に応じていくつかにわかれ
       たバッファーを割り当てる。 デフォルトでは 16 個までの部分に分割できる。すなわち ブロックサ
       イズの最大値は非常に大きい (128 kB のブロック 16 個の 割り当てに成功すれば 2 MB となる)。

       ドライバの内部バッファーのサイズはコンパイル時の定数で定義される。  これはカーネルの起動時
       オプションによって上書き可能である。  さらにドライバは実行時にも、必要に応じてより大きな一
       時バッファーを 割り当てようとする。しかし実行時に大きな連続メモリーブロックを 割り当てよう
       とすると失敗することがあるので、 2.1.121  以前のカーネルでは、動的なバッファー割り当てはあ
       まりあてにしないほうが良い  (これは kerneld や kmod によるドライバのデマンドロードに関して
       も当てはまる)。

       ドライバはドライブのメーカやモデルを特定してサポートするわけではない。  システムが起動する
       と、テープデバイスのオプションがドライブの ファームウェアによって定義される。例えば、 ドラ
       イブのファームウェアが固定長ブロックモードを選択すれば、    テープデバイスは固定長ブロック
       モードを使うことになる。このオプションは ioctl(2)  コールを明示的に使えば変更でき、 その変
       更はデバイスがクローズされて再びオープンされたときも残る。 オプションの設定は、 自動巻き戻
       しデバイスと非巻き戻しデバイスの両方に影響する。

       4   つのサブグループそれぞれのデバイスに対して異なるオプションを  与えることができる。オプ
       ションはデバイスがオープンされたときに  効力を発揮する。例えば、システム管理者はあるデバイ
       スを 適当なブロックサイズの固定長ブロックモードで書き込むように定義し、 別のデバイスを可変
       長ブロックモードで書き込むようにできる (ドライブが 両方のモードをサポートしていれば)。

       このドライバは、 テープのパーティション  をサポートしている  (ドライブがサポートしている場
       合)。 (テープのパーティションはディスクパーティションとはなんの関係もない。 パーティション
       化されたテープは、一つのメディアに複数の論理テープが 存在するかのように見える。)  パーティ
       ションのサポートは  ioctl(2)  によって有効にできる。 パーティションが変更されると、 テープ
       の位置はそれぞれのパーティション内部で保存される。 パーティションの選択は  ioctl(2)   で行
       う。   それ以降のテープ操作の対象は、そのパーティションになる。   パーティションの切り替え
       は、次のテープ操作と同時に行われ、 不必要なテープ移動をしなくてすむようになっている。 一つ
       のテープにおけるパーティションの最大数は コンパイル時の定数によって定義される (通常は 4)。
       ドライバには、テープの 1 つまたは 2 つのパーティションをフォーマットできるような  ioctl(2)
       が用意されている。

       通常、システムのデフォルトのテープデバイスに対するハードリンク      またはソフトリンクとし
       て、デバイス /dev/tape が作成される。

       カーネル 2.6.2 以降では、このドライバは sysfs ディレクトリ /sys/class/scsi_tape に、アタッ
       チしたデバイスとそのデバイスに割当てたパラメーターをエクスポートする。

   データ転送
       このドライバは固定長ブロックモードと可変長ブロックモードの  両方をサポートしている (ドライ
       ブがサポートしていれば)。   固定長ブロックモードでは、ドライブは決まったサイズのブロックを
       (複数個)  書き込む。このブロックサイズは write システムコールのバイト数によらない。 可変長
       ブロックモードでは、 write コールごとに一つのテープブロックに書き込みが行われる。 したがっ
       てバイト数が対応するテープブロックのサイズを決める。  テープ上のブロックには、書き込みモー
       ドの情報は一切含まれない。  読み込みのときに重要なことは、テープのブロックサイズを受け入れ
       る コマンドを使うかどうかだけである。

       可変長ブロックモードでは、読み込みバイト数はテープのブロックサイズと  必ずしも一致していな
       くても良い。バイト数がテープの次のブロックよりも      大きければ、ドライバはそのデータを返
       し、関数は実際のブロックサイズを返す。  ブロックサイズがバイト数よりも大きければ、要求され
       た分のデータが ブロックの先頭から読み込まれて返され、ブロックの残りは破棄される。

       固定長ブロックモードでは、バッファーリングが有効になっていれば  読み込みバイト数は任意の大
       きさでよい。バッファーリングが無効の場合は、  テープのブロックサイズの整数倍でなければなら
       ない。 2.1.121 以前の カーネルでは、バッファーリングが有効な場合には  任意のバイト数の書き
       込みができる。その他の場合すべて (2.1.121 以前のカーネルでバッファーが無効な場合と、新しい
       カーネルの場合) では、書き込みバイト数はテープブロックサイズの整数倍でなければならない。

       2.6    カーネルでは、このドライバはユーザーバッファーとデバイス間で、     データの直接転送
       (direct transfer) を試みる。 これが不可能な場合は、ドライバの内部バッファーを用いる。 直接
       転送ができない理由としては、ユーザーバッファーのアラインメントが適切でない   (デフォルトは
       512  バイトだが HBA ドライバによって変更されている可能性がある)、 ユーザーバッファーのペー
       ジが SCSI アダプターから見えない、 などが考えられる。

       テープをクローズする直前のテープ操作命令が書き込みであれば、  ファイルマークが自動的にテー
       プへ書き込まれる。

       読み込み時にファイルマークに出会うと、以下が実行される。  ファイルマークが見付かったときに
       バッファーにデータが残っていると、 バッファーのデータが返される。次の読み込み操作は 0 バイ
       トを返す。 その次の読み込みは次のファイルからのデータを返す。 記録データの末尾は、読み込み
       操作が二回続けて 0 バイトを返して来るかたちで通知される。三回目の読み込みはエラーを返す。

   ioctl
       ドライバは 3 つの ioctl(2)  要求をサポートしている。 st ドライバによって認識されなかった要
       求は SCSI ドライバにわたされる。 以下の定義は /usr/include/linux/mtio.h による。

   MTIOCTOP  テープ操作の実行
       この要求は  (struct mtop *) 型の引数をとる。全てのドライブが全ての操作をサポートしているわ
       けではない。 ドライブが操作を拒否すると、ドライバは EIO エラーを返す。

           /* Structure for MTIOCTOP - mag tape op command: */
           struct mtop {
               short   mt_op;       /* operations defined below */
               int     mt_count;    /* how many of them */
           };

       通常のテープ利用のための磁気テープ操作:

       MTBSF         mt_count 個のファイルマーク (filemark) 分の後方スペース (backward space)。

       MTBSFM        mt_count  個のファイルマーク分の後方スペース。  テープの位置を最後のファイル
                     マークの EOT 側に変更する。

       MTBSR         mt_count 個のレコード (テープブロック) 分の後方スペース。

       MTBSS         mt_count 個のセットマーク分の後方スペース。

       MTCOMPRESSION mt_count  が 0 以外なら、ドライブのデータ圧縮を有効にする。 0 なら圧縮を無効
                     にする。このコマンドは MODE ページ 15 を用いる。 これはほとんどの  DAT  でサ
                     ポートされている。

       MTEOM         (ファイルを追加するために) メディアの記録部分の最後まで進める。

       MTERASE       テープの内容を消去する。 2.6 カーネルでは、引数が 0 ならば short erase (テー
                     プが空だと印をつける)  を行う。それ以外の場合は long erase  (全体を消去する)
                     を行う。

       MTFSF         mt_count 個のファイルマーク分の前方スペース (forward space)。

       MTFSFM        mt_count  個のファイルマーク分の前方スペース。  テープの位置は最後のファイル
                     マークの BOT 側変更される。

       MTFSR         mt_count 個のレコード (テープブロック) 分の前方スペース。

       MTFSS         mt_count 個のセットマーク分の前方スペース。

       MTLOAD        SCSI   ロードコマンドを実行する。   HP    オートローダーに限って利用できる。
                     mt_count  が定数 MT_ST_HPLOADER_OFFSET とある数値の和である場合、 その数値が
                     ドライブに送られ、オートローダーの制御に用いられる。

       MTLOCK        テープドライブの扉をロックする。

       MTMKPART      テープを 1 または 2 パーティションにフォーマットする。 mt_count が 0  でなけ
                     れば、これが最初のパーティションのサイズを与え、    二番目のパーティションが
                     テープの残りになる。 mt_count が 0  の場合は、テープは一つのパーティションと
                     してフォーマットされる。  このコマンドは、パーティションのサポートが有効にさ
                     れた ドライブでなければ使えない (以下の MT_ST_CAN_PARTITIONS を見よ)。

       MTNOP         何も操作を行わない。—副次的な効果として、ドライバーのバッファー をフラッシュ
                     する。 MTIOCGET を使って状態を読み出す前にはこの操作を行うべきである。

       MTOFFL        巻き戻し (rewind) を行い、ドライブをオフライン (off line) にする。

       MTRESET       ドライブをリセットする。

       MTRETEN       テープをリテンション (re-tension) する (テープを最後まで巻いた後、最初まで巻
                     き戻す)。

       MTREW         巻き戻し。

       MTSEEK        mt_count で指定されたテープブロック番号をシークする。 この操作が行えるのは、
                     LOCATE  コマンド  (デバイス固有のアドレス)   をサポートする  SCSI-2 ドライブ
                     か、あるいは Tandberg 互換の  SCSI-1  ドライブ  (Tandberg,  Archive,  Viper,
                     Wangtek,…) である。 デバイス固有のアドレスが利用されている場合は、ブロック番
                     号は 以前に MTIOCPOS によって返されたものにすべきである。

       MTSETBLK      mt_count の値をドライブのブロック長 (block length) としてセットする。 ブロッ
                     ク長を 0 にするとドライブは可変長ブロックサイズモードにセッ トされる。

       MTSETDENSITY  テープ密度 (tape density) を mt_count で示されるコードに変更する。ドライブで
                     サポートされている密度コード については、ドライブの文書に書いてあるだろう。

       MTSETPART     アクティブなパーティションを第 mt_count 番目に切り替える。パーティションは 0
                     から数える。 このコマンドは、パーティションのサポートが有効にされた ドライブ
                     でなければ使えない (以下の MT_ST_CAN_PARTITIONS を見よ)。

       MTUNLOAD      SCSI unload コマンドを実行する (テープのイジェクトは行わない)。

       MTUNLOCK      テープドライブの扉のロックを解除する。

       MTWEOF        mt_count 個のファイルマークを書き込む。

       MTWSM         mt_count 個のセットマークを書き込む。

       デバイスオプションの設定のための (スーパーユーザーによる) 磁気テープ操作:

       MTSETDRVBUFFER
               いろいろなドライブとドライバーのオプションを mt_count にエンコードされた各ビットに
               従って設定する。 オプションには、ドライブのバッファーリングモード、 ブール値のドラ
               イバオプションの集合、  バッファーの書き込み閾値   (デフォルトはブロックサイズと密
               度)、  タイムアウト値が含まれる  (カーネル  2.1  以降)。  一回の操作で変えられるの
               は、上記のリストのどれか一つだけである     (複数のブール値はまとめて一つと勘定され
               る)。

               高位の4ビットがゼロである値は、 ドライブのバッファーリングモードの設定に使われる。
               バッファーリングモードは以下の通り:

                   0   ドライブはライトコマンドに対し、  データブロックが実際に媒体に書き込まれる
                       まで GOOD のステータスを返さない。

                   1   ドライブはライトコマンドに対し、  すべてのデータがドライブの内部バッファー
                       に転送されるとすぐに、 GOOD のステータスを返すことができる。

                   2   ライトコマンドに対し、以下の 2  つの条件がそろった場合、  ドライブはすぐに
                       GOOD  ステータスを返す事ができる。  (a) すべてのデータがドライブの内部バッ
                       ファーに転送された。 (b)  別々のイニシエーターから来たバッファーデータが、
                       すべて媒体へ問題なく書き込まれた。

               書き込み閾値を制御するには、  mt_count には、定数 MT_ST_WRITE_THRESHOLD とブロック
               カウントのビット毎の OR をとった値を  下位の  28ビットに含まねばならない。  このブ
               ロックカウントは  1024 バイトブロックを単位としたもので、 テープの物理ブロックサイ
               ズを単位としたものではない。 また、閾値はドライバの内部バッファー (上記の説明参照)
               のサイズを越える事はできない。

               ブール値のフラグを設定・解除するには、     mt_count     の値は     MT_ST_BOOLEANS,
               MT_ST_SETBOOLEANS, MT_ST_CLEARBOOLEANS, MT_ST_DEFBOOLEANS のいずれか一つの値に、以
               下のオプションの任意の組み合わせに対して  ビット毎の  OR  を取ったものを指定する。
               MT_ST_BOOLEANSを用いると、  オプションを対応するビットに対して定義されている値に設
               定できる。       MT_ST_SETBOOLEANSを用いると、      オプションは選択的に設定され、
               MT_ST_DEFBOOLEANSを用いると 選択的に解除される。

               テープデバイスのデフォルトのオプションは MT_ST_DEFBOOLEANS によって設定される。 ア
               クティブでないテープデバイス  (例: マイナー番号 が 32 や 160 のデバイス)  は、それ
               らに対するデフォルトのオプションが最初に定義されたときに    アクティブになる。アク
               ティブにされたデバイスは、 起動時にアクティブにされたデバイスから、 明示的に指定さ
               れなかったオプションを継承する。

               ブール値のオプションは以下の通り:

               MT_ST_BUFFER_WRITES (デフォルト: 真)
                      固定長ブロックモードにおけるすべての書き込み操作をバッファーリングする。 こ
                      のオプションが偽であり、かつドライブが固定長ブロックサイズの時は、 すべての
                      書き込み操作はブロックサイズの倍数の大きさで行わなければならない。 信頼性の
                      あるマルチボリュームアーカイブを書き込むためには、 このオプションは偽に設定
                      されていなければならない。

               MT_ST_ASYNC_WRITES (デフォルト: 真)
                      このオプションが真の時には、データがドライバのバッファーに収まる時には デー
                      タがドライブに転送されるのを待たずに、すぐに書き込み操作が返って来る。 バッ
                      ファーがどのくらい空いたら次の SCSI write コマンドを発行できるかは、 書き込
                      み閾値によって決まる。 ドライブが返すすべてのエラーは、次の操作まで保存され
                      る。  信頼性のあるマルチボリュームアーカイブを書き込むためには、   このオプ
                      ションは偽に設定されていなければならない。

               MT_ST_READ_AHEAD (デフォルト: 真)
                      このオプションを指定すると、   ドライバは固定長ブロックモードで読み込みバッ
                      ファーリングと先読みをするようになる。 このオプションが偽であり、かつドライ
                      ブが固定長ブロックサイズの時は、 すべての読み込み操作はブロックサイズの倍数
                      の大きさで行わなければならない。

               MT_ST_TWO_FM (デフォルト: 偽)
                      このオプションはファイルがクローズされた時のドライバーの振舞いを変更する。
                      一つのファイルマークを書き込むのが通常の動作である。 このオプションが真の時
                      には、 ドライバーは 2 つのファイルマークを書き込んで、 2 つめのファイルマー
                      クのところに戻る。

                      注意: QICテープドライブはファイルマークに上書きすることができないので、 こ
                      のオプションを真にしてはならない。 これらのドライブは記録データの末尾の検知
                      に、  ファイルマークが 2つ続けてあるかではなく、 ブランクテープかどうかのテ
                      ストを用いる。 現在の他のほとんどのドライブも、記録データの末尾を検知する。
                      2 つのファイルマークが必要になるのは、 他のシステムとテープをやりとりする場
                      合である。

               MT_ST_DEBUGGING (デフォルト: 偽)
                      このオプションを真にすると、 ドライバはいろいろなデバッグ用メッセージを出す
                      ようになる   (DEBUG  を非ゼロに定義してドライバをコンパイルしている時のみ有
                      効)。

               MT_ST_FAST_EOM (デフォルト: 偽)
                      このオプションを真にすると、 MTEOM 操作が直接ドライブに送られるようになる。
                      操作が早くなるはずだが、 ドライバが現在のファイル番号を見失うことになる (こ
                      れは通常なら MTIOCGET リクエストによって返される)。 MT_ST_FAST_EOM が偽の時
                      には、ドライバは MTEOM リクエストに応えるとき、前方にファイルを一つ一つ進め
                      ていく。

               MT_ST_AUTO_LOCK (デフォルト: 偽)
                      このオプションが真の時には、 デバイスがオープンされるとドライブの扉がロック
                      され、 クローズされるとアンロックされる。

               MT_ST_DEF_WRITES (デフォルト: 偽)
                      テープオプション (ブロックサイズ、モード、圧縮など)  があるドライブにリンク
                      されたデバイスで変更されると、 その同じドライブにリンクされた他のデバイスで
                      も変更されることがある  (そのデバイスの定義による)。このオプションは、 ドラ
                      イバによる変更をいつ SCSI コマンドによって反映させるかと、 ドライブの自動検
                      知機能がいつ信頼して良いのかを定義する。   このオプションを偽にしておくと、
                      デバイスの変更があるとドライバはすぐに SCSI  コマンドを送る。  真にしておく
                      と、 SCSI コマンドは書き込みが要求されるまで送られない。 後者の場合は、読み
                      込みの際にドライブのファームウェアによって   テープ構造の検知が行える。また
                      SCSI コマンドは、 テープが正しい指定に沿って書き込まれているかどうかの 確認
                      のためだけに用いられる。

               MT_ST_CAN_BSR (デフォルト: 偽)
                      先読みを使うと、テープをクローズするときに、 場合によってはテープを正しい位
                      置に逆戻ししなければならないことがある。 これには、レコードを越えて逆戻しす
                      る SCSI コマンドが用いられる。 古いドライブでは、このコマンド処理の信頼性が
                      低いことがあるが、  このオプションを指定すると、 ドライバにこのコマンドの利
                      用を禁止することができる。 先読みと固定長ブロックモードを用いていると、最終
                      的な結果として、 デバイスのクローズ時にテープが正しい位置にならないことがあ
                      る。 2.6 カーネルでは、SCSI-3 をサポートしているドライブに対して、 この値の
                      デフォルトは真となる。

               MT_ST_NO_BLKLIMS (デフォルト: 偽)
                      ドライブによっては  READ  BLOCK  LIMITS SCSI コマンドを受けつけないことがあ
                      る。   このオプションを用いると、ドライバはこのコマンドを用いない。    欠点
                      は、指定したブロックサイズがドライブに受理されてしまうと、 ドライバのコマン
                      ド送信前チェックができなくなる点である。

               MT_ST_CAN_PARTITIONS (デフォルト: 偽)
                      このオプションは、一つのテープに複数パーティションを置くことを サポートする
                      かどうかを決める。 このオプションはドライブにリンクされた全てのデバイスに適
                      用される。

               このオプションは、
                      seek および tell 操作 (両者とも MTSEEKMTIOCPOS コマンドを伴い、テープ位置
                      を変更するとき)  の際に、 SCSI-2 の標準で定義されている論理ブロックアドレス
                      を用いるかどうかを ドライバに伝える。  偽だとデバイス固有のアドレスが用いら
                      れる。   ドライブが論理アドレスをサポートしているときは、  このオプションを
                      セットすることを強く勧める。 このモードではファイルマークもカウントするから
                      である。 論理ブロックアドレスしかサポートしないドライブもいくつか存在してい
                      る。

               MT_ST_SYSV (デフォルト: 偽)
                      このオプションが真になっていると、テープデバイスは  SystemV  のルールを用い
                      る。偽だと  BSD のルールを用いる。 これらのルール間の最も大きな違いは、読み
                      込みを行っていた デバイスがクローズされたときの振舞いである。 System  V  の
                      ルールでは、テープは次のファイルマークを越えて移動する  (デバイスの利用時に
                      これが行われなかった場合)。 BSD のルールではテープ位置は変更されない。

               MT_NO_WAIT (デフォルト: 偽)
                      即時モード (immediate mode; コマンドの終了を待たない)  を、ある種のコマンド
                      (rewind など) に対して有効にする。

               例:

                   struct mtop mt_cmd;
                   mt_cmd.mt_op = MTSETDRVBUFFER;
                   mt_cmd.mt_count = MT_ST_BOOLEANS |
                           MT_ST_BUFFER_WRITES | MT_ST_ASYNC_WRITES;
                   ioctl(fd, MTIOCTOP, mt_cmd);

               デバイスのデフォルトのブロックサイズは  MT_ST_DEF_BLKSIZE によって設定でき、デフォ
               ルトの密度コードは MT_ST_DEFDENSITY によって設定できる。  これらのパラメーターの値
               は操作コードと OR して与える。

               2.1.x  以降のカーネルでは、タイムアウト値の設定は、 サブコマンド MT_ST_SET_TIMEOUT
               に秒単位のタイムアウト値を OR して与えることによって行える。 long タイムアウト (巻
               き戻しなど、長い時間がかかるコマンドに対して用いられる)  は MT_ST_SET_LONG_TIMEOUT
               で設定できる。 カーネルのデフォルトは非常に長く、どのドライブでも 成功しているコマ
               ンドが決してタイムアウトしないようになっている。  したがって、ドライバはタイムアウ
               トを待っているだけなのに、 刺さった (stuck した)  ように見えることがある。これらの
               コマンドを使えば、    特定のドライブに対してもう少し実際的な値に設定することができ
               る。 一つのデバイスに設定したタイムアウト値は、 それと同じドライブにリンクした全て
               のデバイスに適用される。

               2.4.19 および 2.5.43 以降のカーネルでは、 このドライバはドライブのクリーニングが必
               要かどうかを示す 状態ビットをサポートする。 ドライブがクリーニング情報を返させるか
               どうかは、  MT_ST_SEL_CLN サブコマンドによって設定できる。 この値が 0 だと、クリー
               ニングビットは常に  0  となる。  値を  1   にすると、SCSI-3   標準で規定されている
               TapeAlert データが用いられる (まだ実装されていない)  値としては 2 から 17 が予約さ
               れている。 低位側の 8 ビットが 18 以上だと、拡張状態データ (extended  sense  data)
               が用いられる。第  9-16 ビットは注目すべきビットを選択するためのマスクを指定し、 第
               17-23 ビットは探すべきビットパターンを指定する。 このビットパターンが 0 のときは、
               マスク下のビット  (群)  がクリーニング要求を示す。パターンが 0 でなければ、 このパ
               ターンがマスク後の状態データバイトにマッチしなければならない。

   MTIOCGET  ステータスの取得
       このリクエストは (struct mtget *) という型の引数をとる。

           /* structure for MTIOCGET - mag tape get status command */
           struct mtget {
               long     mt_type;
               long     mt_resid;
               /* the following registers are device dependent */
               long     mt_dsreg;
               long     mt_gstat;
               long     mt_erreg;
               /* The next two fields are not always used */
               daddr_t  mt_fileno;
               daddr_t  mt_blkno;
           };

       mt_type    ヘッダーファイル中には多くの mt_type の値が定義されているが、現行のドライバは汎
                  用のタイプである MT_ISSCSI1 (汎用 SCSI-1 テープ) および MT_ISSCSI2 (汎用 SCSI-2
                  テープ) のみを返す。

       mt_resid   現在のテープ位置番号。

       mt_dsreg   ドライブのブロックサイズと密度の現在の設定を報告する (下位 24  ビットがブロック
                  サイズ、上位   8  ビットが密度)。  これらのフィールドは、  MT_ST_BLKSIZE_SHIFT,
                  MT_ST_BLKSIZE_MASK, MT_ST_DENSITY_SHIFT, MT_ST_DENSITY_MASK で定義されている。

       mt_gstat   汎用の (デバイスに依存しない) ステータスを報告する。 これらのステータスビットを
                  テストするためのマクロが ヘッダーファイルで定義されている。

                  GMT_EOF(x): テープはファイルマークの直後に位置している。 (MTSEEK 操作の後では常
                      に偽)

                  GMT_BOT(x): テープは最初のファイルの先頭に位置している。 (MTSEEK 操作の後では常
                      に偽)

                  GMT_EOT(x): テープ操作はテープの物理的な終点に達した。

                  GMT_SM(x): テープは現在セットマークに位置している。 (MTSEEK 操作の後では常に偽)

                  GMT_EOD(x): テープは記録データの末尾に位置している。

                  GMT_WR_PROT(x):  ドライブはライトプロテクトされている。  これはドライブによって
                      は、 ドライブが現在のメディアタイプへの書き込みを  サポートしていない事を意
                      味する場合もある。

                  GMT_ONLINE(x): もっとも最近の open(2)  が、テープが入っていて操作の準備ができて
                      いるドライブを検知した。

                  GMT_D_6250(x),  GMT_D_1600(x),  GMT_D_800(x):  この「汎用」のステータス情報は、
                      9-トラック ½" テープドライブの場合にのみ、 現在の密度の設定を報告する。

                  GMT_DR_OPEN(x): ドライブにテープが入っていない。

                  GMT_IM_REP_EN(x):  即時報告モード。 write コールが戻ったとき、 テープに対して物
                      理的な書き込みが行われたかどうかを保証できない場合に、 このビットがセットさ
                      れる。ドライバがデータをバッファーリングせず、 ドライブもデータをバッファー
                      リングしない場合に限って、 この値は 0 にセットされる。

                  GMT_CLN(x):  ドライブがクリーニングを要求している。  カーネル   2.4.19   および
                      2.5.43 以降で実装された。

       mt_erreg   mt_erreg  で定義されているフィールドは一つだけで、 下位の 16 ビットがエラーをリ
                  カバーした回数である (MT_ST_SOFTERR_SHIFTMT_ST_SOFTERR_MASK  で定義されてい
                  る)。 ドライブの報告するエラーリカバー数と矛盾することがあるので、 この数はほと
                  んどの場合維持されない  (ほとんどのドライブでは、デフォルトではソフトエラーを報
                  告しない。 しかしこれは SCSI MODE SELECT コマンドによって変更できる)。

       mt_fileno  (ゼロから数えた)  現在のファイル番号を報告する。 ファイル番号がわからない時 (例
                  えば MTBSSMTSEEK の後など) には -1 にセットされる。

       mt_blkno   現在のファイル中の(ゼロから数えた)ブロック番号を報告する。 ブロック番号がわから
                  ない時 (例えば MTBSF, MTBSS, MTSEEK の後など) には -1 にセットされる。

   MTIOCPOS  テープ位置の取得
       このリクエストは (struct mtpos *) 型の引数をとり、ドライブが保持している現在のテープブロッ
       ク番号を報告する。 これは、 MTIOCGET により返される mt_blkno  と同じではない。  ドライブは
       READ  POSITION コマンド (デバイス固有アドレス)  をサポートする SCSI-2ドライブか、 Tandberg
       互換の SCSI-1 ドライブ (Tandberg, Archive, Viper, Wangtek, ... ) でなければならない。

           /* structure for MTIOCPOS - mag tape get position command */
           struct mtpos {
               long mt_blkno;    /* current block number */
           };

返り値

       EACCES        書き込み保護されているテープに書き込みまたは消去を行おうとした。 (このエラー
                     は open(2)  中には検知されない。)

       EBUSY         デバイスがすでに使われているか、 ドライバがバッファーを割当てられなかった。

       EFAULT        コマンドの引数が、 呼びだしプロセスに属していないメモリー位置を指している。

       EINVAL        ioctl(2)  の引数が不正であるか、要求したブロックサイズが不正。

       EIO 14        要求された操作が最後まで行えなかった。

       ENOMEM        read(2)  のバイト数が、テープにある次の物理ブロックより小さい (2.2.18 および
                     2.4.0-test6 以前では、黙って余分のバイトを無視していた)。

       ENOSPC        メディアの終点に達したため、書き込み操作が完了しなかった。

       ENOSYS        不明な ioctl(2)。

       ENXIO         オープンする時にテープデバイスが存在しなかった。

       EOVERFLOW     ドライバの内部バッファーより大きいサイズの可変長ブロックを  読み書きしようと
                     した。

       EROFS         ドライブに入っているテープがライトプロテクトされている場合に、 O_WRONLY また
                     は O_RDWR で open を行おうとした。

ファイル

       /dev/st*    自動巻き戻しの SCSI テープデバイス。

       /dev/nst*   巻き戻しをしない SCSI テープデバイス。

注意

       1.  異なるシステムでデータを相互にやりとりする場合、  両方のシステムで物理的なテープブロッ
           クサイズを一致させる必要がある。  起動直後のドライブのパラメーターは、大多数の OS がそ
           のデバイスに対して 用いている値と異なっていることもよくある。多くのシステムは、 ドライ
           ブが対応していれば可変長ブロックモードを用いる。  DAT、 8mm ヘリカルスキャンドライブ、
           DLT などの最近のドライブの ほとんどは可変長ブロックモードに対応しているから。 これらの
           ドライブは  (少なくとも他のシステムとのデータ交換が  ある場合は)、  Linux でも可変長ブ
           ロックモードで使うほうが    良いかもしれない     (つまりシステムの起動時のモード設定に
           MTSETBLK または MTSETDEFBLK を用いる)。 欠点としては、比較的大きなテープブロックサイズ
           を用いなければ、 SCSI バス上で満足のいく転送速度が得られないことである。

       2.  多くのプログラム (tar(1)  など) では、  コマンドラインからユーザーがブロック関連の値を
           指定できる。 この値によってテープ上の物理的なブロックサイズを決定できるのは、 可変長ブ
           ロックモードに限られることに注意。

       3.  SCSI テープドライブを用いるには、基本の SCSI  ドライバ、  SCSI  アダプターのドライバ、
           SCSI  テープドライバのすべてが  カーネルに組み込まれているか、あるいはモジュールとして
           ロードされている 必要がある。 SCSI  テープドライバがないと、  ドライブは認識されるが、
           このページで記述されているテープのサポートは利用できない。

       4.  ドライバはエラーメッセージをコンソールとログとに書き出す。 カーネル設定で verbose SCSI
           messages が有効にされていると、 SENSE コードが自動的にテキストに変換されて、  いくつか
           のメッセージに書きだされる。

       5.  このドライバの内部バッファーリングは、固定ブロックモードなら read(2)  や write(2) のバ
           イト数が小さくても良いスループットを出す。 直接転送ではこれは不可能なので、2.6  カーネ
           ルに移行したときに驚くかもしれない。  解決法としては、ソフトウェアにより大きな転送を行
           うよう伝える  (たいていはより大きなブロックを使わせる)   ことである。   これが不可能な
           ら、直接転送を無効にすることもできる。

関連項目

       mt(1)

       Linux  カーネルソースの  drivers/scsi/README.stDocumentation/scsi/st.txt (カーネル 2.6
       以降) の各ファイルには、 ドライバに関するより新しい情報や、 その設定可能な範囲に関する内容
       が含まれている。

この文書について

       この  man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクト
       の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。