.\" Copyright (c) 1996 .\"Mike Pritchard . All rights reserved. .\" .\" Copyright (c) 1983, 1991, 1993 .\"The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\"This product includes software developed by the University of .\"California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)mtio.48.1 (Berkeley) 6/5/93 .\" $FreeBSD$ .\"%Id: mtio.4,v 1.3.2.1 1999/02/05 08:26:30 mjacob Exp % .\" .Dd February 11, 1996 .Dt MTIO 4 i386 .Os FreeBSD 2.2 .Sh 名称 .Nm mtio .Nd .Tn FreeBSD 磁気テープインタフェース .Sh 解説 .Pa /dev/[nr]sa* という名前のスペシャルファイルは、 SCSI テープドライブを表しています。 このドライブは、システムに接続することができます。 .Pa /dev/[nr]sa*.ctl は、コントロールデバイスで、SCSI テープドライバに ioctl システムコールを発行するのに使用できます。 これによって、テープをアンマウントした後も続けて有効にする必要のある パラメータを設定できます。 .Pp 巻き戻し用デバイスは、最後の読み込み、書きこみ、そしてシーク要求が 終了するか、あるいはテープの最後に到達したときに、自動的にテープを 巻き戻します。 通常、巻き戻しを行わないデバイス名には、文字 .Ql n が付けられます。 .Pp テープには、固定長レコードも可変長レコードも書きこむことができます。 さらなる情報を得たい場合は、 .Xr sa 4 を参照してください。テープの最後には、end-of-file マーカが 2 つ付けられ、 テープファイルの末尾には、end-of-file マーカが 1 つ付けられます。 テープが巻き戻されない場合には、テープの位置は 2 つのテープマークの 間に ヘッドがくる所となり、次回の書きこみで 2 つ目の end-of-file マーカ が上書きされることになります。 .Pp 磁気テープデバイスはすべて .Xr mt 1 コマンドで制御されます。 .Pp raw 磁気テープデバイスでは、 .Xr ioctl 2 での操作がいくらか可能です。 以下の宣言は .Aq Pa sys/mtio.h からのものです。 .Bd -literal /* * 磁気テープ 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_ */ .Ed .Pp .Sh 関連ファイル .Bl -tag -width /dev/[nr]sa* -compact .It Pa /dev/[nr]sa* .El .Sh 関連項目 .Xr mt 1 , .Xr tar 1 , .Xr st 4 .Sh 歴史 .Nm mtio のマニュアルは .Bx 4.2 で登場しました。 i386 バージョンは最初に .Fx 2.2 で登場しました。 .Sh バグ ステータスは、デバイスに依らないフォーマットで返されるように すべきです。 .Pp スペシャルファイルの命名については、もっと一貫した分かりやすい 方法でやり直すべきです。