rmt Special File
目的
順次アクセス・バルク・ストレージ・メディア・デバイス・ドライバーへのアクセスを提供します。
説明
磁気テープは、主にバックアップ、ファイル・アーカイブ、およびその他のオフライン・ストレージに使用されます。 テープは、 /dev/rmt0、...、 /dev/rmt255 スペシャル・ファイルを介してアクセスされます。 特殊ファイル名の R は、キャラクター・スペシャル・ファイル・インターフェースを介した 未加工 アクセスを示します。 磁気テープ装置は、ブロック装置のカテゴリーにあまり適していません。 したがって、キャラクター・インターフェース・スペシャル・ファイルのみが提供されます。
各磁気テープ装置に関連付けられた 特殊ファイル は、オープン操作またはクローズ操作中に実行されるアクションを決定します。 これらのファイルは、該当する装置について、テープに書き込まれる密度データも指示します。 次の表は、これらの特殊ファイルの名前とそれに対応する特性を示しています。
| 特殊ファイル名 | 特性 |
|---|---|
| /dev/rmt* |
|
| /dev/rmt*.1 |
|
| /dev/rmt*.2 |
|
| /dev/rmt*.3 |
|
| /dev/rmt*.4 |
|
| /dev/rmt*.5 |
|
| /dev/rmt*.6 |
|
| /dev/rmt*.7 |
|
- 密度設定 #1 および密度設定 #2 の値は、SMIT を使用して設定できるテープ・ドライブ属性から取得されます。 通常、密度設定値 #1 はテープ・ドライブの可能な最高密度に設定され、密度設定値 #2 は低い密度に設定されます。 ただし、このパターンに従うために密度設定は必要ありません。
- 複数の密度をサポートしない磁気テープ装置を使用する場合には, 密度値 (1 インチ当たりのバイト数) は無視されます。 複数の密度をサポートする磁気テープ装置の場合、密度値はテープへの書き込み時にのみ適用されます。 読み取り時には、ドライブはデフォルトでテープが書き込まれる密度になります。
- ほとんどの磁気テープ・ドライブは、512 バイトのブロック・サイズを使用します。 8mm テープ・ドライブは、1024 バイトの最小ブロック・サイズを使用します。 SMIT を使用してブロック・サイズを小さくすると、スペースが浪費されます。
使用に関する考慮事項
ほとんどのテープ操作は、 オープン、 読み取り、 書き込み、および 閉じる サブルーチンを使用してインプリメントされます。 ただし、診断の目的では、 OpenX サブルーチンが必要です。
サブルーチンのオープンとクローズ
書き込み後にファイルをクローズする場合は注意が必要です。 書き込まれたばかりのデータをアプリケーションが反転させると、ファイル・マークは書き込まれません。 ただし、ブロック更新を許可する磁気テープ装置の場合は、アプリケーションが逆方向にスペースするか、テープ位置をテープの先頭 (BOT) に戻さない限り、1 つまたは 2 つのファイル・マークが装置のクローズ時に書き込まれます。 (ファイル・マークの数は、特殊ファイル・タイプによって異なります。)
マルチテープ・ジョブの場合には, 各テープごとに特殊ファイルをオープンしてクローズしなければなりません。 特殊ファイルがオープンされていて, テープが変更されている場合には, ユーザーは続行することができません。
OpenX サブルーチンは、主に診断コマンドおよびユーティリティーで使用するためのものです。 実行には適切な権限が必要です。 適切な権限なしでこのサブルーチンを実行すると、戻り値はとなり -1、グローバル変数 errno は EPERM に設定されます。
読み取りおよび書き込みサブルーチン
読み取りまたは書き込み用にオープンされた場合には, テープは所要の位置になっているものと見なされます。 テープが no-rewind-on-close (/dev/rmt*.1) としてオープンされ、ファイルが書き込まれると、テープのクローズ時に単一のファイル・マークが書き込まれます。 テープが rewind-on-close (/dev/rmt *) としてオープンされ、ファイルが書き込まれると、テープのクローズ時に二重ファイル・マークが書き込まれます。 テープがクローズ時に巻き戻しなしとしてオープンされ、ファイルから読み取られると、テープは、読み取られたばかりのデータの後のファイルの終わり (EOF) マークの後のクローズ時に位置付けられます。
特に RM ファイルを選択することによって、複数のファイル・テープを作成することができます。
テープはキャラクター・インターフェース・スペシャル・ファイルを介してアクセスされますが、読み取りまたは書き込み操作に必要なバイト数は、磁気テープ装置に定義されたブロック・サイズの倍数でなければなりません。 テープ・ドライブが可変ブロック・モードの場合、テープのブロック・サイズより小さい読み取り要求は、要求されたバイト数を戻し、 エラー番号 グローバル変数を値 0 に設定します。 この場合、 Readx サブルーチンの 拡張 パラメーターを テープ・ SHORT_READに設定する必要があります。
読み取り時には、レコード・サイズは、指定されたバッファー・サイズまでの読み取りバイト数として戻されます。 EOF 条件が検出されると、長さゼロの読み取りが戻され、テープは EOF の後に位置付けられます。
読み取りまたは書き込み操作中にメディアの終わり (EOM) 条件が検出されると、正常に作動可能または書き込まれたバイト数が戻されます。 デバイスがEOM(エンド・オブ・レコード)に到達した後に書き込みを試行すると、値 -1 が返され、グローバル変数 errno がENXIO 値に設定される。 装置が EOM に達した後で読み取りが試行されると、長さゼロの読み取りが戻されます。 後続の読み取りは、長さがゼロの読み取りを戻し続けます。
磁気テープ装置でのデータ・バッファリング: 一部のテープ装置には、テープへの書き込み時のデータ転送速度を最大化するためのデータ・バッファーが含まれています。 テープ装置のデータ・バッファーにデータが転送されると、テープに送信された書き込み操作は完了として戻されます。 その後、バッファー内のデータは非同期的にテープに書き込まれます。 その結果、ホストが入出力の完了を待つ必要がないため、データ転送速度が向上します。
これらのデータ・バッファーの使用を容易にするために、テープ・デバイス・ドライバーによって 2 つのモードが提供されています。 非バッファー・モードでは、テープへの書き込みによってデータ・バッファーがバイパスされ、テープに直接書き込まれます。 バッファー・モードでは、転送データがテープ装置バッファーに正常に書き込まれると、すべての書き込みサブルーチンが完了として戻されます。 デバイス・ドライバーは、スペシャル・ファイルがクローズされるか、または EOM 条件が検出されるまで、データ・バッファーをフラッシュしません。
バッファー・モードで実行中に EOM 条件が検出されると、装置は装置データ・バッファーをフラッシュしようとします。 残余カウントは、バッファー・モードでは書き込み転送の長さを超えることができます。 場合によっては、残余データのフラッシュによって、実際にテープがリールから外れることがあります。 いずれの場合も失敗と見なされ、戻り値はとなり -1、グローバル変数 errno は EIO に設定される。 これらのエラーは、ユーザーが非バッファー・モードで実行することを必要とする場合があります。
rmt 特殊ファイルの考慮事項: テープの読み取りまたは書き込み中に装置がリセットされる障害の場合は、スペシャル・ファイルをクローズし、ジョブを再始動する必要があります。 この状態が発生した後、特殊ファイルが閉じられるまでの間に発行されたコマンドはすべて、戻り値が -1、グローバル変数 errno が EIO に設定される結果となる。 リセット・タイプ以外のエラー (つまり、メディア・エラーまたはハードウェア・エラー) の場合、テープはエラーが発生した位置のままになります。
マルチテープ・ジョブの場合には, 各テープごとに特殊ファイルをオープンしてクローズしなければなりません。 特殊ファイルがオープンされていて, テープが変更されている場合には, ユーザーは続行することができません。
テープ・デバイス・ドライバーがシグナルを受信すると、現行コマンドは打ち切られます。 その結果、アプリケーションは、ドライブの電源をリサイクルしたり、タイムアウトが発生するのを待機したりすることなく、時間のかかるコマンド (消去操作など) を停止します。
ブロック・サイズ・パラメーターとしてゼロ (0) を使用すると、ブロック・サイズが可変長になります。
ioctl サブルーチン
単一の Ioctl 操作、 イオシINFOは、 Ioctl サブルーチンを使用するすべてのデバイス・ドライバーに対して定義されます。 RM スペシャル・ファイルの場合、 スティオクトップ 操作も定義されています。
IOCINFO ioctl 操作: IOCINFO ioctl 操作は、 /usr/include/sys/devinfo.h ファイルに定義された構造体を戻します。
STIOCTOP ioctl 操作は、以下のようになります。 スティオクトップ ioctl 操作は、消去や緩み取りなどのコマンド実行操作を提供します。 STIOCTOP 操作を使用する ioctl サブルーチンに対するパラメーターは、 /usr/include/sys/tape.h ファイルに定義されているように、 stop 構造体のアドレスを指定します。
次の場所で検出された操作:st_op停止 構造体のフィールドが実行されます。st_count巻き戻し、消去、および緩み取りの操作を除きます。 使用可能な操作は以下のとおりです。
| 項目 | 説明 |
|---|---|
| ストリーム | 巻き戻し。 |
| STOFFL (データ) | テープを巻き戻してアンロードします。 装置を再び使用する前に, テープを挿入しなければなりません。 |
| _ 翻訳不要 _STERASE | テープを消去します。ロード開始点のままにします。 |
| STRETEN (E) | テープの緩み取り。ロード開始点のままにします。 |
| STWEOF (E) | 書き込みおよびファイルの終わりのマーク。 |
| STFSF (ソフトウェア) | スペース・ファイルを転送します。 |
| STFSR (サービス要求) | 前送りスペース・レコード。 |
| STRSF (鉄道) | 逆方向スペース・ファイル。 |
| STRSR (要求) | スペース・レコードを反転します。 |
| 標準の停止 | ファイルの終わり検査を使用不可にします。 注: 標準の停止 コマンドを使用すると、アプリケーションはテープの終わりを超えて書き込みを行うことができます。 標準の停止 コマンドを発行してファイルの終わり検査を使用不可にする場合、このコマンドの使用によって発生する可能性のあるエラー状態から保護するのは、アプリケーションの責任です。
|
エラー・コード
Ioctl、 オープン、 読み取り、および 書き込み サブルーチンについてリストされている一般的なエラー・コードに加えて、以下の特定のエラー・コードも発生する可能性があります。
| 項目 | 説明 |
|---|---|
| EAGAIN | すでにオープンされている装置に対してオープン操作が試みられました。 |
| EBUSY | ターゲット・デバイスは別のイニシエーターによって予約されています。 |
| EINVAL | O_APPEND は、開くモードとして提供されています。 |
| EINVAL | 読み取り または 書き込み サブルーチンに対する N バイト パラメーターが、ブロック・サイズの偶数倍ではありません。 |
| EINVAL | Ioctl サブルーチンに対するパラメーターが無効です。 |
| EINVAL | 要求された ioctl 操作は、現行装置ではサポートされていません。 |
| EIO | 前送りまたは逆送りできませんでしたst_countEOM 条件またはファイル・マークが検出される前に記録します。 |
| EIO | 前送りまたは逆送りできませんでしたst_countファイルは、EOM 条件を検出する前にマークを付けます。 |
| emedia | テープ装置が回復不能媒体エラーを検出しました。 |
| ENOMEM | テープ上の可変長レコードの読み取りのために要求されたバイト数が、可変長レコードの実際のサイズ (バイト単位) より小さくなっています。 |
| ENOTREADY | ドライブにテープがないか、ドライブが作動可能になっていません。 |
| ENXIO | テープが EOM にあるときに、書き込み操作が試みられました。 |
| EPERM | 要求されたサブルーチンには適切な権限が必要です。 |
| ETIMEDOUT | コマンドがタイムアウトになりました。 |
| エヴルプロテクト | 読み取り専用テープで読み取り/書き込みのためのオープン操作が試みられました。 |
| エヴルプロテクト | 読み取り専用テープに対して、メディアに影響を与える ioctl 操作が試みられました。 |