MTIO(4) FreeBSD/i386 カーネルインタフェースマニュアル MTIO(4)
名称
mtio − FreeBSD 磁気テープインタフェース |
解説
/dev/[nr]sa* という名前のスペシャルファイルは、 SCSI テープドライブを表し ています。このドライブは、システムに接続することができます。 /dev/[nr]sa*.ctl は、コントロールデバイスで、SCSI テープドライバに ioctl システムコールを発行するのに使用できます。これによって、テープをアンマウ ントした後も続けて有効にする必要のあるパラメータを設定できます。 巻き戻し用デバイスは、最後の読み込み、書きこみ、そしてシーク要求が終了す るか、あるいはテープの最後に到達したときに、自動的にテープを巻き戻しま す。通常、巻き戻しを行わないデバイス名には、文字 ‘n’ が付けられます。 テープには、固定長レコードも可変長レコードも書きこむことができます。さら なる情報を得たい場合は、 sa(4) を参照してください。テープの最後に は、end-of-file マーカが 2 つ付けられ、テープファイルの末尾に は、end-of-file マーカが 1 つ付けられます。テープが巻き戻されない場合に は、テープの位置は 2 つのテープマークの間にヘッドがくる所となり、次回の書 きこみで 2 つ目の end-of-file マーカが上書きされることになります。 磁気テープデバイスはすべて mt(1) コマンドで制御されます。 raw 磁気テープデバイスでは、 ioctl(2) での操作がいくらか可能です。以下の 宣言は 〈sys/mtio.h〉 からのものです。 /* * 磁気テープ IO 制御コマンド用構造体および宣言 */ /* MTIOCTOP - 磁気テープ操作コマンド用構造体 */ struct mtop { |
shortmt_op; |
/* 以下で宣言する操作 */ |
||||
daddr_tmt_count; |
/* 何回操作するのか */ |
}; /* 操作 */ |
#define MTWEOF |
0 |
/* end-of-file レコードを書く */ |
||||
#define MTFSF |
1 |
/* 空きファイルまで前進 */ |
||||
#define MTBSF |
2 |
/* 空きファイルまで後退 */ |
||||
#define MTFSR |
3 |
/* 空きレコードまで前進 */ |
||||
#define MTBSR |
4 |
/* 空きレコードまで後退 */ |
||||
#define MTREW |
5 |
/* 巻き戻し */ |
||||
#define MTOFFL |
6 |
/* 巻き戻してドライブをオフラインにする */ |
||||
#define MTNOP |
7 |
/* 何もしない。ステータスを設定するだけ */ |
||||
#define MTCACHE |
8 |
/* コントローラキャッシュを有効 */ |
||||
#define MTNOCACHE |
9 |
/* コントローラキャッシュを無効 */ |
#if defined(__FreeBSD__) |
#define MTSETBSIZ |
10 |
/* デバイスの密度を設定します。密度の値は SCSI II
の仕様で定められて */ |
#define MTSETDNSTY |
11 |
|||||
#define MTERASE |
12 |
/* EOM まで消去 */ |
||||
#define MTEOD |
13 |
/* EOM まで空白にする */ |
||||
#define MTCOMP |
14 |
/* 圧縮モードの選択 0= オフ, 1= 定義 */ |
||||
#define MTRETENS |
15 |
/* テープのたるみ直し */ |
||||
#define MTWSS |
16 |
/* セットマーク書き込み */ |
||||
#define MTFSS |
17 |
/* セットマークまで前進 */ |
||||
#define MTBSS |
18 |
/* セットマークまで後退 */ |
||||
#define MT_COMP_ENABLE |
0xffffffff |
|||||
#define MT_COMP_DISABLED |
0xfffffffe |
|||||
#define MT_COMP_UNSUPP |
0xfffffffd |
/* |
#defineMTIO_DSREG_NIL |
0 |
/* 未知 */ |
|||
#defineMTIO_DSREG_REST |
1 |
/* 何もしない */ |
|||
#defineMTIO_DSREG_RBSY |
2 |
/* テープと通信中 (しかし、操作していません) */ |
|||
#defineMTIO_DSREG_WR |
20 |
/* 書き込み中 */ |
|||
#defineMTIO_DSREG_FMK |
21 |
/* ファイルマークの書き込み中 */ |
|||
#defineMTIO_DSREG_ZER |
22 |
/* 消去中 */ |
|||
#defineMTIO_DSREG_RD |
30 |
/* 読み込み中 */ |
|||
#defineMTIO_DSREG_FWD |
40 |
/* 送り中 */ |
|||
#defineMTIO_DSREG_REV |
41 |
/* 戻し中 */ |
|||
#defineMTIO_DSREG_POS |
42 |
/* ハードウェアによる位置決め中 (方向不明) */ |
|||
#defineMTIO_DSREG_REW |
43 |
/* 巻き戻し中 */ |
|||
#defineMTIO_DSREG_TEN |
44 |
/* たるみ直し中 */ |
|||
#defineMTIO_DSREG_UNL |
45 |
/* 取り除き中 */ |
|||
#defineMTIO_DSREG_LD |
46 |
/* 取り除き中 */ |
#endif /* MTIOCGET 用の構造体 - 磁気テープの状態取得コマンド */ struct mtget { |
shortmt_type; |
/* 磁気テープデバイスの種類 */ |
/* 次の 2 つのレジスタはほとんどデバイス依存です */ |
shortmt_dsreg; |
/* ‘‘デバイス状態’’ レジスタ */ |
||||
shortmt_erreg; |
/* ‘‘エラー’’ レジスタ */ |
/* デバイス依存レジスタの終わり */ |
shortmt_resid; |
/* 残りカウンタ */ |
#if defined (__FreeBSD__) |
daddr_t mt_blksiz; |
/* 現在効力のあるブロックサイズ */ |
|||
daddr_t mt_density; |
/* 現在効力のある記録密度 */ |
|||
daddr_t mt_comp; |
/* 現在効力のある圧縮法 */ |
|||
daddr_t mt_blksiz0; |
/* モード 0 用ブロックサイズ */ |
|||
daddr_t mt_blksiz1; |
/* モード 1 用ブロックサイズ */ |
|||
daddr_t mt_blksiz2; |
/* モード 2 用ブロックサイズ */ |
|||
daddr_t mt_blksiz3; /* モード 3 用ブロックサイズ */ |
||||
daddr_t mt_density0; |
/* モード 0 用記録密度 */ |
|||
daddr_t mt_density1; |
/* モード 1 用記録密度 */ |
|||
daddr_t mt_density2; |
/* モード 2 用記録密度 */ |
|||
daddr_t mt_density3; /* モード 3 用記録密度 */ |
/* 以下のものは、まだ実装されていません。 */ |
u_charmt_comp0; |
/* モード 0 用圧縮法 */ |
||||
u_charmt_comp1; |
/* モード 1 用圧縮法 */ |
||||
u_charmt_comp2; |
/* モード 2 用圧縮法 */ |
||||
u_charmt_comp3; |
/* モード 3 用圧縮法 */ |
/* 未実装部分終わり */ |
daddr_tmt_fileno; |
/* 現在位置のファイル番号 */ |
|||
daddr_tmt_blkno; |
/* 現在位置のブロック番号 */ |
}; /* MTIOCERRSTAT -
テープエラー状態を取得するコマンド用構造体 */ |
/* |
|||||||
* 操作用に SCSI Check Condition を書き出すコマンドの |
|||||||
* 最後の実行結果から、これらのメンバが保持されます。 |
|||||||
* MTIOCERRSTAT を発行すると保持されていたメンバがクリアされます。 |
|||||||
*/ |
|||||||
u_int8_t io_sense[32]; |
/* データ I/O 用の最終センスデータ */ |
||||||
u_int32_t io_resid; |
/* 最後のデータ I/O からの残りカウンタ */ |
||||||
u_int8_t io_cdb[16]; |
/* 最終センスデータを作ったコマンド */ |
||||||
u_int8_t ctl_sense[32]; |
/* 制御 I/O 用の最終センスデータ */ |
||||||
u_int32_t ctl_resid; |
/* 最後の制御 I/O からの残りカウンタ */ |
||||||
u_int8_t ctl_cdb[16]; |
/* 最終制御センスデータを作ったコマンド */ |
||||||
/* |
|||||||
* これらは、読み書き時の累積エラーカウンタです。 |
|||||||
* (どのように累積エラーカウンタをリセットするかは |
|||||||
* まだ決まっていません。) |
|||||||
* (まだ実装されていませんが、場所だけは確保してあります。) |
|||||||
*/ |
|||||||
struct { |
|||||||
u_int32_t retries; |
/* 実行したリトライの総数 */ |
||||||
u_int32_t corrected; |
/* 実行した誤り訂正の総数 */ |
||||||
u_int32_t processed; |
/* 誤り訂正の成功総数 */ |
||||||
u_int32_t failures; |
/* 誤り訂正 / リトライ失敗総数 */ |
||||||
u_int64_t nbytes; |
/* 処理した総バイト数 */ |
||||||
} wterr, rderr; |
}; union mterrstat { |
struct scsi_tape_errors scsi_errstat; |
|
char _reserved_padding[256]; |
}; |
#defineMT_ISTS |
0x01 |
/* TS-11 */ |
||||
#defineMT_ISHT |
0x02 |
/* TM03 マスバス: TE16, TU45, TU77 */ |
||||
#defineMT_ISTM |
0x03 |
/* TM11/TE10 ユニバス */ |
||||
#defineMT_ISMT |
0x04 |
/* TM78/TU78 ユニバス */ |
||||
#defineMT_ISUT |
0x05 |
/* ユニバス上の SI TU-45 エミュレーション */ |
||||
#defineMT_ISCPC |
0x06 |
/* SUN */ |
||||
#defineMT_ISAR |
0x07 |
/* SUN */ |
||||
#defineMT_ISTMSCP |
0x08 |
/* DEC TMSCP プロトコル (TU81, TK50) */ |
||||
#define MT_ISCY |
0x09 |
/* CCI Cipher */ |
||||
#define MT_ISCT |
0x0a |
/* HP 1/4 テープ */ |
||||
#define MT_ISFHP |
0x0b |
/* HP 7980 1/2 テープ */ |
||||
#define MT_ISEXABYTE |
0x0c |
/* Exabyte */ |
||||
#define MT_ISEXA8200 |
0x0c |
/* Exabyte EXB-8200 */ |
||||
#define MT_ISEXA8500 |
0x0d |
/* Exabyte EXB-8500 */ |
||||
#define MT_ISVIPER1 |
0x0e |
/* Archive Viper-150 */ |
||||
#define MT_ISPYTHON |
0x0f |
/* Archive Python (DAT) */ |
||||
#define MT_ISHPDAT |
0x10 |
/* HP 35450A DAT ドライブ */ |
||||
#define MT_ISMFOUR |
0x11 |
/* M4 Data 1/2 9 トラック ドライブ */ |
||||
#define MT_ISTK50 |
0x12 |
/* DEC SCSI TK50 */ |
||||
#define MT_ISMT02 |
0x13 /* Emulex MT02 SCSI テープコントローラ */ |
/* 磁気テープ I/O 制御コマンド */ |
#define |
MTIOCTOP_IOW(’m’, 1, struct mtop) |
/* 磁気テープを操作する */ |
|||
#define |
MTIOCGET_IOR(’m’, 2, struct mtget) |
/* テープ状態取得 */ |
/* 次の 2 つのコマンドはどこでも使用されていないようです。 */ |
#define MTIOCIEOT_IO(’m’, 3) |
/* EOT エラーを無視 */ |
|||||
#define MTIOCEEOT_IO(’m’, 4) |
/* EOT エラー有効 */ |
/* |
#define |
MTIOCRDSPOS |
_IOR(’m’, 5, u_int32_t) /* 論理ブロックアドレスを取得 */ |
|||
#define |
MTIOCRDHPOS _IOR(’m’, 6, u_int32_t) /* ハードウェアブロックアドレスを取得 */ |
||||
#define |
MTIOCSLOCATE |
_IOW(’m’, 5, u_int32_t) /* 論理ブロックアドレスを探す */ |
|||
#define |
MTIOCHLOCATE |
_IOW(’m’, 6, u_int32_t) /* ハードウェアブロックアドレスを探す */ |
|||
#define MTIOCERRSTAT |
_IOR(’m’, 7, union mterrstat) /* テープのエラーを取得 */ |
#ifndef KERNEL #ifdefKERNEL |
#define |
T_UNIT |
003 |
/* ユニットの選択 */ |
||||
#define |
T_NOREWIND |
004 |
/* 巻き戻しを行わない */ |
||||
#define |
T_DENSEL |
030 |
/* 記録密度の選択 */ |
||||
#define |
T_800BPI |
000 |
/* 800 bpi を選択 */ |
||||
#define |
T_1600BPI |
010 |
/* 1600 bpi を選択 */ |
||||
#define |
T_6250BPI |
020 |
/* 6250 bpi を選択 */ |
||||
#define T_BADBPI |
030 |
/* 未定義値を選択 */ |
#endif |
関連ファイル
/dev/[nr]sa*
関連項目 |
歴史
mtio のマニュアルは 4.2BSD で登場しました。 i386 バージョンは最初に FreeBSD 2.2 で登場しました。 |
バグ
ステータスは、デバイスに依らないフォーマットで返されるようにすべきです。 スペシャルファイルの命名については、もっと一貫した分かりやすい方法でやり 直すべきです。 FreeBSD 2.2 February 11, 1996 FreeBSD 2.2 |