Print this page
12315 errors in section 7i of the manual
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/man/man7i/mtio.7i
+++ new/usr/src/man/man7i/mtio.7i
1 1 .\" Copyright (c) 2008, Sun Microsystems, Inc. All Rights Reserved
2 2 .\" Copyright 2018, Joyent, Inc.
3 3 .\" The contents of this file are subject to the terms of the
4 4 .\" Common Development and Distribution License (the "License").
5 5 .\" You may not use this file except in compliance with the License.
6 6 .\"
↓ open down ↓ |
6 lines elided |
↑ open up ↑ |
7 7 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
8 8 .\" or http://www.opensolaris.org/os/licensing.
9 9 .\" See the License for the specific language governing permissions
10 10 .\" and limitations under the License.
11 11 .\"
12 12 .\" When distributing Covered Code, include this CDDL HEADER in each
13 13 .\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
14 14 .\" If applicable, add the following below this CDDL HEADER, with the
15 15 .\" fields enclosed by brackets "[]" replaced with your own identifying
16 16 .\" information: Portions Copyright [yyyy] [name of copyright owner]
17 -.Dd August 31, 2018
17 +.Dd February 17, 2020
18 18 .Dt MTIO 7I
19 19 .Os
20 20 .Sh NAME
21 21 .Nm mtio
22 22 .Nd general magnetic tape interface
23 23 .Sh SYNOPSIS
24 24 .In sys/types.h
25 25 .In sys/ioctl.h
26 26 .In sys/mtio.h
27 27 .Sh DESCRIPTION
28 28 1/2", 1/4", 4mm, and 8mm magnetic tape drives all share the same general
29 29 character device interface.
30 30 .Pp
31 31 There are two types of tape records: data records and end-of-file (EOF)
32 32 records.
33 33 .Sy EOF
34 34 records are also known as tape marks and file marks.
35 35 A record is separated by interrecord (or tape) gaps on a tape.
36 36 .Pp
37 37 End-of-recorded-media (EOM) is indicated by two
38 38 .Sy EOF
39 39 marks on 1/2\(dq tape; by one
40 40 .Sy EOF
41 41 mark on 1/4\(dq, 4mm, and 8mm cartridge tapes.
42 42 .Ss "1/2\(dq Reel Tape"
43 43 Data bytes are recorded in parallel onto the 9-track tape.
44 44 Since it is a
45 45 variable-length tape device, the number of bytes in a physical record may vary.
46 46 .Pp
47 47 The recording formats available (check specific tape drive) are 800
48 48 .Sy BPI ,
49 49 1600
50 50 .Sy BPI ,
51 51 6250
52 52 .Sy BPI ,
53 53 and data compression.
54 54 Actual storage capacity is a function of the recording format and the length of the tape reel.
55 55 For example, using a 2400 foot tape, 20 Mbyte can be stored using 800
56 56 .Sy BPI ,
57 57 40 Mbyte using 1600
58 58 .Sy BPI ,
59 59 140 Mbyte using 6250
60 60 .Sy BPI ,
61 61 or up to 700 Mbyte using data compression.
62 62 .Ss "1/4\(dq Cartridge Tape"
63 63 Data is recorded serially onto 1/4\(dq cartridge tape.
64 64 The number of bytes per
65 65 record is determined by the physical record size of the device.
66 66 The I/O request
67 67 size must be a multiple of the physical record size of the device.
68 68 For
69 69 .Sy QIC-11 ,
70 70 .Sy QIC-24 ,
71 71 and
72 72 .Sy QIC-150
73 73 tape drives, the block size is 512 bytes.
74 74 .Pp
75 75 The records are recorded on tracks in a serpentine motion.
76 76 As one track is
77 77 completed, the drive switches to the next and begins writing in the opposite
78 78 direction, eliminating the wasted motion of rewinding.
79 79 Each file, including the last, ends with one file mark.
80 80 .Pp
81 81 Storage capacity is based on the number of tracks the drive is capable of
82 82 recording.
83 83 For example, 4-track drives can only record 20 Mbyte of data on a
84 84 450 foot tape; 9-track drives can record up to 45 Mbyte of data on a tape of
85 85 the same length.
86 86 .Sy QIC-11
87 87 is the only tape format available for 4-track
88 88 tape drives.
89 89 In contrast, 9-track tape drives can use either
90 90 .Sy QIC-24
91 91 or
92 92 .Sy QIC-11 .
93 93 Storage capacity is not appreciably affected by using either format.
94 94 .Sy QIC-24
95 95 is preferable to
96 96 .Sy QIC-11
97 97 because it records a
98 98 reference signal to mark the position of the first track on the tape, and each
99 99 block has a unique block number.
100 100 .Pp
101 101 The
102 102 .Sy QIC-150
103 103 tape drives require
104 104 .Sy DC-6150
105 105 (or equivalent) tape cartridges for writing.
106 106 However, they can read other tape cartridges in
107 107 .Sy QIC-11 ,
108 108 .Sy QIC-24 ,
109 109 or
110 110 .Sy QIC-120
111 111 tape formats.
112 112 .Ss "8mm Cartridge Tape"
113 113 Data is recorded serially onto 8mm helical scan cartridge tape.
114 114 Since it is a
115 115 variable-length tape device, the number of bytes in a physical record may
116 116 vary.
117 117 The recording formats available (check specific tape drive) are standard
118 118 2Gbyte, 5Gbyte, and compressed format.
119 119 .Ss "4mm DAT Tape"
120 120 Data is recorded either in Digital Data Storage (DDS) tape format or in Digital
121 121 Data Storage, Data Compressed (DDS-DC) tape format.
122 122 Since it is a
123 123 variable-length tape device, the number of bytes in a physical record may vary.
124 124 The recording formats available are standard 2Gbyte and compressed format.
125 125 .Ss "Persistent Error Handling"
126 126 Persistent error handling is a modification of the current error handling
127 127 behaviors, BSD and SVR4.
128 128 With persistent error handling enabled, all tape
129 129 operations after an error or exception will return immediately with an error.
130 130 Persistent error handling can be most useful with asynchronous tape operations
131 131 that use the
132 132 .Xr aioread 3C
133 133 and
134 134 .Xr aiowrite 3C
135 135 functions.
136 136 .Pp
137 137 To enable persistent error handling, the ioctl
138 138 .Dv MTIOCPERSISTENT
139 139 must be issued.
140 140 If this ioctl succeeds, then persistent error handling is enabled and
141 141 changes the current error behavior.
142 142 This ioctl will fail if the device driver
143 143 does not support persistent error handling.
144 144 .Pp
145 145 With persistent error handling enabled, all tape operations after an exception
146 146 or error will return with the same error as the first command that failed; the
147 147 operations will not be executed.
148 148 An exception is some event that might stop
149 149 normal tape operations, such as an End Of File (EOF) mark or an End Of Tape
150 150 (EOT) mark.
151 151 An example of an error is a media error.
152 152 The
153 153 .Dv MTIOCLRERR
154 154 ioctl must be issued to allow normal tape operations to continue and to clear
155 155 the error.
156 156 .Pp
157 157 Disabling persistent error handling returns the error behavior to normal SVR4
158 158 error handling, and will not occur until all outstanding operations are
↓ open down ↓ |
131 lines elided |
↑ open up ↑ |
159 159 completed.
160 160 Applications should wait for all outstanding operations to complete
161 161 before disabling persistent error handling.
162 162 Closing the device will also
163 163 disable persistent error handling and clear any errors or exceptions.
164 164 .Pp
165 165 The
166 166 .Sx Read Operation
167 167 and
168 168 .Sx Write Operation
169 -subsections contain more pertinent information reguarding persistent error handling.
169 +subsections contain more pertinent information regarding persistent error handling.
170 170 .Ss "Read Operation"
171 171 The
172 172 .Xr read 2
173 173 function reads the next record on the tape.
174 174 The record size is passed back as the number of bytes read, provided it is not
175 175 greater than the number requested.
176 176 When a tape mark or end of data is read, a zero byte count is
177 177 returned; all successive reads after the zero read will return an error and
178 178 .Va errno
179 179 will be set to
180 180 .Er EIO .
181 181 To move to the next file, an
182 182 .Dv MTFSF
183 183 ioctl can be issued before or after the read causing the error.
184 184 This error
185 185 handling behavior is different from the older
186 186 .Sy BSD
187 187 behavior, where another read will fetch the first record of the next tape file.
188 188 If the
189 189 .Sy BSD
190 190 behavior is required, device names containing the letter
191 191 .Ql b
192 192 (for
193 193 .Sy BSD
↓ open down ↓ |
14 lines elided |
↑ open up ↑ |
194 194 behavior) in the final component should be used.
195 195 If persistent error handling
196 196 was enabled with either the BSD or SVR4 tape device behavior, all operations
197 197 after this read error will return
198 198 .Er EIO
199 199 errors until the
200 200 .Dv MTIOCLRERR
201 201 ioctl is issued.
202 202 An
203 203 .Dv MTFSF
204 -ioctl can then he issued.
204 +ioctl can then be issued.
205 205 .Pp
206 206 Two successful successive reads that both return zero byte counts indicate
207 207 .Sy EOM
208 208 on the tape.
209 209 No further reading should be performed past the
210 210 .Sy EOM .
211 211 .Pp
212 212 Fixed-length I/O tape devices require the number of bytes read to be a multiple
213 213 of the physical record size.
214 214 For example, 1/4\(dq cartridge tape devices only read
215 215 multiples of 512 bytes.
216 216 If the blocking factor is greater than 64,512 bytes
217 217 (minphys limit), fixed-length I/O tape devices read multiple records.
218 218 .Pp
219 219 Most tape devices which support variable-length I/O operations may read a range
220 220 of 1 to 65,535 bytes.
221 221 If the record size exceeds 65,535 bytes, the driver reads
222 222 multiple records to satisfy the request.
223 223 These multiple records are limited to
224 224 65,534 bytes.
225 225 Newer variable-length tape drivers may relax the above limitation
226 226 and allow applications to read record sizes larger than 65,534.
227 227 Refer to the
228 228 specific tape driver man page for details.
229 229 .Pp
230 230 Reading past logical
231 231 .Sy EOT
232 232 is transparent to the user.
233 233 A read operation
234 234 should never hit physical EOT.
235 235 .Pp
236 236 Read requests that are lesser than a physical tape record are not allowed.
237 237 Appropriate error is returned.
238 238 .Ss "Write Operation"
239 239 The
240 240 .Xr write 2
241 241 function writes the next record on the tape.
242 242 The record has
243 243 the same length as the given buffer.
244 244 .Pp
245 245 Writing is allowed on 1/4" tape at either the beginning of tape or after the
246 246 last written file on the tape.
247 247 With the Exabyte 8200, data may be appended only
248 248 at the beginning of tape, before a filemark, or after the last written file on
249 249 the tape.
250 250 .Pp
251 251 Writing is not so restricted on 1/2\(dq, 4mm, and the other 8mm cartridge tape
252 252 drives.
253 253 Care should be used when appending files onto 1/2\(dq reel tape devices,
254 254 since an extra file mark is appended after the last file to mark the
255 255 .Sy EOM .
256 256 This extra file mark must be overwritten to prevent the creation of a null file.
257 257 To facilitate write append operations, a space to the
258 258 .Sy EOM
259 259 ioctl is provided.
260 260 Care should be taken when overwriting records; the erase head is just
261 261 forward of the write head and any following records will also be erased.
262 262 .Pp
263 263 Fixed-length I/O tape devices require the number of bytes written to be a
264 264 multiple of the physical record size.
265 265 For example, 1/4\(dq cartridge tape devices
266 266 only write multiples of 512 bytes.
267 267 .Pp
268 268 Fixed-length I/O tape devices write multiple records if the blocking factor is
269 269 greater than 64,512 bytes (minphys limit).
270 270 These multiple writes are limited to
271 271 64,512 bytes.
272 272 For example, if a write request is issued for 65,536 bytes using
273 273 a 1/4\(dq cartridge tape, two writes are issued; the first for 64,512 bytes and
274 274 the second for 1024 bytes.
275 275 .Pp
276 276 Most tape devices which support variable-length I/O operations may write a
277 277 range of 1 to 65,535 bytes.
278 278 If the record size exceeds 65,535 bytes, the driver
279 279 writes multiple records to satisfy the request.
280 280 These multiple records are
281 281 limited to 65,534 bytes.
282 282 As an example, if a write request for 65,540 bytes is
283 283 issued, two records are written; one for 65,534 bytes followed by another
284 284 record for 6 bytes.
285 285 Newer variable-length tape drivers may relax the above
286 286 limitation and allow applications to write record sizes larger than 65,534.
287 287 effer to the specific tape driver man page for details.
288 288 .Pp
289 289 When logical
290 290 .Sy EOT
291 291 is encountered during a write, that write operation
292 292 completes and the number of bytes successfully transferred is returned (note
293 293 that a 'short write' may have occurred and not all the requested bytes would
294 294 have been transferred.
295 295 The actual amount of data written will depend on the
296 296 type of device being used).
297 297 The next write will return a zero byte count.
298 298 A third write will successfully transfer some bytes (as indicated by the
299 299 returned byte count, which again could be a short write); the fourth will
300 300 transfer zero bytes, and so on, until the physical
301 301 .Sy EOT
302 302 is reached and all writes will
303 303 fail with
304 304 .Er EIO .
305 305 .Pp
306 306 When logical
307 307 .Sy EOT
308 308 is encountered with persistent error handling enabled,
309 309 the current write may complete or be a short write.
310 310 The next write will return a zero byte count.
311 311 At this point an application should act appropriately for
312 312 end of tape cleanup or issue yet another write, which will return the error
313 313 .Er ENOSPC .
314 314 After clearing the exception with
315 315 .Dv MTIOCLRERR ,
316 316 the next write will succeed (possibly short), followed by another zero byte
317 317 write count, and then another
318 318 .Er ENOSPC
319 319 error.
320 320 .Pp
321 321 Allowing writes after
322 322 .Sy EOT
323 323 has been encountered enables the flushing of buffers.
324 324 However, it is strongly recommended to terminate the writing and close
325 325 the file as soon as possible.
326 326 .Pp
327 327 Seeks are ignored in tape I/O.
328 328 .Ss "Close Operation"
329 329 Magnetic tapes are rewound when closed, except when the "no-rewind" devices
330 330 have been specified.
331 331 The names of no-rewind device files use the letter
332 332 .Ql n
333 333 as the end of the final component.
334 334 The no-rewind version of
335 335 .Pa /dev/rmt/0l
336 336 is
337 337 .Pa /dev/rmt/0ln .
338 338 In case of error for a no-rewind device, the next open rewinds the device.
339 339 .Pp
340 340 If the driver was opened for reading and a no-rewind device has been specified,
341 341 the close advances the tape past the next filemark (unless the current file
342 342 position is at
343 343 .Sy EOM ) ,
344 344 leaving the tape correctly positioned to read the first record of the next file.
345 345 However, if the tape is at the first record of a
346 346 file it doesn't advance again to the first record of the next file.
347 347 These semantics are different from the older
348 348 .Sy BSD
349 349 behavior.
350 350 If
351 351 .Sy BSD
352 352 behavior is required where no implicit space operation is executed on close,
353 353 the non-rewind device name containing the letter
354 354 .Ql b
355 355 (for
356 356 .Sy BSD
357 357 behavior) in the final component should be specified.
358 358 .Pp
359 359 If data was written, a file mark is automatically written by the driver upon
360 360 close.
361 361 If the rewinding device was specified, the tape will be rewound after
362 362 the file mark is written.
363 363 If the user wrote a file mark prior to closing, then
364 364 no file mark is written upon close.
365 365 If a file positioning ioctl, like rewind,
366 366 is issued after writing, a file mark is written before repositioning the tape.
367 367 .Pp
368 368 All buffers are flushed on closing a tape device.
369 369 Hence, it is strongly recommended that the application wait for all buffers to
370 370 be flushed before closing the device.
371 371 This can be done by writing a filemark via
372 372 .Dv MTWEOF ,
373 373 even with a zero count.
374 374 .Pp
375 375 Note that for 1/2\(dq reel tape devices, two file marks are written to mark the
376 376 .Sy EOM
377 377 before rewinding or performing a file positioning ioctl.
378 378 If the user
379 379 wrote a file mark before closing a 1/2\(dq reel tape device, the driver will
380 380 always write a file mark before closing to insure that the end of recorded
381 381 media is marked properly.
382 382 If the non-rewinding device was specified, two file
383 383 marks are written and the tape is left positioned between the two so that the
384 384 second one is overwritten on a subsequent
385 385 .Xr open 2
386 386 and
387 387 .Xr write 2 .
388 388 .Pp
389 389 If no data was written and the driver was opened for
390 390 .Sy WRITE-ONLY
391 391 access, one or two file marks are written, thus creating a null file.
392 392 .Pp
393 393 After closing the device, persistent error handling will be disabled and any
394 394 error or exception will be cleared.
395 395 .Sh IOCTLS
396 396 Not all devices support all
397 397 .Sy ioctls .
398 398 The driver returns an
399 399 .Er ENOTTY
400 400 error on unsupported ioctls.
401 401 .Pp
402 402 The following structure definitions for magnetic tape
403 403 .Xr ioctl 2
404 404 commands are from
405 405 .In sys/mtio.h .
406 406 .Pp
407 407 The minor device byte structure is:
408 408 .Bd -literal
409 409 15 7 6 5 4 3 2 1 0
410 410 ________________________________________________________________________
411 411 Unit # BSD Reserved Density Density No rewind Unit #
412 412 Bits 7-15 behavior Select Select on Close Bits 0-1
413 413 .Ed
414 414 .Bd -literal
415 415 /*
416 416 * Layout of minor device byte:
417 417 */
418 418 #define MTUNIT(dev) (((minor(dev) & 0xff80) >> 5) + (minor(dev) & 0x3))
419 419 #define MT_NOREWIND (1 <<2)
420 420 #define MT_DENSITY_MASK (3 <<3)
421 421 #define MT_DENSITY1 (0 <<3) /* Lowest density/format */
422 422 #define MT_DENSITY2 (1 <<3)
423 423 #define MT_DENSITY3 (2 <<3)
424 424 #define MT_DENSITY4 (3 <<3) /* Highest density/format */
425 425 #define MTMINOR(unit) (((unit & 0x7fc) << 5) + (unit & 0x3))
426 426 #define MT_BSD (1 <<6) /* BSD behavior on close */
427 427
428 428 /* Structure for MTIOCTOP - magnetic tape operation command */
429 429
430 430 struct mtop {
431 431 short mt_op; /* operation */
432 432 daddr_t mt_count; /* number of operations */
433 433 };
434 434
435 435 /* Structure for MTIOCLTOP - magnetic tape operation command */
436 436 Works exactly like MTIOCTOP except passes 64 bit mt_count values.
437 437 struct mtlop {
438 438 short mt_op;
439 439 short pad[3];
440 440 int64_t mt_count;
441 441 };
442 442 .Ed
443 443 .Pp
444 444 The following operations of
445 445 .Dv MTIOCTOP
446 446 and
447 447 .Dv MTIOCLTOP
448 448 ioctls are supported:
449 449 .Pp
450 450 .Bl -tag -width MTIOCGETERROR -compact -offset 2n
451 451 .It Dv MTWEOF
452 452 Write an end-of-file record
453 453 .It Dv MTFSF
454 454 Forward space over file mark
455 455 .It Dv MTBSF
456 456 Backward space over file mark (1/2", 8mm only)
457 457 .It Dv MTFSR
458 458 Forward space to inter-record gap
459 459 .It Dv MTBSR
460 460 Backward space to inter-record gap
461 461 .It Dv MTREW
462 462 Rewind
463 463 .It Dv MTOFFL
464 464 Rewind and take the drive off-line
465 465 .It Dv MTNOP
466 466 No operation, sets status only
467 467 .It Dv MTRETEN
468 468 Retension the tape (cartridge tape only)
469 469 .It Dv MTERASE
470 470 Erase the entire tape and rewind
471 471 .It Dv MTEOM
472 472 Position to EOM
473 473 .It Dv MTNBSF
474 474 Backward space file to beginning of file
475 475 .It Dv MTSRSZ
476 476 Set record size
477 477 .It Dv MTGRSZ
478 478 Get record size
479 479 .It Dv MTTELL
480 480 Get current position
481 481 .It Dv MTSEEK
482 482 Go to requested position
483 483 .It Dv MTFSSF
484 484 Forward to requested number of sequential file marks
485 485 .It Dv MTBSSF
486 486 Backward to requested number of sequential file marks
487 487 .It Dv MTLOCK
488 488 Prevent media removal
489 489 .It Dv MTUNLOCK
490 490 Allow media removal
491 491 .It Dv MTLOAD
492 492 Load the next tape cartridge into the tape drive
493 493 .It Dv MTIOCGETERROR
494 494 Retrieve error records from the st driver
495 495 .El
496 496 .Bd -literal -offset 2n
497 497 /* structure for MTIOCGET - magnetic tape get status command */
498 498
499 499 struct mtget {
500 500 short mt_type; /* type of magtape device */
501 501
502 502 /* the following two registers are device dependent */
503 503 short mt_dsreg; /* "drive status" register */
504 504 short mt_erreg; /* "error" register */
505 505
506 506 /* optional error info. */
507 507 daddr_t mt_resid; /* residual count */
508 508 daddr_t mt_fileno; /* file number of current position */
509 509 daddr_t mt_blkno; /* block number of current position */
510 510 ushort_t mt_flags;
511 511 short mt_bf; /* optimum blocking factor */
512 512 };
513 513
514 514 /* structure for MTIOCGETDRIVETYPE - get tape config data command */
515 515 struct mtdrivetype_request {
516 516 int size;
517 517 struct mtdrivetype *mtdtp;
518 518 };
519 519 struct mtdrivetype {
520 520 char name[64]; /* Name, for debug */
521 521 char vid[25]; /* Vendor id and product id */
522 522 char type; /* Drive type for driver */
523 523 int bsize; /* Block size */
524 524 int options; /* Drive options */
525 525 int max_rretries; /* Max read retries */
526 526 int max_wretries; /* Max write retries */
527 527 uchar_t densities[MT_NDENSITIES]; /* density codes,low->hi */
528 528 uchar_t default_density; /* Default density chosen */
529 529 uchar_t speeds[MT_NSPEEDS]; /* speed codes, low->hi */
530 530 ushort_t non_motion_timeout; /* Seconds for non-motion */
531 531 ushort_t io_timeout; /* Seconds for data to from tape */
532 532 ushort_t rewind_timeout; /* Seconds to rewind */
533 533 ushort_t space_timeout; /* Seconds to space anywhere */
534 534 ushort_t load_timeout; /* Seconds to load tape and ready */
535 535 ushort_t unload_timeout; /* Seconds to unload */
536 536 ushort_t erase_timeout; /* Seconds to do long erase */
537 537 };
538 538 .Ed
539 539 .Bd -literal -offset 2n
540 540 /* structure for MTIOCGETPOS and MTIOCRESTPOS - get/set tape position */
541 541 /*
542 542 * eof/eot/eom codes.
543 543 */
544 544 typedef enum {
545 545 ST_NO_EOF,
546 546 ST_EOF_PENDING, /* filemrk pending */
547 547 ST_EOF, /* at filemark */
548 548 ST_EOT_PENDING, /* logical eot pend. */
549 549 ST_EOT, /* at logical eot */
550 550 ST_EOM, /* at physical eot */
551 551 ST_WRITE_AFTER_EOM /* flag allowing writes after EOM */
552 552 } pstatus;
553 553
554 554 typedef enum { invalid, legacy, logical } posmode;
555 555
556 556 typedef struct tapepos {
557 557 uint64_t lgclblkno; /* Blks from start of partition */
558 558 int32_t fileno; /* Num. of current file */
559 559 int32_t blkno; /* Blk number in current file */
560 560 int32_t partition; /* Current partition */
561 561 pstatus eof; /* eof states */
562 562 posmode pmode; /* which pos. data is valid */
563 563 char pad[4];
564 564 } tapepos_t;
565 565 .Ed
566 566 .Pp
567 567 .Bd -ragged -compact
568 568 If the
569 569 .Fa pmode
570 570 is legacy,
571 571 .Fa fileno
572 572 and
573 573 .Fa blkno
574 574 fields are valid.
575 575 .Pp
576 576 If the
577 577 .Fa pmode
578 578 is logical,
579 579 .Fa lgclblkno
580 580 field is valid.
581 581 .Ed
582 582 .Pp
583 583 The
584 584 .Dv MTWEOF
585 585 ioctl is used for writing file marks to tape.
586 586 Not only does
587 587 this signify the end of a file, but also usually has the side effect of
588 588 flushing all buffers in the tape drive to the tape medium.
589 589 A zero count
590 590 .Dv MTWEOF
591 591 will just flush all the buffers and will not write any file marks.
592 592 Because a successful completion of this tape operation will guarantee that all
593 593 tape data has been written to the tape medium, it is recommended that this tape
594 594 operation be issued before closing a tape device.
595 595 .Pp
596 596 When spacing forward over a record (either data or
597 597 .Sy EOF ) ,
598 598 the tape head is
599 599 positioned in the tape gap between the record just skipped and the next record.
600 600 When spacing forward over file marks (EOF records), the tape head is positioned
601 601 in the tape gap between the next
602 602 .Sy EOF
603 603 record and the record that follows it.
604 604 .Pp
605 605 When spacing backward over a record (either data or
606 606 .Sy EOF ) ,
607 607 the tape head is positioned in the tape gap immediately preceding the tape
608 608 record where the tape head is currently positioned.
609 609 When spacing backward over file marks (EOF records), the tape head is
610 610 positioned in the tape gap preceding the
611 611 .Sy EOF .
612 612 Thus the next read would fetch the
613 613 .Sy EOF .
614 614 .Pp
615 615 Record skipping does not go past a file mark; file skipping does not go past
616 616 the
617 617 .Sy EOM .
618 618 After an
619 619 .Dv MTFSR
620 620 <huge number> command, the driver leaves
621 621 the tape logically positioned
622 622 .Em before
623 623 the
624 624 .Sy EOF .
625 625 A related feature is that
626 626 .Sy EOF Ns s
627 627 remain pending until the tape is closed.
628 628 For example, a program
629 629 which first reads all the records of a file up to and including the \fBEOF\fR
630 630 and then performs an
631 631 .Dv MTFSF
632 632 command will leave the tape positioned just
633 633 after that same
634 634 .Sy EOF ,
635 635 rather than skipping the next file.
636 636 .Pp
637 637 The
638 638 .Dv MTNBSF
639 639 and
640 640 .Dv MTFSF
641 641 operations are inverses.
642 642 Thus, an
643 643 .Dq Dv MTFSF \(mi1
644 644 is equivalent to an
645 645 .Dq Dv MTNBSF 1 .
646 646 An
647 647 .Dq Dv MTNBSF 0
648 648 is the same as
649 649 .Dq Dv MTFSF 0 ;
650 650 both position the tape device at the beginning of the current file.
651 651 .Pp
652 652 .Dv MTBSF
653 653 moves the tape backwards by file marks.
654 654 The tape position will end
655 655 on the beginning of the tape side of the desired file mark.
656 656 An
657 657 .Dq Dv MTBSF 0
658 658 will position the tape at the end of the current file, before the filemark.
659 659 .Pp
660 660 .Dv MTBSR
661 661 and
662 662 .Dv MTFSR
663 663 operations perform much like space file operations,
664 664 except that they move by records instead of files.
665 665 Variable-length I/O devices
666 666 (1/2\(dq reel, for example) space actual records; fixed-length I/O devices space
667 667 physical records (blocks).
668 668 1/4\(dq cartridge tape, for example, spaces 512 byte
669 669 physical records.
670 670 The status ioctl residual count contains the number of files
671 671 or records not skipped.
672 672 .Pp
673 673 .Dv MTFSSF
674 674 and
675 675 .Dv MTBSSF
676 676 space forward or backward, respectively, to the next
677 677 occurrence of the requested number of file marks, one following another.
678 678 If there are more sequential file marks on tape than were requested, it spaces
679 679 over the requested number and positions after the requested file mark.
680 680 Note that not all drives support this command and if a request is sent to a
681 681 drive that does not,
682 682 .Er ENOTTY
683 683 is returned.
684 684 .Pp
685 685 .Dv MTOFFL
686 686 rewinds and, if appropriate, takes the device off-line by unloading the tape.
687 687 It is recommended that the device be closed after offlining
688 688 and then re-opened after a tape has been inserted to facilitate portability to
689 689 other platforms and other operating systems.
690 690 Attempting to re-open the device
691 691 with no tape will result in an error unless the
692 692 .Dv O_NDELAY
693 693 flag is used.
694 694 .Po
695 695 See
696 696 .Xr open 2 .
697 697 .Pc
698 698 .Pp
699 699 The
700 700 .Dv MTRETEN
701 701 retension ioctl applies only to 1/4\(dq cartridge tape devices.
702 702 It is used to restore tape tension, improving the tape's soft error rate after
703 703 extensive start-stop operations or long-term storage.
704 704 .Pp
705 705 .Dv MTERASE
706 706 rewinds the tape, erases it completely, and returns to the
707 707 beginning of tape.
708 708 Erasing may take a long time depending on the device and/or
709 709 tapes.
710 710 For time details, refer to the drive specific manual.
711 711 .Pp
712 712 .Dv MTEOM
713 713 positions the tape at a location just after the last file written
714 714 on the tape.
715 715 For 1/4\(dq cartridge and 8mm tape, this is after the last file mark
716 716 on the tape.
717 717 For 1/2\(dq reel tape, this is just after the first file mark but
718 718 before the second (and last) file mark on the tape.
719 719 Additional files can then
720 720 be appended onto the tape from that point.
721 721 .Pp
722 722 Note the difference between
723 723 .Dv MTBSF
724 724 (backspace over file mark) and
725 725 .Dv MTNBSF
726 726 (backspace file to beginning of file).
727 727 The former moves the tape
728 728 backward until it crosses an
729 729 .Sy EOF
730 730 mark, leaving the tape positioned
731 731 .Em before
732 732 the file mark.
733 733 The latter leaves the tape positioned
734 734 .Em after
735 735 the file mark.
736 736 Hence,
737 737 .Dq Dv MTNBSF n
738 738 is equivalent to
739 739 .Dq Dv MTBSF (n+1)
740 740 followed by
741 741 .Dq Dv MTFSF 1 .
742 742 The 1/4\(dq cartridge tape devices do not support
743 743 .Dv MTBSF .
744 744 .Pp
745 745 .Dv MTSRSZ
746 746 and
747 747 .Dv MTGRSZ
748 748 are used to set and get fixed record lengths.
749 749 The
750 750 .Dv MTSRSZ
751 751 ioctl allows variable length and fixed length tape drives that
752 752 support multiple record sizes to set the record length.
753 753 The
754 754 .Fa mt_count
755 755 field of the
756 756 .Vt mtop
757 757 struct is used to pass the record size to/from the
758 758 .Xr st 7D
759 759 driver.
760 760 A value of
761 761 .Ql 0
762 762 indicates variable record size.
763 763 The
764 764 .Dv MTSRSZ
765 765 ioctl makes a variable-length tape device behave like a
766 766 fixed-length tape device.
767 767 Refer to the specific tape driver man page for
768 768 details.
769 769 .Pp
770 770 .Dv MTLOAD
771 771 loads the next tape cartridge into the tape drive.
772 772 This is generally only used with stacker and tower type tape drives which handle
773 773 multiple tapes per tape drive.
774 774 A tape device without a tape inserted can be
775 775 opened with the
776 776 .Dv O_NDELAY
777 777 flag, in order to execute this operation.
778 778 .Pp
779 779 .Dv MTIOCGETERROR
780 780 allows user-level applications to retrieve error records
781 781 from the
782 782 .Xr st 7D
783 783 driver.
784 784 An error record consists of the SCSI command cdb
785 785 which causes the error and a
786 786 .Xr scsi_arq_status 9S
787 787 structure if available.
788 788 The user-level application is responsible for allocating and releasing the
789 789 memory for
790 790 .Fa mtee_cdb_buf
791 791 and
792 792 .Fa scsi_arq_status of each
793 793 .Vt mterror_entry .
794 794 Before issuing the ioctl, the
795 795 .Fa mtee_arq_status_len
796 796 value should be at least equal to
797 797 .Ql sizeof (struct scsi_arq_status) .
798 798 If more sense data than the size of
799 799 .Xr scsi_arq_status 9S
800 800 is desired, the
801 801 .Fa mtee_arq_status_len
802 802 may be larger than
803 803 .Ql sizeof (struct scsi_arq_status)
804 804 by the amount of additional extended sense data desired.
805 805 The
806 806 .Fa es_add_len
807 807 field of
808 808 .Xr scsi_extended_sense 9S
809 809 can be used to determine the amount of valid sense data returned by the device.
810 810 .Pp
811 811 The
812 812 .Dv MTIOCGET
813 813 get status
814 814 .Xr ioctl 2
815 815 call returns the drive ID
816 816 .Pq Fa mt_type ,
817 817 sense key error
818 818 .Pq Fa mt_erreg ,
819 819 file number
820 820 .Pq Fa mt_fileno ,
821 821 optimum blocking factor
822 822 .Pq Fa mt_bf
823 823 and record number
824 824 .Pq Fa mt_blkno
825 825 of the last error.
826 826 The residual count
827 827 .Pq Fa mt_resid
828 828 is set to the number of bytes not transferred or files/records not spaced.
829 829 The flags word
830 830 .Pq Fa mt_flags
831 831 contains information indicating if the device is SCSI, if the device is a reel
832 832 device and whether the device supports absolute file positioning.
833 833 The
834 834 .Fa mt_flags
835 835 also indicates if the device is requesting cleaning media be used, whether the
836 836 device is capable of reporting the requirement of cleaning media and if the
837 837 currently loaded media is WORM (Write Once Read Many) media.
838 838 .Pp
839 839 Note \(em When tape alert cleaning is managed by the st driver, the tape
840 840 target driver may continue to return a
841 841 .Dq drive needs cleaning
842 842 status unless an
843 843 .Dv MTIOCGE
844 844 .Xr ioct 2
845 845 call is made while the cleaning media is in the drive.
846 846 .Pp
847 847 The
848 848 .Dv MTIOCGETDRIVETYPE
849 849 get drivetype ioctl call returns the name of the
850 850 tape drive as defined in
851 851 .Pa st.conf
852 852 .Pq Fa name ,
853 853 Vendor
854 854 .Sy ID
855 855 and model
856 856 .Pq Fa product ,
857 857 .Sy ID
858 858 .Pq Fa vid ,
859 859 type of tape device
860 860 .Pq Fa type ,
861 861 block size
862 862 .Pq Fa size ,
863 863 drive options
864 864 .Pq Fa options ,
865 865 maximum read retry count
866 866 .Pq Fa max_rretries ,
867 867 maximum write retry count
868 868 .Pq Fa max_wretries ,
869 869 densities supported by the drive
870 870 .Pq Fa densities ,
871 871 and default density of the tape drive
872 872 .Pq Fa default_density .
873 873 .Pp
874 874 The
875 875 .Dv MTIOCGETPOS
876 876 ioctl returns the current tape position of the drive.
877 877 It is returned in struct tapepos as defined in
878 878 .Pa /usr/include/sys/scsi/targets/stdef.h .
879 879 .Pp
880 880 The
881 881 .Dv MTIOCRESTPOS
882 882 ioctl restores a saved position from the
883 883 .Dv MTIOCGETPOS .
884 884 .Ss "Persistent Error Handling IOCTLs and Asynchronous Tape Operations"
885 885 .Bl -tag -width MTIOCPERSISTENTSTATUS -compact
886 886 .It Dv MTIOCPERSISTENT
887 887 enables/disables persistent error handling
888 888 .It Dv MTIOCPERSISTENTSTATUS
889 889 queries for persistent error handling
890 890 .It Dv MTIOCLRERR
891 891 clears persistent error handling
892 892 .It Dv MTIOCGUARANTEEDORDER
893 893 checks whether driver guarantees order of I/O's
894 894 .El
895 895 .Pp
896 896 The
897 897 .Dv MTIOCPERSISTENT
898 898 ioctl enables or disables persistent error handling.
899 899 It takes as an argument a pointer to an integer that turns it either on or off.
900 900 If the ioctl succeeds, the desired operation was successful.
901 901 It will wait for
902 902 all outstanding I/O's to complete before changing the persistent error handling
903 903 status.
904 904 For example,
905 905 .Bd -literal -offset 2n
906 906 int on = 1;
907 907 ioctl(fd, MTIOCPERSISTENT, &on);
908 908 int off = 0;
909 909 ioctl(fd, MTIOCPERSISTENT, &off);
910 910 .Ed
911 911 .Pp
912 912 The
913 913 .Dv MTIOCPERSISTENTSTATUS
914 914 ioctl enables or disables persistent error
915 915 handling.
916 916 It takes as an argument a pointer to an integer inserted by the
917 917 driver.
918 918 The integer can be either 1 if persistent error handling is
919 919 .Sq on ,
920 920 or 0 if persistent error handling is
921 921 .Sq off .
922 922 It will not wait for outstanding I/O's.
923 923 For example,
924 924 .Bd -literal -offset 2n
925 925 int query;
926 926 ioctl(fd, MTIOCPERSISTENTSTATUS, &query);
927 927 .Ed
928 928 .Pp
929 929 The
930 930 .Dv MTIOCLRERR
931 931 ioctl clears persistent error handling and allows tape
932 932 operations to continual normally.
933 933 This ioctl requires no argument and will
934 934 always succeed, even if persistent error handling has not been enabled.
935 935 It will wait for any outstanding I/O's before it clears the error.
936 936 .Pp
937 937 The
938 938 .Dv MTIOCGUARANTEEDORDER
939 939 ioctl is used to determine whether the driver
940 940 guarantees the order of I/O's.
941 941 It takes no argument.
942 942 If the ioctl succeeds, the driver will support guaranteed order.
943 943 If the driver does not support guaranteed order, then it should not be used
944 944 for asynchronous I/O with
945 945 .Xr libaio 3lib .
946 946 It will wait for any outstanding I/O's before it returns.
947 947 For example,
948 948 .Bd -literal -offset 2n
949 949 ioctl(fd, MTIOCGUARANTEEDORDER)
950 950 .Ed
951 951 .Pp
952 952 See the
953 953 .Sx Persistent Error Handling
954 954 subsection above for more information on persistent error handling.
955 955 .Ss "Asynchronous and State Change IOCTLS"
956 956 .Bl -tag -width 1n
957 957 .It Dv MTIOCSTATE
958 958 This ioctl blocks until the state of the drive, inserted or ejected, is
959 959 changed.
960 960 The argument is a pointer to a
961 961 .Vt enum mtio_state ,
962 962 whose possible enumerations are listed below.
963 963 The initial value should be either the last reported state of the drive, or
964 964 .Dv MTIO_NONE .
965 965 Upon return, the
966 966 enum pointed to by the argument is updated with the current state of the drive.
967 967 .Bd -literal -offset 2n
968 968 enum mtio_state {
969 969 MTIO_NONE /* Return tape's current state */
970 970 MTIO_EJECTED /* Tape state is "ejected" */
971 971 MTIO_INSERTED /* Tape state is "inserted" */
972 972 };
973 973 .Ed
974 974 .El
975 975 .Pp
976 976 When using asynchronous operations, most ioctls will wait for all outstanding
977 977 commands to complete before they are executed.
978 978 .Ss "IOCTLS for Multi-initiator Configurations"
979 979 .Bl -tag -width MTIOCFORCERESERVE -compact
980 980 .It Dv MTIOCRESERVE
981 981 reserve the tape drive
982 982 .It Dv MTIOCRELEASE
983 983 revert back to the default behavior of reserve on open/release on close
984 984 .It Dv MTIOCFORCERESERVE
985 985 reserve the tape unit by breaking reservation held by another host
986 986 .El
987 987 .Pp
988 988 The
989 989 .Dv MTIOCRESERVE
990 990 ioctl reserves the tape drive such that it does not
991 991 release the tape drive at close.
992 992 This changes the default behavior of releasing the device upon close.
993 993 Reserving the tape drive that is already reserved has no effect.
994 994 For example,
995 995 .Bd -literal -offset 2n
996 996 ioctl(fd, MTIOCRESERVE);
997 997 .Ed
998 998 .Pp
999 999 The
1000 1000 .Dv MTIOCRELEASE
1001 1001 ioctl reverts back to the default behavior of reserve on
1002 1002 open/release on close operation, and a release will occur during the next
1003 1003 close.
1004 1004 Releasing the tape drive that is already released has no effect.
1005 1005 For example,
1006 1006 .Bd -literal -offset 2n
1007 1007 ioctl(fd, MTIOCRELEASE);
1008 1008 .Ed
1009 1009 .Pp
1010 1010 The
1011 1011 .Dv MTIOCFORCERESERVE
1012 1012 ioctl breaks a reservation held by another host, interrupting any I/O in
1013 1013 progress by that other host, and then reserves the tape unit.
1014 1014 This ioctl can be executed only with super-user privileges.
1015 1015 It is recommended to open the tape device in
1016 1016 .Dv O_NDELAY
1017 1017 mode when this ioctl needs to be executed, otherwise the open will fail if
1018 1018 another host indeed has it reserved.
1019 1019 For example,
1020 1020 .Bd -literal -offset 2n
1021 1021 ioctl(fd, MTIOCFORCERESERVE);
1022 1022 .Ed
1023 1023 .Ss "IOCTLS for Handling Tape Configuration Options"
1024 1024 .Bl -tag -width MTIOCREADIGNOREEOFS
1025 1025 .It Dv MTIOCSHORTFMK
1026 1026 enables/disables support for writing short filemarks.
1027 1027 This is specific to Exabyte drives.
1028 1028 .It Dv MTIOCREADIGNOREILI
1029 1029 enables/disables suppress incorrect length indicator (SILI) support during reads
1030 1030 .It Dv MTIOCREADIGNOREEOFS
1031 1031 enables/disables support for reading past two EOF marks which otherwise indicate
1032 1032 End-Of-recording-Media (EOM) in the case of 1/2\(dq reel tape drives
1033 1033 .El
1034 1034 .Pp
1035 1035 The
1036 1036 .Dv MTIOCSHORTFMK
1037 1037 ioctl enables or disables support for short filemarks.
1038 1038 This ioctl is only applicable to Exabyte drives which support short filemarks.
1039 1039 As an argument, it takes a pointer to an integer.
1040 1040 If 0 (zero) is the specified integer, then long filemarks will be written.
1041 1041 If 1 is the specified integer, then short filemarks will be written.
1042 1042 The specified tape behavior will be in effect until the device is closed.
1043 1043 .Pp
1044 1044 For example:
1045 1045 .Bd -literal -offset 2n
1046 1046 int on = 1;
1047 1047 int off = 0;
1048 1048 /* enable short filemarks */
1049 1049 ioctl(fd, MTIOSHORTFMK, &on);
1050 1050 /* disable short filemarks */
1051 1051 ioctl(fd, MTIOCSHORTFMK, &off);
1052 1052 .Ed
1053 1053 .Pp
1054 1054 Tape drives which do not support short filemarks will return an
1055 1055 .Va errno
1056 1056 of
1057 1057 .Er ENOTTY .
1058 1058 .Pp
1059 1059 The
1060 1060 .Dv MTIOCREADIGNOREILI
1061 1061 ioctl enables or disables the suppress incorrect
1062 1062 length indicator (SILI) support during reads.
1063 1063 As an argument, it takes a pointer to an integer.
1064 1064 If 0 (zero) is the specified integer, SILI will not be
1065 1065 used during reads and incorrect length indicator will not be suppressed.
1066 1066 If 1 is the specified integer, SILI will be used during reads and incorrect
1067 1067 length indicator will be suppressed.
1068 1068 The specified tape behavior will be in effect until the device is closed.
1069 1069 .Pp
1070 1070 For example:
1071 1071 .Bd -literal -offset 2n
1072 1072 int on = 1;
1073 1073 int off = 0;
1074 1074 ioctl(fd, MTIOREADIGNOREILI, &on);
↓ open down ↓ |
860 lines elided |
↑ open up ↑ |
1075 1075 ioctl(fd, MTIOREADIGNOREILI, &off);
1076 1076 .Ed
1077 1077 .Pp
1078 1078 The
1079 1079 .Dv MTIOCREADIGNOREEOFS
1080 1080 ioctl enables or disables support for reading
1081 1081 past double EOF marks which otherwise indicate End-Of-recorded-media (EOM) in
1082 1082 the case of 1/2\(dq reel tape drives.
1083 1083 As an argument, it takes a pointer to an integer.
1084 1084 If 0 (zero) is the specified integer, then double EOF marks indicate
1085 -End-Of-recodred-media (EOD).
1085 +End-Of-recorded-media (EOD).
1086 1086 If 1 is the specified integer, the double EOF marks no longer indicate EOM,
1087 1087 thus allowing applications to read past two EOF marks.
1088 1088 In this case it is the responsibility of the application to detect
1089 1089 end-of-recorded-media (EOM).
1090 1090 The specified tape behavior will be in effect until the device is closed.
1091 1091 .Pp
1092 1092 For example:
1093 1093 .Bd -literal -offset 2n
1094 1094 int on = 1;
1095 1095 int off = 0;
1096 1096 ioctl(fd, MTIOREADIGNOREEOFS, &on);
1097 1097 ioctl(fd, MTIOREADIGNOREEOFS, &off);
1098 1098 .Ed
1099 1099 .Pp
1100 1100 Tape drives other than 1/2\(dq reel tapes will return an
1101 1101 .Va errno
1102 1102 of
1103 1103 .Er ENOTTY .
1104 1104 .Sh FILES
1105 1105 .Pa /dev/rmt/ Ns Ao unit number Ac \
1106 1106 Ns Ao density Ac \
1107 1107 Ns Bo Ao BSD behavior Ac Bc \
1108 1108 Ns Bo Ao no rewind Ac Bc
1109 1109 .Pp
1110 1110 Where
1111 1111 .Aq density
1112 1112 can be
1113 1113 .Ql l ,
1114 1114 .Ql m ,
1115 1115 .Ql h ,
1116 1116 .Ql u/c
1117 1117 (low, medium, high, ultra/compressed, respectively), the
1118 1118 .Aq BSD behavior
1119 1119 option is
1120 1120 .Ql b , and the
1121 1121 .Aq no rewind
1122 1122 option is
1123 1123 .Ql n .
1124 1124 .Pp
1125 1125 For example,
1126 1126 .Pa /dev/rmt/0hbn
1127 1127 specifies unit 0, high density,
1128 1128 .Sy BSD
1129 1129 behavior and no rewind.
1130 1130 .Sh EXAMPLES
1131 1131 .Bl -inset
1132 1132 .It Sy Example 1
1133 1133 Tape Positioning and Tape Drives
1134 1134 .Pp
1135 1135 Suppose you have written three files to the non-rewinding 1/2\(dq tape device,
1136 1136 .Pa /dev/rmt/0ln ,
1137 1137 and that you want to go back and
1138 1138 .Xr dd 1M
1139 1139 the second file off the tape.
1140 1140 The commands to do this are:
1141 1141 .Bd -literal -offset 2n
1142 1142 mt -F /dev/rmt/0lbn bsf 3
1143 1143 mt -F /dev/rmt/0lbn fsf 1
1144 1144 dd if=/dev/rmt/0ln
1145 1145 .Ed
1146 1146 .Pp
1147 1147 To accomplish the same tape positioning in a C program, followed by a get
1148 1148 status ioctl:
1149 1149 .Bd -literal -offset 2n
1150 1150 struct mtop mt_command;
1151 1151 struct mtget mt_status;
1152 1152 mt_command.mt_op = MTBSF;
1153 1153 mt_command.mt_count = 3;
1154 1154 ioctl(fd, MTIOCTOP, &mt_command);
1155 1155 mt_command.mt_op = MTFSF;
1156 1156 mt_command.mt_count = 1;
1157 1157 ioctl(fd, MTIOCTOP, &mt_command);
1158 1158 ioctl(fd, MTIOCGET, (char *)&mt_status);
1159 1159 .Ed
1160 1160 .Pp
1161 1161 or
1162 1162 .Bd -literal -offset 2n
1163 1163 mt_command.mt_op = MTNBSF;
1164 1164 mt_command.mt_count = 2;
1165 1165 ioctl(fd, MTIOCTOP, &mt_command);
1166 1166 ioctl(fd, MTIOCGET, (char *)&mt_status);
1167 1167 .Ed
1168 1168 .Pp
1169 1169 To get information about the tape drive:
1170 1170 .Bd -literal -offset 2n
1171 1171 struct mtdrivetype mtdt;
1172 1172 struct mtdrivetype_request mtreq;
1173 1173 mtreq.size = sizeof(struct mtdrivetype);
1174 1174 mtreq.mtdtp = &mtdt;
1175 1175 ioctl(fd, MTIOCGETDRIVETYPE, &mtreq);
1176 1176 .Ed
1177 1177 .El
1178 1178 .Sh SEE ALSO
1179 1179 .Xr mt 1 ,
1180 1180 .Xr tar 1 ,
1181 1181 .Xr dd 1M ,
1182 1182 .Xr open 2 ,
1183 1183 .Xr read 2 ,
1184 1184 .Xr write 2 ,
1185 1185 .Xr aioread 3C ,
1186 1186 .Xr aiowrite 3C ,
1187 1187 .Xr ar.h 3HEAD ,
1188 1188 .Xr st 7D
1189 1189 .Pp
1190 1190 .%T 1/4 Inch Tape Drive Tutorial
↓ open down ↓ |
95 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX