Provided by: manpages-es_1.55-9_all bug

NOMBRE

       st - dispositivo de cinta magnética SCSI

SINOPSIS

       #include <sys/mtio.h>

       int ioctl(int fd, int request [, (void *)arg3]);
       int ioctl(int fd, MTIOCTOP, (struct mtop *)mt_cmd);
       int ioctl(int fd, MTIOCGET, (struct mtget *)mt_status);
       int ioctl(int fd, MTIOCPOS, (struct mtpos *)mt_pos);

DESCRIPCIÓN

       El  manejador  (driver) 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 “acceso secuencial”.  El
       manejador st emplea el número mayor de dispositivo 9.

       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, n,  y  los  números  de  dispositivo  “sin
       rebobinado”,  (n+128).   A  los  dispositivos  abiertos que utilicen el
       número de dispositivo principal se les enviará una orden REWIND  cuando
       se  cierren.   A  los  dispositivos  abiertos que utilicen el número de
       dispositivo “sin rebobinado” 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).

       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).

       Normalmente los dispositivos se crean con:
              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

       No existe el dispositivo de bloque correspondiente.

       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).

       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).

       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  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.

       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).

       El majenador soporta 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.

       El dispositivo /dev/tape se crea normalmente como un  enlace  físico  o
       simbólico al dispositivo de cinta predeterminado en el sistema.

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.

       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.

       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.

       Automáticamente  se  escribe  una  marca  de  fichero en la cinta si la
       última operación de cinta antes de cerrar era un escritura.

       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.

