MTIO

Section: Devices and Network Interfaces (4)
Updated: i386
索引 jman

BSD mandoc
FreeBSD 2.2  

索引

名称

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) での操作がいくらか可能です。 以下の宣言は Aq Pa 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__)
/* デバイス用のブロックサイズを設定します。デバイスが可変長のものである */
/* 場合、0 以外のパラメータを与えると、受け付けられたパラメータ値の     */
/* ブロックサイズを持った固定ブロック長のものに変えられます。ブロック   */
/* サイズを 0 に戻すと、デバイスは再び可変長ブロックのものに戻ります。  */

#define MTSETBSIZ       10

/* デバイスの密度を設定します。密度の値は SCSI II の仕様で定められて    */
/* おり、0 から 0x17 までの値を取ります。オープンモードのときのみこの   */
/* 値を設定してください。                                               */  

#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

/*
 * mt_dsreg の値で、今デバイスが何をしているかを表す。
 */
#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 用圧縮法 */
/* 未実装部分終わり */
#endif
        daddr_tmt_fileno;       /* 現在位置のファイル番号 */
        daddr_tmt_blkno;        /* 現在位置のブロック番号 */
};

/* MTIOCERRSTAT - テープエラー状態を取得するコマンド用構造体 */
/* 現在は、SCSI テープ用のみサポートされています。 */
struct scsi_tape_errors {
        /*
         * 操作用に 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];
};
/*
 * mt_type バイト用定数。これらの定数は、リストされている
 * タイプと互換性のあるコントローラで同一のものです。
 */
#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 エラー有効 */
/*
 * 32 バイト type 2 構造をフルサポートする SCSI-3 SCC (ストリーム
 * デバイス) がもっと出現するときには、この仕様が対象とする全エンティティ
 * (64 ビットのブロック、論理ファイルレコード番号等) をこれらの ioctl が
 * 扱えるように、再考する必要があるでしょう。
 */
#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
#defineDEFTAPE"/dev/nrsa0"
#endif

#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
#endif /* _SYS_MTIO_H_ */

 

索引

関連ファイル

/dev/[nr]sa*

 

索引

関連項目

mt(1), tar(1), st(4)  

索引

歴史

mtio のマニュアルは BSD 4.2 で登場しました。 i386 バージョンは最初に Fx 2.2 で登場しました。  

索引

バグ

ステータスは、デバイスに依らないフォーマットで返されるように すべきです。

スペシャルファイルの命名については、もっと一貫した分かりやすい 方法でやり直すべきです。


 

索引

Index

名称
解説
関連ファイル
関連項目
歴史
バグ

jman



Time: 07:07:23 GMT, January 12, 2009