OSDN Git Service

6dac3a774c14dfb65153935df0b0d4fca9dc527d
[linuxjm/LDP_man-pages.git] / release / man4 / st.4
1 .\" Copyright 1995 Robert K. Nichols (Robert.K.Nichols@att.com)
2 .\" Copyright 1999-2005 Kai Mテ、kisara (Kai.Makisara@kolumbus.fi)
3 .\"
4 .\" Permission is granted to make and distribute verbatim copies of this
5 .\" manual provided the copyright notice and this permission notice are
6 .\" preserved on all copies.
7 .\"
8 .\" Permission is granted to copy and distribute modified versions of this
9 .\" manual under the conditions for verbatim copying, provided that the
10 .\" entire resulting derived work is distributed under the terms of a
11 .\" permission notice identical to this one.
12 .\"
13 .\" Since the Linux kernel and libraries are constantly changing, this
14 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
15 .\" responsibility for errors or omissions, or for damages resulting from
16 .\" the use of the information contained herein.  The author(s) may not
17 .\" have taken the same level of care in the production of this manual,
18 .\" which is licensed free of charge, as they might when working
19 .\" professionally.
20 .\"
21 .\" Formatted or processed versions of this manual, if unaccompanied by
22 .\" the source, must acknowledge the copyright and authors of this work.
23 .\"
24 .\" Japanese Version Copyright (c) 1998 ISHIKAWA Mutsumi
25 .\"         all rights reserved.
26 .\" Translated Tue Feb 10 15:09:29 JST 1998
27 .\"     by ISHIKAWA Mutsumi <ishikawa@linux.or.jp>
28 .\" Updated Sun Mar 12 2000 by NAKANO Takeo <nakano@st.seikei.ac.jp>
29 .\" Updated Sun Apr 24 2005 by NAKANO Takeo <nakano@st.seikei.ac.jp
30 .\"
31 .TH ST 4  2010-09-04 "Linux" "Linux Programmer's Manual"
32 .SH 名前
33 st \- SCSI テープデバイス
34 .SH 書式
35 .nf
36 .B #include <sys/mtio.h>
37 .sp
38 .BI "int ioctl(int " fd ", int " request " [, (void *)" arg3 "]);"
39 .BI "int ioctl(int " fd ", MTIOCTOP, (struct mtop *)" mt_cmd );
40 .BI "int ioctl(int " fd ", MTIOCGET, (struct mtget *)" mt_status );
41 .BI "int ioctl(int " fd ", MTIOCPOS, (struct mtpos *)" mt_pos );
42 .fi
43 .SH 説明
44 .B st
45 ドライバーは様々な SCSI テープデバイスのインターフェイスを提供する。
46 現在では、ドライバーは検出された全ての
47 \(lqシーケンシャルアクセス (sequential-access) \(rq タイプのデバイスへの
48 制御を行う。
49 .B st
50 ドライバーはメジャーデバイス番号 9 を用いる。
51 .PP
52 それぞれのデバイスは 8 つのマイナーデバイス番号を使う。
53 マイナー番号の低位側の 5 ビットは、検出された順に割り当てられる。
54 カーネル 2.6 では、
55 低位側 8 ビットよりも上位にあるビット群がこの 5 ビットに連結 (concatenate)
56 され、テーブ番号となる。
57 マイナー番号は、それぞれ 4 つの数字からなる二つのセットに
58 グループ分けされる。
59 基本 (自動巻き戻し) デバイス番号
60 .IR n 、
61 および \(lq非巻き戻し (no-rewind) \(rq デバイス番号
62 .RI ( n " + 128)."
63 である。
64 基本デバイス番号を用いてオープンされたデバイスには、
65 クローズする時に
66 .B REWIND
67 コマンドが送られる。
68 \(lq非巻き戻し\(rq デバイス番号を用いてオープンされた場合は
69 \s-1REWIND\s+1 コマンドは送られない
70 (自動巻き戻しデバイスをテープの位置決めに (例えば mt で) 用いても、
71 望む結果は得られない。テープは mt コマンドの後で巻き戻され、
72 次のコマンドはテープの先頭から始まってしまう)。
73 .PP
74 それぞれのグループで、異なった特性 (ブロックサイズ・圧縮・
75 密度など) のデバイスを定義するために 4 つのマイナー番号が利用できる。
76 システムが起動したときには、最初のデバイスだけが使える。
77 他の 3 つはデフォルトの特性が定義されて初めて使えるようになる (後述)。
78 (コンパイル時の定数を変更することによって、テープドライブの最大数と、
79 それぞれのドライブに割り当てられるマイナー番号の個数とを調整できる。
80 デフォルトの割り当てでは 32 台までのテープドライブを制御できる。
81 例えば 64 台までのテープドライブを、異なったオプションを持つ
82 二つのマイナー番号で制御するようにもできる。)
83 .PP
84 デバイスは普通次のように作られる:
85 .in +4n
86 .nf
87
88 mknod \-m 666 /dev/st0 c 9 0
89 mknod \-m 666 /dev/st0l c 9 32
90 mknod \-m 666 /dev/st0m c 9 64
91 mknod \-m 666 /dev/st0a c 9 96
92 mknod \-m 666 /dev/nst0 c 9 128
93 mknod \-m 666 /dev/nst0l c 9 160
94 mknod \-m 666 /dev/nst0m c 9 192
95 mknod \-m 666 /dev/nst0a c 9 224
96 .fi
97 .in
98 .PP
99 これらには対応するブロックデバイスは存在しない。
100 .PP
101 ドライバは内部バッファを使い、その大きさは少なくともテープの
102 1 ブロックを保持できるように取られる。 2.1.121 以前のカーネルでは、
103 バッファは連続する一つのブロックとして割り当てられる。この方法だと、
104 ブロックサイズの最大値はカーネルの割り当て可能な連続メモリブロックに
105 制限される。この制限は 32 ビットアーキテクチャでは 128 kB、
106 64 ビットアーキテクチャでは 256 kB である。これ以降のカーネルでは、
107 ドライバは必要に応じていくつかにわかれたバッファを割り当てる。
108 デフォルトでは 16 個までの部分に分割できる。すなわち
109 ブロックサイズの最大値は非常に大きい (128 kB のブロック 16 個の
110 割り当てに成功すれば 2 MB となる)。
111 .PP
112 ドライバの内部バッファのサイズはコンパイル時の定数で定義される。
113 これはカーネルの起動時オプションによって上書き可能である。
114 さらにドライバは実行時にも、必要に応じてより大きな一時バッファを
115 割り当てようとする。しかし実行時に大きな連続メモリブロックを
116 割り当てようとすると失敗することがあるので、 2.1.121
117 以前のカーネルでは、動的なバッファ割り当てはあまりあてにしないほうが良い
118 (これは kerneld や kmod によるドライバのデマンドロードに関しても当てはまる)。
119 .PP
120 ドライバはドライブのメーカやモデルを特定してサポートするわけではない。
121 システムが起動すると、テープデバイスのオプションがドライブの
122 ファームウェアによって定義される。例えば、
123 ドライブのファームウェアが固定長ブロックモードを選択すれば、
124 テープデバイスは固定長ブロックモードを使うことになる。このオプションは
125 .BR ioctl (2)
126 コールを明示的に使えば変更でき、
127 その変更はデバイスがクローズされて再びオープンされたときも残る。
128 .\"nakano: 逆か?
129 オプションの設定は、
130 自動巻き戻しデバイスと非巻き戻しデバイスの両方に影響する。
131 .PP
132 4 つのサブグループそれぞれのデバイスに対して異なるオプションを
133 与えることができる。オプションはデバイスがオープンされたときに
134 効力を発揮する。例えば、システム管理者はあるデバイスを
135 適当なブロックサイズの固定長ブロックモードで書き込むように定義し、
136 別のデバイスを可変長ブロックモードで書き込むようにできる (ドライブが
137 両方のモードをサポートしていれば)。
138 .PP
139 このドライバは、
140 .B テープのパーティション
141 をサポートしている (ドライブがサポートしている場合)。
142 (テープのパーティションはディスクパーティションとはなんの関係もない。
143 パーティション化されたテープは、一つのメディアに複数の論理テープが
144 存在するかのように見える。)
145 パーティションのサポートは
146 .BR ioctl (2)
147 によって有効にできる。
148 パーティションが変更されると、
149 テープの位置はそれぞれのパーティション内部で保存される。
150 パーティションの選択は
151 .BR ioctl (2)
152 で行う。
153 それ以降のテープ操作の対象は、そのパーティションになる。
154 パーティションの切り替えは、次のテープ操作と同時に行われ、
155 不必要なテープ移動をしなくてすむようになっている。
156 一つのテープにおけるパーティションの最大数は
157 コンパイル時の定数によって定義される (通常は 4)。
158 ドライバには、テープの 1 つまたは
159 2 つのパーティションをフォーマットできるような
160 .BR ioctl (2)
161 が用意されている。
162 .PP
163 通常、システムのデフォルトのテープデバイスに対するハードリンク
164 またはソフトリンクとして、デバイス
165 .I /dev/tape
166 が作成される。
167 .PP
168 カーネル 2.6.2 以降では、このドライバは sysfs ディレクトリ
169 .I /sys/class/scsi_tape
170 に、アタッチしたデバイスとそのデバイスに割当てたパラメータをエクスポートする。
171 .SS データ転送
172 このドライバは固定長ブロックモードと可変長ブロックモードの
173 両方をサポートしている (ドライブがサポートしていれば)。
174 固定長ブロックモードでは、ドライブは決まったサイズのブロックを
175 (複数個) 書き込む。このブロックサイズは
176 write システムコールのバイト数によらない。
177 可変長ブロックモードでは、
178 write コールごとに一つのテープブロックに書き込みが行われる。
179 したがってバイト数が対応するテープブロックのサイズを決める。
180 テープ上のブロックには、書き込みモードの情報は一切含まれない。
181 読み込みのときに重要なことは、テープのブロックサイズを受け入れる
182 コマンドを使うかどうかだけである。
183 .PP
184 可変長ブロックモードでは、読み込みバイト数はテープのブロックサイズと
185 必ずしも一致していなくても良い。バイト数がテープの次のブロックよりも
186 大きければ、ドライバはそのデータを返し、関数は実際のブロックサイズを返す。
187 ブロックサイズがバイト数よりも大きければ、要求された分のデータが
188 ブロックの先頭から読み込まれて返され、ブロックの残りは破棄される。
189 .PP
190 固定長ブロックモードでは、バッファリングが有効になっていれば
191 読み込みバイト数は任意の大きさでよい。バッファリングが無効の場合は、
192 テープのブロックサイズの整数倍でなければならない。 2.1.121 以前の
193 カーネルでは、バッファリングが有効な場合には
194 任意のバイト数の書き込みができる。その他の場合すべて
195 (2.1.121 以前のカーネルでバッファが無効な場合と、新しいカーネルの場合)
196 では、書き込みバイト数はテープブロックサイズの整数倍でなければならない。
197 .PP
198 2.6 カーネルでは、このドライバはユーザバッファとデバイス間で、
199 データの直接転送 (direct transfer) を試みる。
200 これが不可能な場合は、ドライバの内部バッファを用いる。
201 直接転送ができない理由としては、ユーザバッファのアラインメントが適切でない
202 (デフォルトは 512 バイトだが HBA ドライバによって変更されている可能性がある)、
203 ユーザバッファのページのどれかが SCSI アダプタから見えない、
204 などが考えられる。
205 .PP
206 テープをクローズする直前のテープ操作命令が書き込みであれば、
207 ファイルマークが自動的にテープへ書き込まれる。
208 .PP
209 読み込み時にファイルマークに出会うと、以下が実行される。
210 ファイルマークが見付かったときにバッファにデータが残っていると、
211 バッファのデータが返される。次の読み込み操作は 0 バイトを返す。
212 その次の読み込みは次のファイルからのデータを返す。
213 記録データの末尾は、読み込み操作が二回続けて
214 0 バイトを返して来るかたちで通知される。三回目の読み込みはエラーを返す。
215 .SS ioctl
216 ドライバは 3 つの
217 .BR ioctl (2)
218 要求をサポートしている。
219 .B st
220 ドライバによって認識されなかった要求は
221 .B SCSI
222 ドライバにわたされる。
223 以下の定義は
224 .I /usr/include/linux/mtio.h
225 による。
226 .SS "MTIOCTOP \(em テープ操作の実行"
227 .PP
228 この要求は
229 .I "(struct mtop *)"
230 型の引数をとる。全てのドライブが全ての操作をサポートしているわけではない。
231 ドライブが操作を拒否すると、ドライバは
232 .B EIO
233 エラーを返す。
234 .PP
235 .in +4n
236 .nf
237 /* Structure for MTIOCTOP \- mag tape op command: */
238 struct mtop {
239     short   mt_op;       /* operations defined below */
240     int     mt_count;    /* how many of them */
241 };
242 .fi
243 .in
244 .PP
245 通常のテープ利用のための磁気テープ操作:
246 .TP 14
247 .B MTBSF
248 .I mt_count
249 個のファイルマーク (filemark) 分の後方スペース (backward space)。
250 .TP
251 .B MTBSFM
252 .I mt_count
253 個のファイルマーク分の後方スペース。
254 テープの位置を最後のファイルマークの EOT 側に変更する。
255 .TP
256 .B MTBSR
257 .I mt_count
258 個のレコード (テープブロック) 分の後方スペース。
259 .TP
260 .B MTBSS
261 .I mt_count
262 個のセットマーク分の後方スペース。
263 .TP
264 .B MTCOMPRESSION
265 .I mt_count
266 が 0 以外なら、ドライブのデータ圧縮を有効にする。
267 0 なら圧縮を無効にする。このコマンドは MODE ページ 15 を用いる。
268 これはほとんどの DAT でサポートされている。
269 .TP
270 .B MTEOM
271 (ファイルを追加するために) メディアの記録部分の最後まで進める。
272 .TP
273 .B MTERASE
274 テープの内容を消去する。
275 2.6 カーネルでは、引数が 0 ならば short erase (テープが空だと印をつける)
276 を行う。それ以外の場合は long erase (全体を消去する) を行う。
277 .TP
278 .B MTFSF
279 .I mt_count
280 個のファイルマーク分の前方スペース (forward space)。
281 .TP
282 .B MTFSFM
283 .I mt_count
284 個のファイルマーク分の前方スペース。
285 テープの位置は最後のファイルマークの BOT 側変更される。
286 .TP
287 .B MTFSR
288 .I mt_count
289 個のレコード (テープブロック) 分の前方スペース。
290 .TP
291 .B MTFSS
292 .I mt_count
293 個のセットマーク分の前方スペース。
294 .TP
295 .B MTLOAD
296 SCSI ロードコマンドを実行する。 HP オートローダに限って利用できる。
297 .\"nakano: あってる?
298 .I mt_count
299 が定数
300 .B MT_ST_HPLOADER_OFFSET
301 とある数値の和である場合、
302 その数値がドライブに送られ、オートローダの制御に用いられる。
303 .TP
304 .B MTLOCK
305 テープドライブの扉をロックする。
306 .TP
307 .B MTMKPART
308 テープを 1 または 2 パーティションにフォーマットする。
309 .I mt_count
310 が 0 でなければ、これが最初のパーティションのサイズを与え、
311 二番目のパーティションがテープの残りになる。
312 .I mt_count
313 が 0 の場合は、テープは一つのパーティションとしてフォーマットされる。
314 このコマンドは、パーティションのサポートが有効にされた
315 ドライブでなければ使えない (以下の
316 .B MT_ST_CAN_PARTITIONS
317 を見よ)。
318 .TP
319 .B MTNOP
320 何も操作を行わない。\(em副次的な効果として、ドライバーのバッファ
321 をフラッシュする。
322 .B MTIOCGET
323 を使って状態を読み出す前にはこの操作を行うべきである。
324 .TP
325 .B MTOFFL
326 巻き戻し (rewind) を行い、ドライブをオフライン (off line) にする。
327 .TP
328 .B MTRESET
329 ドライブをリセットする。
330 .TP
331 .B MTRETEN
332 テープをリテンション (re-tension) する
333 (テープを最後まで巻いた後、最初まで巻き戻す)。
334 .TP
335 .B MTREW
336 巻き戻し。
337 .TP
338 .B MTSEEK
339 .I mt_count
340 で指定されたテープブロック番号をシークする。
341 この操作が行えるのは、 \s-1LOCATE\s+1 コマンド (デバイス固有のアドレス)
342 をサポートする SCSI-2 ドライブか、あるいは Tandberg
343 互換の SCSI-1 ドライブ (Tandberg, Archive, Viper, Wangtek,…) である。
344 デバイス固有のアドレスが利用されている場合は、ブロック番号は
345 以前に \s-1MTIOCPOS\s+1 によって返されたものにすべきである。
346 .TP
347 .B MTSETBLK
348 .I mt_count
349 の値をドライブのブロック長 (block length) としてセットする。
350 ブロック長を 0 にするとドライブは可変長ブロックサイズモードにセッ
351 トされる。
352 .TP
353 .B MTSETDENSITY
354 テープ密度 (tape density) を
355 .I mt_count
356 で示されるコードに変更する。ドライブでサポートされている密度コード
357 については、ドライブの文書に書いてあるだろう。
358 .TP
359 .B MTSETPART
360 アクティブなパーティションを第
361 .I mt_count
362 番目に切り替える。パーティションは 0 から数える。
363 このコマンドは、パーティションのサポートが有効にされた
364 ドライブでなければ使えない (以下の
365 .B MT_ST_CAN_PARTITIONS
366 を見よ)。
367 .TP
368 .B MTUNLOAD
369 SCSI unload コマンドを実行する (テープのイジェクトは行わない)。
370 .TP
371 .B MTUNLOCK
372 テープドライブの扉のロックを解除する。
373 .TP
374 .B MTWEOF
375 .I mt_count
376 個のファイルマークを書き込む。
377 .TP
378 .B MTWSM
379 .I mt_count
380 個のセットマークを書き込む。
381 .PP
382 デバイスオプションの設定のための (スーパーユーザによる) 磁気テープ操作:
383 .TP 8
384 .B MTSETDRVBUFFER
385 いろいろなドライブとドライバーのオプションを
386 .I mt_count
387 にエンコードされた各ビットに従って設定する。
388 オプションには、ドライブのバッファリングモード、
389 ブール値のドライバオプションの集合、
390 バッファの書き込み閾値 (デフォルトはブロックサイズと密度)、
391 タイムアウト値が含まれる (カーネル 2.1 以降)。
392 一回の操作で変えられるのは、上記のリストのどれか一つだけである
393 (複数のブール値はまとめて一つと勘定される)。
394 .IP
395 高位の4ビットがゼロである値は、
396 ドライブのバッファリングモードの設定に使われる。
397 バッファリングモードは以下の通り:
398 .RS 12
399 .IP 0 4
400 ドライブはライトコマンドに対し、
401 データブロックが実際に媒体に書き込まれるまで
402 .B GOOD
403 のステータスを返さない。
404 .IP 1
405 ドライブはライトコマンドに対し、
406 すべてのデータがドライブの内部バッファに転送されるとすぐに、
407 .B GOOD
408 のステータスを返すことができる。
409 .IP 2
410 ライトコマンドに対し、以下の 2 つの条件がそろった場合、
411 ドライブはすぐに
412 .B GOOD
413 ステータスを返す事ができる。
414 (a) すべてのデータがドライブの内部バッファに転送された。
415 (b) 別々のイニシエーターから来たバッファデータが、
416 すべて媒体へ問題なく書き込まれた。
417 .RE
418 .IP
419 書き込み閾値を制御するには、
420 .I mt_count
421 には、定数 
422 .B MT_ST_WRITE_THRESHOLD
423 とブロックカウントのビット毎の OR をとった値を
424 下位の 28ビットに含まねばならない。
425 このブロックカウントは 1024 バイトブロックを単位としたもので、
426 テープの物理ブロックサイズを単位としたものではない。
427 また、閾値はドライバの内部バッファ (上記の説明参照)
428 のサイズを越える事はできない。
429 .IP
430 ブール値のフラグを設定・解除するには、
431 .I mt_count
432 の値は
433 .BR MT_ST_BOOLEANS ,
434 .BR MT_ST_SETBOOLEANS ,
435 .BR MT_ST_CLEARBOOLEANS ,
436 .BR MT_ST_DEFBOOLEANS
437 のいずれか一つの値に、以下のオプションの任意の組み合わせに対して
438 ビット毎の OR を取ったものを指定する。
439 .BR MT_ST_BOOLEANS を用いると、
440 オプションを対応するビットに対して定義されている値に設定できる。
441 .BR MT_ST_SETBOOLEANS を用いると、
442 オプションは選択的に設定され、
443 .BR MT_ST_DEFBOOLEANS を用いると
444 選択的に解除される。
445 .IP ""
446 テープデバイスのデフォルトのオプションは
447 .B MT_ST_DEFBOOLEANS
448 によって設定される。
449 アクティブでないテープデバイス (例: マイナー番号 が 32 や 160 のデバイス)
450 は、それらに対するデフォルトのオプションが最初に定義されたときに
451 アクティブになる。アクティブにされたデバイスは、
452 起動時にアクティブにされたデバイスから、
453 明示的に指定されなかったオプションを継承する。
454 .IP ""
455 ブール値のオプションは以下の通り:
456 .RS
457 .TP
458 .BR MT_ST_BUFFER_WRITES " (デフォルト: 真)"
459 固定長ブロックモードにおけるすべての書き込み操作をバッファリングする。
460 このオプションが偽であり、かつドライブが固定長ブロックサイズの時は、
461 すべての書き込み操作はブロックサイズの倍数の大きさで行わなければならない。
462 信頼性のあるマルチボリュームアーカイブを書き込むためには、
463 このオプションは偽に設定されていなければならない。
464 .TP
465 .BR MT_ST_ASYNC_WRITES " (デフォルト: 真)"
466 このオプションが真の時には、データがドライバのバッファに収まる時には
467 データがドライブに転送されるのを待たずに、すぐに書き込み操作が返って来る。
468 バッファがどのくらい空いたら次の SCSI write コマンドを発行できるかは、
469 書き込み閾値によって決まる。
470 ドライブが返すすべてのエラーは、次の操作まで保存される。
471 信頼性のあるマルチボリュームアーカイブを書き込むためには、
472 このオプションは偽に設定されていなければならない。
473 .TP
474 .BR MT_ST_READ_AHEAD " (デフォルト: 真)"
475 このオプションを指定すると、
476 ドライバは固定長ブロックモードで読み込みバッファリングと先読みをするようになる。
477 このオプションが偽であり、かつドライブが固定長ブロックサイズの時は、
478 すべての読み込み操作はブロックサイズの倍数の大きさで行わなければならない。
479 .TP
480 .BR MT_ST_TWO_FM " (デフォルト: 偽)"
481 このオプションはファイルがクローズされた時のドライバーの振舞いを変更する。
482 一つのファイルマークを書き込むのが通常の動作である。
483 このオプションが真の時には、
484 ドライバーは 2 つのファイルマークを書き込んで、
485 2 つめのファイルマークのところに戻る。
486 .IP
487 注意:
488 QICテープドライブはファイルマークに上書きすることができないので、
489 このオプションを真にしてはならない。
490 これらのドライブは記録データの末尾の検知に、
491 ファイルマークが 2つ続けてあるかではなく、
492 ブランクテープかどうかのテストを用いる。
493 現在の他のほとんどのドライブも、記録データの末尾を検知する。
494 2 つのファイルマークが必要になるのは、
495 他のシステムとテープをやりとりする場合である。
496 .TP
497 .BR MT_ST_DEBUGGING " (デフォルト: 偽)"
498 このオプションを真にすると、
499 ドライバはいろいろなデバッグ用メッセージを出すようになる
500 .RB ( DEBUG
501 を非ゼロに定義してドライバをコンパイルしている時のみ有効)。
502 .TP
503 .BR MT_ST_FAST_EOM " (デフォルト: 偽)"
504 このオプションを真にすると、
505 .B MTEOM
506 操作が直接ドライブに送られるようになる。
507 操作が早くなるはずだが、
508 ドライバが現在のファイル番号を見失うことになる
509 (これは通常なら
510 .B MTIOCGET
511 リクエストによって返される)。
512 .B MT_ST_FAST_EOM
513 が偽の時には、ドライバは
514 .B MTEOM
515 リクエストに応えるとき、前方にファイルを一つ一つ進めていく。
516 .TP
517 .BR MT_ST_AUTO_LOCK " (デフォルト: 偽)"
518 このオプションが真の時には、
519 デバイスがオープンされるとドライブの扉がロックされ、
520 クローズされるとアンロックされる。
521 .TP
522 .BR MT_ST_DEF_WRITES " (デフォルト: 偽)"
523 テープオプション (ブロックサイズ、モード、圧縮など)
524 があるドライブにリンクされたデバイスで変更されると、
525 その同じドライブにリンクされた他のデバイスでも変更されることがある
526 (そのデバイスの定義による)。このオプションは、
527 ドライバによる変更をいつ SCSI コマンドによって反映させるかと、
528 ドライブの自動検知機能がいつ信頼して良いのかを定義する。
529 このオプションを偽にしておくと、
530 デバイスの変更があるとドライバはすぐに SCSI コマンドを送る。
531 真にしておくと、 SCSI コマンドは書き込みが要求されるまで送られない。
532 後者の場合は、読み込みの際にドライブのファームウェアによって
533 テープ構造の検知が行える。また SCSI コマンドは、
534 テープが正しい指定に沿って書き込まれているかどうかの
535 確認のためだけに用いられる。
536 .TP
537 .BR MT_ST_CAN_BSR " (デフォルト: 偽)"
538 先読みを使うと、テープをクローズするときに、
539 場合によってはテープを正しい位置に逆戻ししなければならないことがある。
540 これには、レコードを越えて逆戻しする SCSI コマンドが用いられる。
541 古いドライブでは、このコマンド処理の信頼性が低いことがあるが、
542 このオプションを指定すると、
543 ドライバにこのコマンドの利用を禁止することができる。
544 先読みと固定長ブロックモードを用いていると、最終的な結果として、
545 デバイスのクローズ時にテープが正しい位置にならないことがある。
546 .\"nakano そうか?
547 2.6 カーネルでは、SCSI-3 をサポートしているドライブに対して、
548 この値のデフォルトは真となる。
549 .TP
550 .BR MT_ST_NO_BLKLIMS " (デフォルト: 偽)"
551 ドライブによっては
552 .B READ BLOCK LIMITS SCSI
553 コマンドを受けつけないことがある。
554 このオプションを用いると、ドライバはこのコマンドを用いない。
555 欠点は、指定したブロックサイズがドライブに受理されてしまうと、
556 ドライバのコマンド送信前チェックができなくなる点である。
557 .TP
558 .BR MT_ST_CAN_PARTITIONS " (デフォルト: 偽)"
559 このオプションは、一つのテープに複数パーティションを置くことを
560 サポートするかどうかを決める。
561 このオプションはドライブにリンクされた全てのデバイスに適用される。
562 .TP
563 .TP MT_ST_SCSI2LOGICAL " (デフォルト: 偽)"
564 このオプションは、
565 seek および tell 操作 (両者とも
566 .BR MTSEEK ・ MTIOCPOS
567 コマンドを伴い、テープ位置を変更するとき) の際に、
568 SCSI-2 の標準で定義されている論理ブロックアドレスを用いるかどうかを
569 ドライバに伝える。
570 .\"nakano both with の部分怪しい。
571 偽だとデバイス固有のアドレスが用いられる。
572 ドライブが論理アドレスをサポートしているときは、
573 このオプションをセットすることを強く勧める。
574 このモードではファイルマークもカウントするからである。
575 論理ブロックアドレスしかサポートしないドライブもいくつか存在している。
576 .TP
577 .BR MT_ST_SYSV " (デフォルト: 偽)"
578 このオプションが真になっていると、テープデバイスは
579 SystemV のルールを用いる。偽だと BSD のルールを用いる。
580 .\"nakano: semantics → ルール はちと違うか?
581 これらのルール間の最も大きな違いは、読み込みを行っていた
582 デバイスがクローズされたときの振舞いである。
583 System V のルールでは、テープは次のファイルマークを越えて移動する
584 (デバイスの利用時にこれが行われなかった場合)。
585 BSD のルールではテープ位置は変更されない。
586 .TP
587 .BR MT_NO_WAIT " (デフォルト: 偽)"
588 即時モード (immediate mode; コマンドの終了を待たない)
589 を、ある種のコマンド (rewind など) に対して有効にする。
590 .PP
591 例:
592 .in +4n
593 .nf
594
595 struct mtop mt_cmd;
596 mt_cmd.mt_op = MTSETDRVBUFFER;
597 mt_cmd.mt_count = MT_ST_BOOLEANS |
598         MT_ST_BUFFER_WRITES | MT_ST_ASYNC_WRITES;
599 ioctl(fd, MTIOCTOP, mt_cmd);
600 .fi
601 .in
602 .RE
603 .IP ""
604 デバイスのデフォルトのブロックサイズは
605 .B MT_ST_DEF_BLKSIZE
606 によって設定でき、デフォルトの密度コードは
607 .B MT_ST_DEFDENSITY
608 によって設定できる。
609 これらのパラメータの値は操作コードと OR して与える。
610 .IP ""
611 2.1.x 以降のカーネルでは、タイムアウト値の設定は、
612 サブコマンド
613 .B MT_ST_SET_TIMEOUT
614 に秒単位のタイムアウト値を
615 OR して与えることによって行える。 long タイムアウト
616 (巻き戻しなど、長い時間がかかるコマンドに対して用いられる) は
617 .B MT_ST_SET_LONG_TIMEOUT
618 で設定できる。
619 カーネルのデフォルトは非常に長く、どのドライブでも
620 成功しているコマンドが決してタイムアウトしないようになっている。
621 したがって、ドライバはタイムアウトを待っているだけなのに、
622 刺さった (stuck した) ように見えることがある。これらのコマンドを使えば、
623 特定のドライブに対してもう少し実際的な値に設定することができる。
624 一つのデバイスに設定したタイムアウト値は、
625 それと同じドライブにリンクした全てのデバイスに適用される。
626 .IP ""
627 2.4.19 および 2.5.43 以降のカーネルでは、
628 このドライバはドライブのクリーニングが必要かどうかを示す
629 状態ビットをサポートする。
630 ドライブがクリーニング情報を返させるかどうかは、
631 .B MT_ST_SEL_CLN
632 サブコマンドによって設定できる。
633 この値が 0 だと、クリーニングビットは常に 0 となる。
634 値を 1 にすると、SCSI-3 標準で規定されている
635 TapeAlert データが用いられる (まだ実装されていない)
636 値としては 2 から 17 が予約されている。
637 低位側の 8 ビットが 18 以上だと、拡張状態データ (extended sense data)
638 が用いられる。第 9-16 ビットは注目すべきビットを選択するためのマスクを指定し、
639 第 17-23 ビットは探すべきビットパターンを指定する。
640 このビットパターンが 0 のときは、
641 マスク下のビット (群) がクリーニング要求を示す。パターンが 0 でなければ、
642 このパターンがマスク後の状態データバイトにマッチしなければならない。
643 .SS "MTIOCGET \(em ステータスの取得"
644 .PP
645 このリクエストは
646 .IR "(struct mtget *)"
647 という型の引数をとる。
648 .PP
649 .in +4n
650 .nf
651 /* structure for MTIOCGET \- mag tape get status command */
652 struct mtget {
653     long     mt_type;
654     long     mt_resid;
655     /* the following registers are device dependent */
656     long     mt_dsreg;
657     long     mt_gstat;
658     long     mt_erreg;
659     /* The next two fields are not always used */
660     daddr_t  mt_fileno;
661     daddr_t  mt_blkno;
662 };
663 .fi
664 .in
665 .IP \fImt_type\fP 11
666 ヘッダファイル中には多くの
667 .I mt_type
668 の値が定義されているが、現行のドライバは汎用のタイプである
669 .B MT_ISSCSI1
670 (汎用 SCSI-1 テープ) および
671 .B MT_ISSCSI2
672 (汎用 SCSI-2 テープ) のみを返す。
673 .IP \fImt_resid\fP
674 現在のテープ位置番号。
675 .IP \fImt_dsreg\fP
676 ドライブのブロックサイズと密度の現在の設定を報告する
677 (下位 24 ビットがブロックサイズ、上位 8 ビットが密度)。
678 これらのフィールドは、
679 .BR MT_ST_BLKSIZE_SHIFT ,
680 .BR MT_ST_BLKSIZE_MASK ,
681 .BR MT_ST_DENSITY_SHIFT ,
682 .BR MT_ST_DENSITY_MASK
683 で定義されている。
684 .IP \fImt_gstat\fP
685 汎用の (デバイスに依存しない) ステータスを報告する。
686 これらのステータスビットをテストするためのマクロが
687 ヘッダファイルで定義されている。
688 .RS
689 .HP 4
690 \fBGMT_EOF\fP(\fIx\fP):
691 テープはファイルマークの直後に位置している。
692 .RB ( MTSEEK
693 操作の後では常に偽)
694 .HP
695 \fBGMT_BOT\fP(\fIx\fP):
696 テープは最初のファイルの先頭に位置している。
697 .RB ( MTSEEK
698 操作の後では常に偽)
699 .HP
700 \fBGMT_EOT\fP(\fIx\fP):
701 テープ操作はテープの物理的な終点に達した。
702 .HP
703 \s-1GMT_SM(\s+1\fIx\fP\s-1)\s+1:
704 テープは現在セットマークに位置している。
705 .RB ( MTSEEK
706 操作の後では常に偽)
707 .HP
708 \fBGMT_EOD\fP(\fIx\fP):
709 テープは記録データの末尾に位置している。
710 .HP
711 \fBGMT_WR_PROT\fP(\fIx\fP):
712 ドライブはライトプロテクトされている。
713 これはドライブによっては、
714 ドライブが現在のメディアタイプへの書き込みを
715 サポートしていない事を意味する場合もある。
716 .HP
717 \fBGMT_ONLINE\fP(\fIx\fP):
718 もっとも最近の
719 .BR open (2)
720 が、テープが入っていて操作の準備ができているドライブを検知した。
721 .HP
722 \fBGMT_D_6250\fP(\fIx\fP), \fBGMT_D_1600\fP(\fIx\fP), \fBGMT_D_800\fP(\fIx\fP):
723 この「汎用」のステータス情報は、
724 9-トラック \(12" テープドライブの場合にのみ、
725 現在の密度の設定を報告する。
726 .HP
727 \fBGMT_DR_OPEN\fP(\fIx\fP):
728 ドライブにテープが入っていない。
729 .HP
730 \fBGMT_IM_REP_EN\fP(\fIx\fP):
731 即時報告モード。 write コールが戻ったとき、
732 テープに対して物理的な書き込みが行われたかどうかを保証できない場合に、
733 このビットがセットされる。ドライバがデータをバッファリングせず、
734 ドライブもデータをバッファリングしない場合に限って、
735 この値は 0 にセットされる。
736 .HP
737 \fBGMT_CLN\fP(\fIx\fP):
738 ドライブがクリーニングを要求している。
739 カーネル 2.4.19 および 2.5.43 以降で実装された。
740 .RE
741 .IP \fImt_erreg\fP
742 .I mt_erreg
743 で定義されているフィールドは一つだけで、
744 下位の 16 ビットがエラーをリカバーした回数である
745 .RB ( MT_ST_SOFTERR_SHIFT
746
747 .B MT_ST_SOFTERR_MASK
748 で定義されている)。
749 ドライブの報告するエラーリカバー数と矛盾することがあるので、
750 この数はほとんどの場合維持されない
751 (ほとんどのドライブでは、デフォルトではソフトエラーを報告しない。
752 しかしこれは SCSI MODE SELECT コマンドによって変更できる)。
753 .IP \fImt_fileno\fP
754 (ゼロから数えた) 現在のファイル番号を報告する。
755 ファイル番号がわからない時 (例えば
756 .B MTBSS
757
758 .B MTSEEK
759 の後など) には \-1 にセットされる。
760 .IP \fImt_blkno\fP
761 現在のファイル中の(ゼロから数えた)ブロック番号を報告する。
762 ブロック番号がわからない時 (例えば
763 .BR MTBSF ,
764 .BR MTBSS ,
765 .BR MTSEEK
766 の後など) には \-1 にセットされる。
767 .PD
768 .SS "MTIOCPOS \(em テープ位置の取得"
769 .PP
770 このリクエストは
771 .I "(struct mtpos *)"
772 型の引数をとり、ドライブが保持している現在のテープブロック番号を報告する。
773 これは、
774 .B MTIOCGET
775 により返される
776 .I mt_blkno
777 と同じではない。
778 ドライブは
779 .B "READ POSITION"
780 コマンド (デバイス固有アドレス)
781 をサポートする SCSI-2ドライブか、
782 Tandberg 互換の SCSI-1 ドライブ
783 (Tandberg, Archive, Viper, Wangtek, ... ) でなければならない。
784 .PP
785 .in +4n
786 .nf
787 /* structure for MTIOCPOS \- mag tape get position command */
788 struct mtpos {
789     long mt_blkno;    /* current block number */
790 };
791 .fi
792 .in
793 .SH 返り値
794 .TP 14
795 .TP
796 .B EACCES
797 書き込み保護されているテープに書き込みまたは消去を行おうとした。
798 (このエラーは
799 .BR open (2)
800 中には検知されない。)
801 .TP
802 .B EBUSY
803 デバイスがすでに使われているか、
804 ドライバがバッファを割当てられなかった。
805 .TP
806 .B EFAULT
807 コマンドの引数が、
808 呼びだしプロセスに属していないメモリ位置を指している。
809 .TP
810 .B EINVAL
811 .BR ioctl (2)
812 の引数が不正であるか、要求したブロックサイズが不正。
813 .TP
814 .B EIO 14
815 要求された操作が最後まで行えなかった。
816 .TP
817 .B ENOMEM
818 .BR read (2)
819 のバイト数が、テープにある次の物理ブロックより小さい
820 (2.2.18 および 2.4.0-test6 以前では、黙って余分のバイトを無視していた)。
821 .TP
822 .B ENOSPC
823 メディアの終点に達したため、書き込み操作が完了しなかった。
824 .TP
825 .B ENOSYS
826 不明な
827 .BR ioctl (2)。
828 .TP
829 .B ENXIO
830 オープンする時にテープデバイスが存在しなかった。
831 .TP
832 .B EOVERFLOW
833 ドライバの内部バッファより大きいサイズの可変長ブロックを
834 読み書きしようとした。
835 .TP
836 .B EROFS
837 ドライブに入っているテープがライトプロテクトされている場合に、
838 .B O_WRONLY
839 または
840 .B O_RDWR
841 で open を行おうとした。
842 .SH ファイル
843 .TP 12
844 .I /dev/st*
845 自動巻き戻しの SCSI テープデバイス。
846 .TP 12
847 .I /dev/nst*
848 巻き戻しをしない SCSI テープデバイス。
849 .\" .SH 著者
850 .\" このドライバは
851 .\" Dwayne Forsyth の書いたドライバをもとにして
852 .\" Kai M\(:akisara (Kai.Makisara@metla.fi) が書いた。
853 .\" 他にも何人かの人々がこのドライバに貢献してきた。
854 .SH 注意
855 .IP 1. 4
856 異なるシステムでデータを相互にやりとりする場合、
857 両方のシステムで物理的なテープブロックサイズを一致させる必要がある。
858 起動直後のドライブのパラメータは、大多数の OS がそのデバイスに対して
859 用いている値と異なっていることもよくある。多くのシステムは、
860 ドライブが対応していれば可変長ブロックモードを用いる。 DAT、
861 8mm ヘリカルスキャンドライブ、 DLT などの最近のドライブの
862 ほとんどは可変長ブロックモードに対応しているから。
863 これらのドライブは (少なくとも他のシステムとのデータ交換が
864 ある場合は)、 Linux でも可変長ブロックモードで使うほうが
865 良いかもしれない (つまりシステムの起動時のモード設定に
866 .B MTSETBLK
867 または
868 .B MTSETDEFBLK
869 を用いる)。
870 欠点としては、比較的大きなテープブロックサイズを用いなければ、
871 SCSI バス上で満足のいく転送速度が得られないことである。
872 .IP 2.
873 多くのプログラム
874 .RB ( tar (1)
875 など) では、
876 コマンドラインからユーザがブロック関連の値を指定できる。
877 この値によってテープ上の物理的なブロックサイズを決定できるのは、
878 可変長ブロックモードに限られることに注意。
879 .IP 3.
880 SCSI テープドライブを用いるには、基本の SCSI ドライバ、
881 SCSI アダプタのドライバ、 SCSI テープドライバのすべてが
882 カーネルに組み込まれているか、あるいはモジュールとしてロードされている
883 必要がある。 SCSI テープドライバがないと、
884 ドライブは認識されるが、
885 このページで記述されているテープのサポートは利用できない。
886 .IP 4.
887 ドライバはエラーメッセージをコンソールとログとに書き出す。
888 カーネル設定で verbose SCSI messages が有効にされていると、
889 SENSE コードが自動的にテキストに変換されて、
890 いくつかのメッセージに書きだされる。
891 .IP 5.
892 このドライバの内部バッファリングは、固定ブロックモードなら
893 .BR read (2)
894
895 .BR write (2)
896 のバイト数が小さくても良いスループットを出す。
897 直接転送ではこれは不可能なので、2.6 カーネルに移行したときに驚くかもしれない。
898 解決法としては、ソフトウェアにより大きな転送を行うよう伝える
899 (たいていはより大きなブロックを使わせる) ことである。
900 これが不可能なら、直接転送を無効にすることもできる。
901 .\" .SH 著作権
902 .\" Copyright \(co 1995 Robert K. Nichols.
903 .\" .br
904 .\" Copyright \(co 1999-2005 Kai M\(:akisara.
905 .\" .PP
906 .\" Permission is granted to make and distribute verbatim copies of this
907 .\" manual provided the copyright notice and this permission notice are
908 .\" preserved on all copies.
909 .\" Additional permissions are contained in the header of the source file.
910 .SH 関連項目
911 .BR mt (1)
912 .PP
913 カーネルソースの
914 .I drivers/scsi/README.st
915
916 .I Documentation/scsi/st.txt
917 (カーネル 2.6 以降) の各ファイルには、
918 ドライバに関するより新しい情報や、
919 その設定可能な範囲に関する内容が含まれている。