Provided by: manpages-ja_0.5.0.0.20221215+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
              Format  the  tape  into  one  or  two  partitions.   If mt_count is positive, it gives the size of
              partition 1 and partition 0 contains the rest of the tape.  If  mt_count  is  zero,  the  tape  is
              formatted  into one partition.  From kernel version 4.6, a negative mt_count specifies the size of
              partition 0 and the rest of the tape contains partition 1.  The physical  ordering  of  partitions
              depends  on  the  drive.   This command is not allowed for a drive unless the partition support is
              enabled for the drive (see MT_ST_CAN_PARTITIONS below).

       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 (デフォルト: 偽)
                     このオプションが真になっていると、テープデバイスは System V のルールを用いる。偽だと 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 以前では、黙っ
              て余分のバイトを無視していた)。

       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 プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告
       に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。

Linux                                              2020-04-11                                              ST(4)