| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 
 | .\" Copyright 1995 Robert K. Nichols (Robert.K.Nichols@att.com)
.\" Copyright 1999 Kai Mäkisara (Kai.Makisara@metla.fi)
.\"
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one
.\" 
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\" 
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\"
.\" Translated into Spanish Sat Mar 14 21:10:16 CET 1998 by
.\" 	Gerardo Aburruzaga García <gerardo.aburruzaga@uca.es>
.\" Translation revised on Sat Apr 10 1999 by Juan Piernas <piernas@ditec.um.es>
.\"
.TH ST 4  "18 enero 1999" "Linux 2.0 - 2.2" "Manual del Programador de Linux"
.SH NOMBRE
st \- dispositivo de cinta magnética SCSI
.SH SINOPSIS
.nf
.B #include <sys/mtio.h>
.sp
.BI "int ioctl(int " fd ", int " request " [, (void *)" arg3 "]);"
.BI "int ioctl(int " fd ", \s-1MTIOCTOP\s+1, (struct mtop *)" mt_cmd );
.BI "int ioctl(int " fd ", \s-1MTIOCGET\s+1, (struct mtget *)" mt_status );
.BI "int ioctl(int " fd ", \s-1MTIOCPOS\s+1, (struct mtpos *)" mt_pos );
.fi
.SH DESCRIPCIÓN
El manejador (driver)
.B st
proporciona la interfaz para una variedad de dispositivos de cinta
magnética SCSI. Actualmente, toma el control de todos los dispositivos
detectados de tipo \(lqacceso secuencial\(rq. 
El manejador
.B st
emplea el número mayor de dispositivo 9.
.PP
Cada dispositivo utiliza ocho números menores de dispositivo. Los cinco bits
más bajos en los números menores se asignan secuencialmente en el orden en
que se detectan. Los números menores se pueden agrupar en dos conjuntos de
cuatro números: los números menores de dispositivo (con autorebobinado) 
principales,
.IR n ,
y los números de dispositivo \(lqsin rebobinado\(rq,
.IR "" ( n "+128)."
A los dispositivos abiertos que utilicen el número de dispositivo
principal se les enviará una orden  
\s-1REWIND\s+1 cuando se cierren.
A los dispositivos abiertos que utilicen el número de dispositivo
\(lqsin rebobinado\(rq no se les enviará esa orden.
(Dese cuenta que usar un dispositivo con autorebobinado para posicionar la
cinta con, por ejemplo, mt no produce el resultado deseado: la cinta se
rebobina después de la orden mt y la orden siguiente comienza desde el
principio de la cinta).
.PP
Dentro de cada grupo, hay disponibles cuatro números menores para definir
dispositivos con diferentes características (tamaño de bloque, compresión,
densidad, etc.). Cuando el sistema arranca, sólo está disponible el primer
dispositivo. Los otros tres se activan cuando se definen las carcterísticas
por defecto (ver más abajo). (Cambiando las constantes en tiempo de
compilación, es posible cambiar el equilibrio entre el número máximo de
unidades de cinta y el número de números menores para cada unidad.
La asignación por defecto permite controlar 32 dispositivos de cinta. Por
ejemplo, es posible controlar hasta 64 unidades de cinta con 2 números
menores para diferentes opciones).
.PP
Normalmente los dispositivos se crean con:
.RS
.nf
mknod -m 666 /dev/st0 c 9 0
mknod -m 666 /dev/st0l c 9 32
mknod -m 666 /dev/st0m c 9 64
mknod -m 666 /dev/st0a c 9 96
mknod -m 666 /dev/nst0 c 9 128
mknod -m 666 /dev/nst0l c 9 160
mknod -m 666 /dev/nst0m c 9 192
mknod -m 666 /dev/nst0a c 9 224
.fi
.RE
.PP
No existe el dispositivo de bloque correspondiente.
.PP
El manejador usa un buffer interno que tiene que ser lo suficientemente
grande para contener, al menos, un bloque de la cinta. En los núcleos
anteriores al 2.1.121, el buffer se reserva como un bloque contiguo. Esto
limita el tamaño de bloque al mayor bloque contiguo de memoria que el código
de asignación de memoria del núcleo puede proporcionar. Actualmente, el
límite es de 128KB para arquitecturas de 32 bits y 256KB para arquitecturas
de 64 bits. En núcleos posteriores el manejador reserva el buffer en varias
partes si es necesario. Por defecto, el número máximo de partes es de 16.
Esto significa que el tamaño máximo de bloques es muy grande (2MB si es
posible una asignación de 16 bloques de 128KB).
.PP
El tamaño del buffer interno del manejador viene determinado por una
contante en tiempo de compilación que se puede alterar con una opción de
inicio del núcleo.
Aparte de esto, el manejador intenta reservar un buffer temporal mayor en
tiempo de ejecución si es necesario. Sin embargo, la asignación en tiempo de
ejecución de grandes bloques contiguos de memoria puede fallar y es
aconsejable no confiar demasiado en la asignación dinámica de buffers con
núcleos anteriores al 2.1.121 (esto se aplica también a la carga por demanda
del manejador con kerneld o kmod).
.PP
El manejador no soporta específicamente ninguna marca o modelo de
unidad de cinta. Después del arranque del sistema se definen las
opciones de los dispositivos de cinta a partir del firmware de la unidad.
Por ejemplo, si el firmware de la unidad selecciona un modo de bloque
fijo, el dispositivo de cinta usa el modo de bloque fijo. Las opciones se
pueden cambiar con llamadas explícitas a
.B ioctl()
y permanecen activas cuando el dispositivo se cierra y se vuelve a abrir. La
configuración de las opciones afecta tanto al dispositivo con
auto-rebobinado como sin rebobinado.
.PP
Se pueden indicar diferentes opciones para los diferentes dispositos
dentro del subgrupo de cuatro. Las opciones entran en vigor cuando el
dispositivo se abre. Por ejemplo, el administrador del sistema puede definir
un dispositivo que escribe en modo de bloque fijo con un tamaño de bloque
concreto y otro que escribe en modo de bloque variable (si la unidad de
cinta soporta ambos modos).
.PP
El majenador soporta
.B particiones de cinta
si son soportadas por la unidad. (Dese cuenta que las particiones de
cinta no tienen nada que ver con las particiones de disco. Una cinta
particionada se puede ver como varias cintas lógicas dentro de un mismo
medio). El soporte de particiones se debe habilitar con ioctl. La posición
de cinta se conserva dentro de cada partición durante los cambios de
partición. La partición usada para las operaciones de cinta subsiguientes se
selecciona con ioctl. El cambio de partición se ejecuta junto con la
siguiente operación de cinta para evitar movimientos de cinta innecesarios.
El número máximo de particiones en una cinta es definido por una constante
en tiempo de compilación (originalmente cuatro). El manejador contiene un
ioctl que puede formatear una cinta con una o dos particiones.
.PP
El dispositivo
.B /dev/tape
se crea normalmente como un enlace físico o simbólico al dispositivo de
cinta predeterminado en el sistema.
.SH "TRANSFERENCIA DE DATOS"
El manejador soporta tanto el funcionamiento en modo de bloque fijo como en
modo de bloque variable (si la unidad lo soporta). En el modo de bloque
fijo la unidad escribe bloques del tamaño especificado y el tamaño de
bloque no depende de la cantidad de bytes de las llamadas al sistema de
escritura. En el modo de bloque variable se escribe un bloque de cinta para
cada llamada de escritura y el número de bytes determina el tamaño del
bloque de cinta correspondiente. Dese cuenta que los bloques en la cinta no
contienen ninguna información sobre el modo de escritura: cuando se lee, lo
único importante es usar órdenes que acepten los tamaños de los bloques en
la cinta.
.PP
En el modo de bloque variable la cantida de bytes leídos no tiene que
coincidir exactamente con el tamaño de bloque de la cinta. Si la cantidad de
bytes es mayor que el siguiente bloque de la cinta, el manejador devuelve
los datos y la función devuelve el tamaño real de bloque. Si el tamaño de
bloque es mayor que la cantidad de bytes, se devuelve la cantidad de datos
solicitada desde el inicio del bloque y el resto del bloque se descarta.
.PP
En el modo de bloque fijo, la cantidad de bytes a leer puede ser arbitraria
si se habilita el uso de buffers, o un múltiplo del tamaño de bloque de la
cinta si se deshabilita el uso de buffers. Los núcleos anteriores al 2.1.121
permiten escrituras con cantidades de bytes arbitrarias si se habilita el
uso de buffers. En todos los otros casos (un núcleo anterior al 2.1.121 con uso
de buffers deshabilitado o un núcleo nuevo) la cantidad de bytes a escribir
debe ser un múltiplo del tamaño de bloque de la cinta.
.PP
Automáticamente se escribe una marca de fichero en la cinta si la última
operación de cinta antes de cerrar era un escritura.
.PP
Cuando se encuentra una marca de fichero durante las lecturas, ocurre lo
siguiente. Si quedan datos en el buffer cuando se encuentra la marca de
fichero, se devuelven los datos del buffer. La próxima lectura devuelve
cero bytes. La siguiente lectura devuelve datos del siguiente fichero.
El final de los datos grabados se indica devolviendo cero bytes para dos
lecturas consecutivas. La tercera lectura devuelve un error.
.SH "IOCTLS"
El manejador admite tres peticiones ioctl.
Las peticiones no reconocidas por el manejador
.B st
se pasan al manejador
.BR SCSI .
Las definiciones de abajo son de
.BR /usr/include/linux/mtio.h :
.SS "\s-1MTIOCTOP\s+1 \- Efectuar una operación en la cinta"
.PP
Esta petición toma un argumento de tipo
.BR "(struct mtop *)" .
No todas las unidades de cinta admiten todas las operaciones.
El manejador retorna un error EIO si la unidad rechaza una operación.
.PP
.nf
.ta +.4i +.7i +1i
/* Estructura para \s-1MTIOCTOP\s+1 \- orden de op. de cinta mag.: */
struct mtop {
	short	mt_op;		/* operationes definidas abajo */
	int	mt_count;	/* cuántas de ellas */
};
.fi
.PP
Operaciones de Cinta Magnética para el uso normal de una cinta:
.PD 0
.IP MTBSF 14
Espacio atrás sobre
.B mt_count
marcas de fichero.
.IP MTBSFM
Espacio atrás sobre
.B mt_count
marcas de fichero.
Reposiciona la cinta a la parte EOT de la última marca de fichero.
.IP MTBSR
Espacio atrás sobre
.B mt_count
registros (bloques de cinta).
.IP MTBSS
Espacio atrás sobre
.B mt_count
marcas de conjunto.
.IP MTCOMPRESSION
Habilita la compresión de los datos de la cinta dentro de la unidad si
.B mt_count
no es cero y deshabilita la compresión si
.B mt_count
es cero. Esta orden usa el MODO página 15 (`MODE page 15') soportado por la
mayoría de DATs.
.IP MTEOM
Ir al fin del material grabado (para añadir ficheros).
.IP MTERASE
Borrar cinta.
.IP MTFSF
Espacio atrás sobre
.B mt_count
marcas de fichero.
.IP MTFSFM
Espacio atrás sobre
.B mt_count
marcas de fichero.
Reposiciona la cinta a la parte BOT de la última marca de fichero.
.IP MTFSR
Espacio atrás sobre
.B mt_count
registros (bloques de cinta).
.IP MTFSS
Espacio atrás sobre
.B mt_count
marcas de conjunto.
.IP MTLOAD
Ejecuta la orden SCSI de carga. Se dispone de un caso especial para algunos
autocargadores HP. Si
.B mt_count
es la constante MT_ST_HPLOADER_OFFSET más un número, el número se envia a la
unidad para controlar al autocargador.
.IP MTLOCK
Bloquea la puerta de la unidad de cinta.
.IP MTMKPART
Formatea la cinta en una o dos particiones. Si
.B mt_count
no es cero, da el tamaño de la primera partición y la segunda partición
contiene el resto de la cinta. Si
.B mt_count
es cero, la cinta se formatea en una partición.
Esta orden no está permitida para una unidad a menos que se habilite el
soporte de particiones para la unidad (ver MT_ST_CAN_PARTITIONS más
abajo).
.IP MTNOP
No op. \- vuelca el búfer del manejador como efecto colateral.
Debería emplearse antes de leer el estado con \s-1MTIOCGET\s+1.
.IP MTOFFL
Rebobina y apaga la unidad.
.IP MTRESET
Pone la unidad en el estado inicial.
.IP MTRETEN
Retensiona la cinta.
.IP MTREW
Rebobina.
.IP MTSEEK
Busca y va al número de bloque especificado en
.BR mt_count .
Esta operación requiere bien una unidad SCSI-2 que admita la orden
\s-1LOCATE\s+1 (dirección específica del dispositivo), bien una unidad
SCSI-1 compatible con Tandberg (Tandberg, Archive Viper, Wangtek, ... ).
El número de bloque debería ser uno previamente devuelto por
\s-1MTIOCPOS\s+1 si se utilizan direcciones específicas del dispositivo.
.IP MTSETBLK
Establece la longitud de bloque de la unidad al valor especificado en
.BR mt_count .
Una longitud de bloque cero pone la unidad en modo de tamaño de bloque
variable.
.IP MTSETDENSITY
Pone la densidad de la cinta según el código en
.BR mt_count .
Los códigos de densidad soportados por una unidad se pueden encontrar en
la documentación de la unidad.
.IP MTSETPART
La partición activa se cambia a
.B mt_count .
Las particiones se numeran a partir de cero. Esta orden no se permite para
una unidad a menos que se habilite el soporte de particiones para la
unidad (ver MT_ST_CAN_PARTITIONS más abajo).
.IP MTUNLOAD
Ejecuta la orden SCSI de descarga (no expulsa la cinta).
.IP MTUNLOCK
Desbloquea la puerta de la unidad de cinta.
.IP MTWEOF
Escribe
.B mt_count
marcas de fichero.
.IP MTWSM
Escribe
.B mt_count
marcas de conjunto.
.PD
.PP
Operaciones de Cinta Magnética para configurar las opciones del dispositivo
(a realizar por el superusuario):
.PD 0
.IP MTSETDRVBUFFER 8
Establece varias opciones de la unidad y el manejador según los bits
codificados en
.BR mt_count .
Éstas consisten en el modo de uso de buffers de la unidad, 13 opciones
booleanas del manejador, el umbral de escritura del buffer, valores por
defecto del tamaño de bloque y de densidad y plazos de tiempo (sólo en
núcleos >= 2.1).
Una única operación puede afectar a un único elemento de la lista de debajo
(los booleanos cuentan como un elemento).
.PD
.IP
Un valor que tenga ceros en los 4 bits más altos se empleará para
establecer el modo de tamponamiento de la unidad.
Los modos de tamponamiento son:
.RS 12
.IP 0 4
La unidad no informará del estado \s-1GOOD\s+1 en órdenes de escritura
hasta que los bloques de datos se escriban realmente en el material magnético.
.PD 0
.IP 1
La unidad puede devolver un estado \s-1GOOD\s+1 en órdenes de
escritura tan pronto como todos los datos se hayan transferido al
búfer interno de la unidad.
.IP 2
La unidad puede devolver un estado \s-1GOOD\s+1 en órdenes de
escritura tan pronto como (a) todos los datos se hayan transferido al
búfer interno del manejador, y (b) todos los datos en búferes,
provinientes de iniciadores diferentes, hayan sido bien escritos en el
material magnético.
.PD
.RE
.IP ""
Para controlar el umbral de escritura, el valor en
.B mt_count
debe incluir la constante
\s-1MT_ST_WRITE_THRESHOLD\s+1 aplicándole el operador de bits O
inclusivo con un número de bloque en los 28 bits de más bajo orden.
El número de bloque se refiere a bloques de 1024 bytes, no al tamaño
de bloque físico de la cinta.
El umbral no puede exceder el tamaño del búfer interno del manejador
(vea
.BR \s-1DESCRIPCIÓN\s+1 ,
arriba).
.IP
Para activar y desactivar las opciones booleanas el valor en
.B mt_count
debe incluir una de las constantes \s-1MT_ST_BOOLEANS\s+1,
\s-1MT_ST_SETBOOLEANS\s+1, \s-1MT_ST_CLEARBOOLEANS\s+1 o
\s-1MT_ST_BOOLEANS\s+1 operada con un O lógico inclusivo a nivel de bits con
cualquier combinación de las siguientes opciones, según se desee.
Usando \s-1MT_ST_BOOLEANS\s+1 se pueden asignar a las opciones los valores
definidos en los bits correspondientes. Con \s-1MT_ST_SETBOOLEANS\s+1
se pueden configurar las opciones de forma selectiva y selectivamente
borradas con \s-1MT_ST_DEFBOOLEANS\s+1.
.IP ""
Las opciones por defecto para un dispositivo de cinta se configuran con
\s-1MT_ST_DEFBOOLEANS\s+1. Un dispositivo de cinta no activo (por ejemplo,
un dispositivo con número menor 32 o 160) se activa cuando sus opciones por
defecto se definen por primera vez. Un dispositivo activado herenda del
dispositivo activado durante el arranque las opciones no configuradas
explícitamente.
.IP ""
Las opciones booleanas son:
.IP
.PD 0
.RS
.IP "\s-1MT_ST_BUFFER_WRITES\s+1  (Por omisión: verdad)"
Todas las operaciones de escritura van a través de búferes en el modo de
bloque fijo.
Si esta opción es falsa y la unidad emplea un tamaño de bloque fijo,
entonces todas las operaciones de escritura deben ser un múltiplo del
tamaño de bloque. Esta opción debe ponerse como falsa para escribir
confiablemente archivos multivolúmenes.
.IP "\s-1MT_ST_ASYNC_WRITES\s+1  (Por omisión: verdad)"
Cuando esta opción es verdad, las operaciones de escritura regresan
inmediatamente sin esperar que los datos se transfieran a la unidad si
los datos caben en el búfer del manejador.
El umbral de escritura determina cuán lleno debe estar el búfer antes
de que se dé una nueva orden de escritura SCSI.
Cualquier error devuelto por la unidad se mantendrá en espera hasta la
siguiente operación.
Esta opción debe ponerse como falsa para escribir
confiablemente archivos multivolúmenes.
.IP "\s-1MT_ST_READ_AHEAD\s+1  (Por omisión: verdad)"
Esta opción hace que el manejador proporcione un búfer para la
lectura, y lectura por adelantado en el modo de bloque fijo.
Si esta opción es falsa y la unidad emplea un tamaño de bloque fijo,
entonces todas las operaciones de lectura deben ser para un múltiplo
del tamaño de bloque.
.IP "\s-1MT_ST_TWO_FM\s+1  (Por omisión: falso)"
Esta opción modifica el comportamiento del manejador cuando un
fichero se cierra. La acción normal es escribir una simlpe marca de
fichero. Si la opción es verdad el manejador escribirá dos marcas de
fichero y hará un espacio atrás sobre el segundo.
.PD
.IP
Nota:
Esta opción no debería ponerse a verdad para unidades de cinta QIC
puesto que son incapaces de sobreescribir una marca de fichero.
Estas unidades detectan el fin de datos grabados mirando si hay cinta en
blanco en vez de dos marcas de fichero consecutivas. La mayoría de las otras
unidades actuales también detectan el final de los datos grabados y el uso
de dos marcas de fichero es normalmente necesario sólo al intercambiar
cintas con algunos otros sistemas.
.PP
.PD 0
.IP "\s-1MT_ST_DEBUGGING\s+1  (Por omisión: falso)"
Esta opción activa varios mensajes de depuración del manejador (sólo
es efectiva si se compiló la unidad con \s-1DEBUG\s+1 definida a un valor no
cero).
.IP "\s-1MT_ST_FAST_EOM\s+1  (Por omisión: falso)"
Esta opción hace que la operación \s-1MTEOM\s+1 se envíe directamente
a la unidad, acelerando potencialmente la operación pero haciendo que
el manejador pierda la pista del número de fichero en curso
normalmente devuelto por la petición \s-1MTIOCGET\s+1.
Si \s-1MT_ST_FAST_EOM\s+1 es falso el manejador responderá a una
petición \s-1MTEOM\s+1 saltando hacia adelante sobre los ficheros.
.IP "\s-1MT_ST_AUTO_LOCK\s+1 (Por omisión: falso)"
Cuando esta opción es verdad, la puerta de la unidad se bloquea cuando se
abre el dispositivo y se desbloquea cuando se cierra.
.IP "\s-1MT_ST_DEF_WRITES\s+1 (Por omisión: falso)"
Las opciones de cinta (tamaño de bloque, modo, compresión, etc.) pueden
cambiar al cambiar de un dispositivo ligado a una unidad a otro dispositivo
ligado a la misma unidad dependiendo de cómo se definan los dispositivos.
Esta opción define cuándo es el manejador el que fuerza los cambios usando
órdenes SCSI y cúando se confía en las capacidades del autodetección de las
unidades. Si esta opción es falsa, el manejador envía inmediatamente órdenes
SCSI cuando se cambia el dispositivo. Si la opción es verdad, no se envían
órdenes SCSI hasta que se solicite una escritura. En este caso se permite al
firmware de la unidad detectar la estructura de la cinta al leer y sólo se
usan las órdenes SCSI para asegurarse de que una cinta se escribe según la
especificación correcta.
.IP "\s-1MT_ST_CAN_BSR\s+1 (Por omisión: falso)"
Algunas veces, cuando se usa lectura por adelantado, se debe retrocer la cinta a
la posición correcta cuando se cierra el dispositivo y, para este propósito,
se utiliza la orden SCSI para retrocer sobre los registros. Algunas unidades
más antiguas no pueden procesar esta orden de manera fiable y se puede usar
esta opción para mandar al manejador no usar la orden. El resultado final
es que, con lectura por adelantado y el modo de bloque fijo, la cinta podría no
estar correctamente posicionada dentro de un fichero cuando el dispositivo
se cierra.
.IP "\s-1MT_ST_NO_BLKLIMS\s+1 (Por omisión: falso)"
Algunas unidades no aceptan la orden SCSI READ BLOCK LIMITS. Si se usa esto,
el manejador no usará la orden. El inconveniente es que el manejador no
puede comprobar antes de enviar órdenes si el tamaño de bloque seleccionado
es aceptable por la unidad.
.IP "\s-1MT_ST_CAN_PARTITIONS\s+1 (Por omisión: falso)"
Esta opción habilita el soporte de varias particiones dentro de una cinta.
La opción se aplica a todos los dispositivos ligados a la unidad.
.IP "\s-1MT_ST_SCSI2LOGICAL\s+1 (Default: false)"
Esta opción obliga al manejador a usar las direcciones lógicas de bloques
definidas en el estándar SCSI-2 al realizar la búsqueda y comunicar
operaciones (tanto con la órden MTSEEK como con MTIOCPOS y al cambiar la
partición de la cinta). En otro caso, se usan las direcciones específicas
del dispositivo. Es muy recomendable activar esta opción si la unidad
soporta direcciones lógicas ya que también cuentan marcas de fichero. Hay
algunos dispositivos que sólo soportan direcciones lógicas de bloque.
.IP "\s-1MT_ST_SYSV\s+1 (Por omisión: falso)"
Cuando se habilita esta opción, los dispositivos de cinta usan la semántica
de SystemV. En caso contrario, se usa la semántica BSD. La diferencia más
importante entre ambas semánticas es qué ocurre cuando un dispositivo
utilizado para lectura se cierra: en la semántica SYSV la cinta se avanza
hasta pasar la siguiente marca de fichero si esto no ha ocurrido ya al usar el
dispositivo. En la semántica BSD la posición de la cinta no cambia.
.IP \s-1EJEMPLO\s+1
.nf
.ta +.4i +.7i +1i
.BI "struct mtop " mt_cmd ;
.IB "mt_cmd.mt_op" " = \s-1MTSETDRVBUFFER\s+1;"
.IB "mt_cmd.mt_count" " = \s-1MT_ST_BOOLEANS\s+1 |"
.B "		\s-1MT_ST_BUFFER_WRITES\s+1 |"
.B "		\s-1MT_ST_ASYNC_WRITES\s+1;"
.BI "ioctl(" fd ", \s-1MTIOCTOP\s+1, &" mt_cmd ");"
.fi
.RE
.PD
.IP ""
El tamaño de bloque por defecto para un dispositivo se puede configurar con
\s-1MT_ST_DEF_BLKSIZE\s+1 y el código de densidad por defecto se puede
configurar con \s-1MT_ST_DEFDENSITY\s+1. Los valores para los parámetros se
operan con un O lógico con el código de operación.
.IP ""
Con los núcleos 2.1.x y posteriores, los valores de los plazos de tiempo
(timeout) se pueden configurar con la suborden \s-1MT_ST_SET_TIMEOUT\s+1
operado con un O lógico con el plazo de tiempo en segundos.
El plazo largo de tiempo (usado para los rebobinados y otras órdenes que
pueden tardar mucho tiempo) se puede configurar con
\s-1MT_ST_SET_LONG_TIMEOUT\s+1. Los valores por defecto del núcleo son muy
grandes para asegurarse de que una órden exitosa no será cancelada para
ninguna unidad. Debido a esto, el manejador puede parecer atascado aun
cuando sólo esté esperando a que se cumpla el plazo de tiempo. Estas órdenes
se pueden usar para configurar más valores útiles para una unidad
específica. Los plazos de tiempo configurados para un dispostivo se aplican
a todos los dispositivos ligados a la misma unidad.
.SS "\s-1MTIOCGET\s+1 \- Obtiene el estado"
.PP
Esta petición toma un argumento de tipo
.BR "(struct mtget *)" .
.PP
.nf
/* estructura para \s-1MTIOCGET\s+1 - orden estado de cinta mag */
struct mtget {
	long	mt_type;
	long	mt_resid;
	/* los ss. registros son dependientes del dispositivo */
	long	mt_dsreg;
	long	mt_gstat;
	long	mt_erreg;
	/* Los ss. 2 campos no se usan siempre */
	daddr_t	mt_fileno;
	daddr_t	mt_blkno;
};
.fi
.IP \fBmt_type\fP 11
El fichero de cabecera define muchos valores para
.BR mt_type ,
pero el manejador actual informa sólo de los tipos genéricos
\s-1MT_ISSCSI1\s+1 (cinta genérica SCSI-1) y \s-1MT_ISSCSI2\s+1 (cinta
genérica SCSI-2).
.PD 0
.IP \fBmt_resid\fP
contiene el número de partición actual de la cinta.
.IP \fBmt_dsreg\fP
informa de los valores actuales de la unidad para el tamaño de bloque
(en los 24 bits más bajos) y para la densidad (en los 8 bits más altos).
Estos campos están definidos por
\s-1MT_ST_BLKSIZE_SHIFT\s+1, \s-1MT_ST_BLKSIZE_MASK\s+1,
\s-1MT_ST_DENSITY_SHIFT\s+1, y \s-1MT_ST_DENSITY_MASK\s+1.
.IP \fBmt_gstat\fP
da información de estado genérica (independiente del dispositivo).
El fichero de cabecera define macros para comprobar estos bits de estado:
.RS
.HP 4
\s-1GMT_EOF(\s+1\fIx\fP\s-1)\s+1:
La cinta está posicionada justo tras una marca de fichero
(siempre falso tras una operación \s-1MTSEEK\s+1).
.HP
\s-1GMT_BOT(\s+1\fIx\fP\s-1)\s+1:
La cinta está posicionada al principio del primer fichero (siempre
falso tras una operación \s-1MTSEEK\s+1).
.HP
\s-1GMT_EOT(\s+1\fIx\fP\s-1)\s+1:
Una operación de cinta ha alcanzado el Final de Cinta físico.
.HP
\s-1GMT_SM(\s+1\fIx\fP\s-1)\s+1:
La cinta está posicionada actualmente en una marca de conjunto
(siempre falso tras una operación \s-1MTSEEK\s+1).
.HP
\s-1GMT_EOD(\s+1\fIx\fP\s-1)\s+1:
La cinta está posicionada al final de datos grabados.
.HP
\s-1GMT_WR_PROT(\s+1\fIx\fP\s-1)\s+1:
La unidad está protegida de escritura.
Para algunas unidades esto también puede significar que no admite
escribir en el tipo de medio físico actual.
.HP
\s-1GMT_ONLINE(\s+1\fIx\fP\s-1)\s+1:
El último
.B open()
encontró a la unidad con una cinta puesta y lista para la operación.
.HP
\s-1GMT_D_6250(\s+1\fIx\fP\s-1)\s+1,
\s-1GMT_D_1600(\s+1\fIx\fP\s-1)\s+1,
\s-1GMT_D_800(\s+1\fIx\fP\s-1)\s+1: 
Esta información de estado \(lqgenérica\(rq informa de la densidad
actual para unidades de cinta de 9 pistas y \(12 in. solamente.
.HP
\s-1GMT_DR_OPEN(\s+1\fIx\fP\s-1)\s+1:
La unidad no tiene una cinta puesta.
.HP
\s-1GMT_IM_REP_EN(\s+1\fIx\fP\s-1)\s+1:
Modo de informe inmediato. Este bit se activa si no hay garantías de que los
datos se hayan escrito físicamente en la cinta cuando la llamada de
escritura termina. Se le asigna el valor cero sólo cuando el manejador no
usa buffers para los datos y la unidad no está configurada para usar buffers
de datos.
.RE
.IP \fBmt_erreg\fP
El único campo definido en
.B mt_erreg
es el número de errores recuperados en los 16 bits de más bajo orden
(como se define por
\s-1MT_ST_SOFTERR_SHIFT\s+1 y \s-1MT_ST_SOFTERR_MASK\s+1).
Debido a inconsistencias en la forma en que las unidades informan de
errores recuperados, este número a menudo no es mantenido (la mayoría de las
unidades no informan, por defecto, de errores leves pero esto se puede
cambiar con una orden SCSI MODE SELECT).
.IP \fBmt_fileno\fP
devuelve el número de fichero actual (empezando por cero).
Este valor se pone a \-1 cuando el número de fichero se desconoce
(p. ej. después de
\s-1MTBSS\s+1
o \s-1MTSEEK\s+1).
.IP \fBmt_blkno\fP
da el número de bloque (empezando por cero) dentro del fichero actual.
Este valor se pone a \-1 cuando el número de bloque se desconoce
(p. ej. después de
\s-1MTBSF\s+1,
\s-1MTBSS\s+1, o \s-1MTSEEK\s+1).
.PD
.SS "\s-1MTIOCPOS\s+1 \- Obtener la posición en la cinta"
.PP
Esta petición toma un argumento de tipo
.B "(struct mtpos *)"
y devuelve la noción que tiene el manejador del número de bloque de
cinta actual, que no es el mismo que
.B mt_blkno
devuelto por \s-1MTIOCGET\s+1.
Esta unidad debe ser de tipo SCSI-2 y debe admitir la orden
\s-1READ POSITION\s+1 (dirección específica del dispositivo)
o una unidad SCSI-1 compatible Tandberg (Tandberg, Archive
Viper, Wangtek, ... ).
.PP
.nf
/* estructura para \s-1MTIOCPOS\s+1 - orden obtener posición cinta mag. */
struct	mtpos {
	long 	mt_blkno;	/* número de bloque en curso */
};
.fi
.SH "VALOR DEVUELTO"
.IP EIO 14
La operación pedida no ha podido completarse.
.IP ENOSPC
Una operación de escritura no pudo completarse porque la cinta llegó
al final del material magnético.
.IP EACCES
Se intentó escribir o borrar una cinta protegida para escritura.
(Este error no se detecta durante
.BR open() .)
.IP EFAULT
Los parámetros de la orden apuntan a memoria que no pertenece al proceso
invocador.
.IP ENXIO
Durante la apertura, el dispositivo de cinta no existe.
.IP EBUSY
El dispositivo ya está en uso o el manejador ha sido incapaz de
reservar un búfer.
.IP EOVERFLOW
Se ha intentado leer o escribir un bloque de longitud variable que es
mayor que el búfer interno del manejador.
.IP EINVAL
Una llamada a
.B ioctl()
tenía un argumento incorrecto, o un tamaño de bloque pedido era ilegal.
.IP ENOSYS
.B ioctl() 
desconocido.
.IP EROFS
Se ha intentado realizar una operación `open' con O_WRONLY o O_RDWR cuando
la cinta de la unidad está protegida contra escritura.
.SH FICHEROS
/dev/st*  : dispositivos de cinta SCSI con autorebobinado
.br
/dev/nst* : dispositivos de cinta SCSI sin rebobinado
.SH AUTOR
El manejador ha sido escrito por by Kai M\(:akisara (Kai.Makisara@metla.fi)
a partir del manejador escrito por Dwayne Forsyth. Varias otras personas
también han contribuido al manejador.
.SH "VÉASE TAMBIÉN"
.BR mt (1)
.PP
El fichero README.st de los fuentes del núcleo contiene la información más
reciente del manejador y sus posibilidades de configuración.
.SH OBSERVACIONES
1. Cuando se intercambian datos entre sistemas, ambos sistemas deben
coincidir en el tamaño físico del bloque de la cinta. Los parámetros de una
unidad después del arranque no son, con frecuencia, los que la mayoría de
los sistemas operativos usan con estos dispositivos. La mayoría de los
sistemas usan unidades en modo de bloque variable si la unidad soporta ese
modo. Esto es aplicable a la mayoría de las unidades modernas, incluyendo
DATs, unidades de recorrido helicoidal de 8mm, DLTs, etc. Puede ser
aconsejable usar estas unidades en modo variable también en Linux (es decir,
use MTSETBLK o MTSETDEFBLK en el arranque del sistema para
establecer el modo), al menos cuando se intercambien datos con sistemas
externos. El inconveniente de esto es que se debe usar un tamaño de bloque
de cinta bastante largo para obtener tasas de transferencia de datos
aceptables sobre el bus SCSI.
2. Muchos programas (por ejemplo, tar) permiten al usuario especificar el
tamaño de bloque en la línea de órdenes. Dese cuenta que esto determina el
tamaño físico del bloque en la cinta sólo en el modo de bloque variable.
.PP
3. Para usar unidades de cinta SCSI, el manejador básico de SCSI, el
manejador de un adaptador SCSI y el manejador de cintas SCSI deben estar
bien configurados dentro del núcleo o cargados como módulos. Si el manejador
de cintas SCSI no está presente, se reconoce la unidad pero el soporte de
cinta descrito en esta página no está disponible.
.PP
4. El manejador escribe los mensajes de error a la consola/registro(log).
Los códigos SENSE escritos en algunos mensajes se traducen automática a texto
si se han habilitado en la configuración del núcleo los mensajes SCSI
prolijos.
.SH COPYRIGHT
Copyright \(co 1995 Robert K. Nichols.
.br
Copyright \(co 1999 Kai M\(:akisara.
.PP
Se da permiso para hacer y distribuir copias idénticas de este manual
supuesto que la nota de copyright y ésta de permiso se preservan en
todas las copias.
El fichero de cabecera del código fuente contiene permisos adicionales.
 |