IOCTLS

       El  manejador  admite  tres  peticiones  ioctl.   Las   peticiones   no
       reconocidas  por  el  manejador  st  se  pasan  al manejador SCSI.  Las
       definiciones de abajo son de /usr/include/linux/mtio.h:

   MTIOCTOP - Efectuar una operación en la cinta
       Esta petición toma un argumento de tipo (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.

       /* Estructura para MTIOCTOP - orden de op. de cinta mag.: */
       struct mtop {
           short  mt_op;    /* operationes definidas abajo */
           int    mt_count; /* cuántas de ellas */
       };

       Operaciones de Cinta Magnética para el uso normal de una cinta:
       MTBSF         Espacio atrás sobre mt_count marcas de fichero.
       MTBSFM        Espacio  atrás  sobre   mt_count   marcas   de   fichero.
                     Reposiciona la cinta a la parte EOT de la última marca de
                     fichero.
       MTBSR         Espacio  atrás  sobre  mt_count  registros  (bloques   de
                     cinta).
       MTBSS         Espacio atrás sobre mt_count marcas de conjunto.
       MTCOMPRESSION Habilita la compresión de los datos de la cinta dentro de
                     la unidad  si  mt_count  no  es  cero  y  deshabilita  la
                     compresión  si  mt_count  es cero. Esta orden usa el MODO
                     página 15 (‘MODE page 15’) soportado por  la  mayoría  de
                     DATs.
       MTEOM         Ir al fin del material grabado (para añadir ficheros).
       MTERASE       Borrar cinta.
       MTFSF         Espacio atrás sobre mt_count marcas de fichero.
       MTFSFM        Espacio   atrás   sobre   mt_count   marcas  de  fichero.
                     Reposiciona la cinta a la parte BOT de la última marca de
                     fichero.
       MTFSR         Espacio   atrás  sobre  mt_count  registros  (bloques  de
                     cinta).
       MTFSS         Espacio atrás sobre mt_count marcas de conjunto.
       MTLOAD        Ejecuta la orden SCSI de carga. Se  dispone  de  un  caso
                     especial  para  algunos autocargadores HP. Si 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.
       MTLOCK        Bloquea la puerta de la unidad de cinta.
       MTMKPART      Formatea la cinta en una o dos particiones.  Si  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
                     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).
       MTNOP         No op. -  vuelca  el  búfer  del  manejador  como  efecto
                     colateral.  Debería emplearse antes de leer el estado con
                     MTIOCGET.
       MTOFFL        Rebobina y apaga la unidad.
       MTRESET       Pone la unidad en el estado inicial.
       MTRETEN       Retensiona la cinta.
       MTREW         Rebobina.
       MTSEEK        Busca y va al número de bloque especificado en  mt_count.
                     Esta operación requiere bien una unidad SCSI-2 que admita
                     la orden LOCATE (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 MTIOCPOS si se
                     utilizan direcciones específicas del dispositivo.
       MTSETBLK      Establece la longitud de bloque de  la  unidad  al  valor
                     especificado  en  mt_count.   Una longitud de bloque cero
                     pone la unidad en modo de tamaño de bloque variable.
       MTSETDENSITY  Pone la densidad de la cinta según el código en mt_count.
                     Los  códigos  de  densidad  soportados  por una unidad se
                     pueden encontrar en la documentación de la unidad.
       MTSETPART     La  partición  activa  se  cambia  a  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).
       MTUNLOAD      Ejecuta la orden SCSI de descarga (no expulsa la  cinta).
       MTUNLOCK      Desbloquea la puerta de la unidad de cinta.
       MTWEOF        Escribe mt_count marcas de fichero.
       MTWSM         Escribe mt_count marcas de conjunto.

       Operaciones  de  Cinta  Magnética  para  configurar  las  opciones  del
       dispositivo (a realizar por el superusuario):
       MTSETDRVBUFFER
               Establece varias opciones de la unidad y el manejador según los
               bits  codificados  en  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).

               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:

                   0   La  unidad  no  informará del estado GOOD en órdenes de
                       escritura hasta que los bloques de  datos  se  escriban
                       realmente en el material magnético.
                   1   La  unidad  puede devolver un estado GOOD en órdenes de
                       escritura tan pronto como  todos  los  datos  se  hayan
                       transferido al búfer interno de la unidad.
                   2   La  unidad  puede devolver un estado GOOD 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.

               Para controlar el umbral de escritura,  el  valor  en  mt_count
               debe  incluir la constante MT_ST_WRITE_THRESHOLD 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 DESCRIPCIÓN, arriba).

               Para activar y desactivar las opciones booleanas  el  valor  en
               mt_count  debe  incluir  una  de las constantes MT_ST_BOOLEANS,
               MT_ST_SETBOOLEANS, MT_ST_CLEARBOOLEANS o MT_ST_BOOLEANS operada
               con  un  O  lógico  inclusivo  a  nivel  de  bits con cualquier
               combinación de las siguientes opciones, según se desee.  Usando
               MT_ST_BOOLEANS  se  pueden  asignar  a las opciones los valores
               definidos en los bits correspondientes.  Con  MT_ST_SETBOOLEANS
               se   pueden  configurar  las  opciones  de  forma  selectiva  y
               selectivamente borradas con MT_ST_DEFBOOLEANS.

               Las opciones por  defecto  para  un  dispositivo  de  cinta  se
               configuran  con  MT_ST_DEFBOOLEANS.  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.

               Las opciones booleanas son:

               MT_ST_BUFFER_WRITES  (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.
               MT_ST_ASYNC_WRITES  (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.
               MT_ST_READ_AHEAD  (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.
               MT_ST_TWO_FM  (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.

                      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.

               MT_ST_DEBUGGING  (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
                      DEBUG definida a un valor no cero).
               MT_ST_FAST_EOM  (Por omisión: falso)
                      Esta  opción  hace  que  la  operación  MTEOM  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 MTIOCGET.  Si  MT_ST_FAST_EOM  es  falso  el
                      manejador responderá a una petición MTEOM saltando hacia
                      adelante sobre los ficheros.
               MT_ST_AUTO_LOCK (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.
               MT_ST_DEF_WRITES (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.
               MT_ST_CAN_BSR (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.
               MT_ST_NO_BLKLIMS (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.
               MT_ST_CAN_PARTITIONS (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.
               MT_ST_SCSI2LOGICAL (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.
               MT_ST_SYSV (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.
               EJEMPLO
                      struct mtop mt_cmd;
                      mt_cmd.mt_op = MTSETDRVBUFFER;
                      mt_cmd.mt_count = MT_ST_BOOLEANS |
                                 MT_ST_BUFFER_WRITES |
                                 MT_ST_ASYNC_WRITES;
                      ioctl(fd, MTIOCTOP, &mt_cmd);

               El tamaño de bloque por defecto para un  dispositivo  se  puede
               configurar  con  MT_ST_DEF_BLKSIZE  y el código de densidad por
               defecto se puede configurar con MT_ST_DEFDENSITY.  Los  valores
               para  los parámetros se operan con un O lógico con el código de
               operación.

               Con los núcleos 2.1.x y posteriores, los valores de los  plazos
               de  tiempo  (timeout)  se  pueden  configurar  con  la suborden
               MT_ST_SET_TIMEOUT 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  MT_ST_SET_LONG_TIMEOUT. 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.

   MTIOCGET - Obtiene el estado
       Esta petición toma un argumento de tipo (struct mtget *).

       /* estructura para MTIOCGET - 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;
       };

       mt_type    El  fichero  de cabecera define muchos valores para mt_type,
                  pero el manejador actual informa sólo de los tipos genéricos
                  MT_ISSCSI1  (cinta  genérica  SCSI-1)  y  MT_ISSCSI2  (cinta
                  genérica SCSI-2).
       mt_resid   contiene el número de partición actual de la cinta.
       mt_dsreg   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
                  MT_ST_BLKSIZE_SHIFT,                     MT_ST_BLKSIZE_MASK,
                  MT_ST_DENSITY_SHIFT, y MT_ST_DENSITY_MASK.
       mt_gstat   da  información  de  estado  genérica   (independiente   del
                  dispositivo).   El  fichero  de  cabecera define macros para
                  comprobar estos bits de estado:
                  GMT_EOF(x): La cinta está posicionada justo tras  una  marca
                      de fichero (siempre falso tras una operación MTSEEK).
                  GMT_BOT(x):  La  cinta  está  posicionada  al  principio del
                      primer  fichero  (siempre  falso  tras   una   operación
                      MTSEEK).
                  GMT_EOT(x):  Una operación de cinta ha alcanzado el Final de
                      Cinta físico.
                  GMT_SM(x): La cinta  está  posicionada  actualmente  en  una
                      marca  de  conjunto  (siempre  falso  tras una operación
                      MTSEEK).
                  GMT_EOD(x): La cinta está  posicionada  al  final  de  datos
                      grabados.
                  GMT_WR_PROT(x): 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.
                  GMT_ONLINE(x): El último open() encontró a la unidad con una
                      cinta puesta y lista para la operación.
                  GMT_D_6250(x), GMT_D_1600(x), GMT_D_800(x): Esta información
                      de  estado “genérica” informa de la densidad actual para
                      unidades de cinta de 9 pistas y ½ in. solamente.
                  GMT_DR_OPEN(x): La unidad no tiene una cinta puesta.
                  GMT_IM_REP_EN(x): 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.
       mt_erreg   El  único campo definido en mt_erreg es el número de errores
                  recuperados en los 16 bits de más bajo orden (como se define
                  por  MT_ST_SOFTERR_SHIFT  y  MT_ST_SOFTERR_MASK).   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).
       mt_fileno  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 MTBSS o MTSEEK).
       mt_blkno   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  MTBSF,  MTBSS,  o
                  MTSEEK).

   MTIOCPOS - Obtener la posición en la cinta
       Esta  petición toma un argumento de tipo (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 mt_blkno devuelto por MTIOCGET.  Esta unidad debe
       ser de tipo SCSI-2 y debe admitir la  orden  READ  POSITION  (dirección
       específica  del  dispositivo)  o  una unidad SCSI-1 compatible Tandberg
       (Tandberg, Archive Viper, Wangtek, ... ).

       /* estructura para MTIOCPOS - orden obtener posición cinta mag. */
       struct     mtpos {
           long   mt_blkno; /* número de bloque en curso */
       };

VALOR DEVUELTO

       EIO           La operación pedida no ha podido completarse.

       ENOSPC        Una operación de escritura no pudo completarse porque  la
                     cinta llegó al final del material magnético.

       EACCES        Se  intentó  escribir  o  borrar una cinta protegida para
                     escritura.  (Este error no se detecta durante open().)

       EFAULT        Los parámetros de la  orden  apuntan  a  memoria  que  no
                     pertenece al proceso invocador.

       ENXIO         Durante la apertura, el dispositivo de cinta no existe.

       EBUSY         El  dispositivo  ya  está  en  uso o el manejador ha sido
                     incapaz de reservar un búfer.

       EOVERFLOW     Se ha intentado leer o escribir  un  bloque  de  longitud
                     variable que es mayor que el búfer interno del manejador.

       EINVAL        Una llamada a ioctl() tenía un argumento incorrecto, o un
                     tamaño de bloque pedido era ilegal.

       ENOSYS        ioctl() desconocido.

       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.

FICHEROS

       /dev/st*  : dispositivos de cinta SCSI con autorebobinado
       /dev/nst* : dispositivos de cinta SCSI sin rebobinado

AUTOR

       El    manejador    ha    sido    escrito    por    by    Kai   Mäkisara
       (Kai.Makisara@metla.fi) a  partir  del  manejador  escrito  por  Dwayne
       Forsyth. Varias otras personas también han contribuido al manejador.

VÉASE TAMBIÉN

       mt(1)

       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.

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.

       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.

       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.

COPYRIGHT

       Copyright © 1995 Robert K. Nichols.
       Copyright © 1999 Kai Mäkisara.

       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.