st(4) Device Drivers Manual st(4) NOMBRE st - dispositivo de cinta magnetica SCSI SINOPSIS #include 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); DESCRIPCION El controlador (driver) st proporciona la interfaz para una variedad de dispositivos de cinta magnetica SCSI. Actualmente, toma el control de todos los dispositivos detectados de tipo "acceso secuencial". El controlador st emplea el numero mayor de dispositivo 9. Cada dispositivo utiliza ocho numeros menores de dispositivo. Los cinco bits mas bajos en los numeros menores se asignan secuencialmente en el orden en que se detectan. En la version 2.6 del nucleo, los bits por encima de los 8 menores se unen a los cinco menores para formar el numero de la cinta. Los numeros menores se pueden agrupar en dos conjuntos de cuatro numeros: los numeros menores de dispositivo (con autorebobinado) principales, n, y los numeros de dispositivo "sin rebobinado", (n+128). A los dispositivos abiertos que utilicen el numero de dispositivo principal se les enviara una orden REWIND cuando se cierren. A los dispositivos abiertos que utilicen el numero de dispositivo "sin rebobinado" no se les enviara 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 despues de la orden mt y la orden siguiente comienza desde el principio de la cinta). Dentro de cada grupo, hay disponibles cuatro numeros menores para definir dispositivos con diferentes caracteristicas (tamano de bloque, compresion, densidad, etc.). Cuando el sistema arranca, solo esta disponible el primer dispositivo. Los otros tres se activan cuando se definen las carcteristicas por defecto (ver mas abajo). (Cambiando las constantes en tiempo de compilacion, es posible cambiar el equilibrio entre el numero maximo de unidades de cinta y el numero de numeros menores para cada unidad. La asignacion por defecto permite controlar 32 dispositivos de cinta. Por ejemplo, es posible controlar hasta 64 unidades de cinta con 2 numeros 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 controlador usa un buffer interno que tiene que ser lo suficientemente grande para contener, al menos, un bloque de la cinta. En los nucleos anteriores al 2.1.121, el buffer se reserva como un bloque contiguo. Esto limita el tamano de bloque al mayor bloque contiguo de memoria que el codigo de asignacion de memoria del nucleo puede proporcionar. Actualmente, el limite es de 128 kB para arquitecturas de 32 bits y 256 kB para arquitecturas de 64 bits. En nucleos posteriores el controlador reserva el buffer en varias partes si es necesario. Por defecto, el numero maximo de partes es de 16. Esto significa que el tamano maximo de bloques es muy grande (2 MB si es posible una asignacion de 16 bloques de 128 kB). El tamano del buffer interno del controlador viene determinado por una constante durante la compilacion que se puede modificar con una opcion de inicio del nucleo. Aparte de esto, el controlador intenta reservar un buffer temporal mayor en tiempo de ejecucion si es necesario. Sin embargo, la asignacion en tiempo de ejecucion de grandes bloques contiguos de memoria puede fallar y es aconsejable no confiar demasiado en la asignacion dinamica de buffers con nucleos anteriores al 2.1.121 (esto se aplica tambien a la carga por demanda del controlador con kerneld o kmod). El controlador no soporta especificamente ninguna marca o modelo de unidad de cinta. Despues 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 explicitas a ioctl(2) y permanecen activas cuando el dispositivo se cierra y se vuelve a abrir. La configuracion 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 tamano de bloque concreto y otro que escribe en modo de bloque variable (si la unidad de cinta soporta ambos modos). El controlador puede trabajar con particiones de cinta si la unidad puede hacerlo. (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 logicas dentro de un mismo medio). El soporte de particiones se debe habilitar con ioctl(2). La posicion de cinta se conserva dentro de cada particion durante los cambios de particion. La particion usada para las operaciones de cinta subsiguientes se selecciona con ioctl(2). El cambio de particion se ejecuta junto con la siguiente operacion de cinta para evitar movimientos de cinta innecesarios. El numero maximo de particiones en una cinta es definido por una constante en tiempo de compilacion (originalmente cuatro). El controlador contiene un ioctl(2) que puede formatear una cinta con una o dos particiones. El dispositivo /dev/tape se crea normalmente como un enlace fisico o simbolico al dispositivo de cinta predeterminado en el sistema. A partir de la version 2.6.2 del nucleo, el controlador realiza la exportacion de los dispositivos conectados y algunos parametros asignados a ellos en el directorios sysfs /sys/class/scsi_tape Transferencia de datos El controlador 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 tamano especificado y el tamano 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 numero de bytes determina el tamano del bloque de cinta correspondiente. Dese cuenta que los bloques en la cinta no contienen ninguna informacion sobre el modo de escritura: cuando se lee, lo unico importante es usar ordenes que acepten los tamanos de los bloques en la cinta. En el modo de bloque variable la cantidad de bytes leidos no tiene que coincidir exactamente con el tamano de bloque de la cinta. Si la cantidad de bytes es mayor que el siguiente bloque de la cinta, el controlador devuelve los datos y la funcion devuelve el tamano real de bloque. Si el tamano de bloque es mayor que la cantidad de bytes, se emite un mensaje de error. En el modo de bloque fijo, la cantidad de bytes a leer puede ser arbitraria si se habilita el uso de buffers, o un multiplo del tamano de bloque de la cinta si se deshabilita el uso de buffers. Los nucleos 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 nucleo anterior al 2.1.121 con uso de buffers deshabilitado o un nucleo nuevo) la cantidad de bytes a escribir debe ser un multiplo del tamano de bloque de la cinta. En la version 2.6 del nucleo, el controlador intentara usar transferencias directas entre el buffer y el dispositivo. Si esto no es posible, se emplea el buffer interno del controlador. El hecho de no poder emplear transferencias directas puede deberse a una alineacion incorrecta del buffer del usuario (configurado en 512 bytes por defecto pero el controlador HBA puede modificarlo), a que una o mas paginas del buffer del usuario sea inaccesibles por parte del adaptador SCSI, etc... Automaticamente se escribe una marca de fichero en la cinta si la ultima operacion 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 proxima 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 controlador admite tres peticiones ioctl(2). Las peticiones no reconocidas por el controlador st se pasan al controlador SCSI. Las definiciones de abajo son de /usr/include/linux/mtio.h: MTIOCTOP -- Efectuar una operacion en la cinta Esta peticion toma un argumento de tipo (struct mtop *). No todas las unidades de cinta admiten todas las operaciones. El controlador retorna un error EIO si la unidad rechaza una operacion. /* Estructura para MTIOCTOP - orden de op. de cinta mag.: */ struct mtop { short mt_op; /* operationes definidas abajo */ int mt_count; /* cuantas de ellas */ }; Operaciones de Cinta Magnetica para el uso normal de una cinta: MTBSF Espacio atras sobre mt_count marcas de archivo. MTBSFM Espacio atras sobre mt_count marcas de fichero. Reposiciona la cinta a la parte EOT de la ultima marca de fichero. MTBSR Espacio atras sobre mt_count registros (bloques de cinta). MTBSS Espacio atras sobre mt_count marcas de conjunto. MTCOMPRESSION Habilita la compresion de los datos de la cinta dentro de la unidad si mt_count no es cero y deshabilita la compresion si mt_count es cero. Esta orden usa el MODO pagina 15 (`MODE page 15') soportado por la mayoria de DATs. MTEOM Ir al fin del material grabado (para anadir ficheros). MTERASE Borra la cinta. En nucleos 2.6, se hara un borrado breve (simplemente marcando la cinta como vacia) si el argumento es cero. En cualquier otro caso, se hace un borrado largo (borrar todo). MTFSF Espacio atras sobre mt_count marcas de archivo. MTFSFM Espacio atras sobre mt_count marcas de fichero. Reposiciona la cinta a la parte BOT de la ultima marca de fichero. MTFSR Espacio atras sobre mt_count registros (bloques de cinta). MTFSS Espacio atras 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 mas un numero, el numero se envia a la unidad para controlar al autocargador. MTLOCK Bloquea la tapa de la unidad de cinta. MTMKPART Formatea la cinta en una o dos particiones. Si mt_count es positivo, da el tamano de la primera particion y la segunda particion contiene el resto de la cinta. Si mt_count es cero, la cinta se formatea en una particion. A partir de Linux 4.6, un valor negativo de mt_count define el tamano de la particion 0 siendo el resto de la cinta la particion 1. El orden fisico de las particiones depende del disco.Esta orden no esta permitida para una unidad a menos que se habilite el soporte de particiones para la unidad (consulte MT_ST_CAN_PARTITIONS mas adelante). MTNOP No op.--vuelca el bufer del controlador como efecto colateral. Deberia 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 numero de bloque especificado en mt_count. Esta operacion requiere bien una unidad SCSI-2 que admita la orden LOCATE (direccion especifica del dispositivo), bien una unidad SCSI-1 compatible con Tandberg (Tandberg, Archive Viper, Wangtek, ... ). El numero de bloque deberia ser uno previamente devuelto por MTIOCPOS si se utilizan direcciones especificas 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 tamano de bloque variable. MTSETDENSITY Pone la densidad de la cinta segun el codigo en mt_count. Los codigos de densidad soportados por una unidad se pueden encontrar en la documentacion de la unidad. MTSETPART La particion 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 mas abajo). MTUNLOAD Ejecuta la orden SCSI de descarga (no expulsa la cinta). MTUNLOCK Desbloquea la tapa de la unidad de cinta. MTWEOF Escribe mt_count marcas de archivo. MTWSM Escribe mt_count marcas de conjunto. Operaciones de Cinta Magnetica para configurar las opciones del dispositivo (a realizar por el administrador): MTSETDRVBUFFER Establece varias opciones de la unidad y el controlador segun los bits codificados en mt_count. Estas consisten en el modo de uso de buffers de la unidad, varias opciones booleanas del controlador, el umbral de escritura del buffer, valores por defecto del tamano de bloque y de densidad y plazos de tiempo (solo a partir de la version 2.1 de Linux). Una unica operacion puede afectar a un unico elemento de la lista de debajo (los booleanos cuentan como un elemento). Un valor que tenga ceros en los 4 bits mas altos se empleara para establecer el modo de tamponamiento de la unidad. Los modos de tamponamiento son: 0 La unidad no informara del estado GOOD en ordenes de escritura hasta que los bloques de datos se escriban realmente en el material magnetico. 1 La unidad puede devolver un estado GOOD en ordenes de escritura tan pronto como todos los datos se hayan transferido al bufer interno de la unidad. 2 La unidad puede devolver un estado GOOD en ordenes de escritura tan pronto como (a) todos los datos se hayan transferido al bufer interno del controlador, y (b) todos los datos en buferes, provinientes de iniciadores diferentes, hayan sido bien escritos en el material magnetico. Para controlar el umbral de escritura, el valor en mt_count debe incluir la constante MT_ST_WRITE_THRESHOLD aplicandole el operador de bits O inclusivo con un numero de bloque en los 28 bits de mas bajo orden. El numero de bloque se refiere a bloques de 1024 bytes, no al tamano de bloque fisico de la cinta. El umbral no puede exceder el tamano del bufer interno del controlador (consulte DESCRIPCION anteriormente). 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 logico inclusivo a nivel de bits con cualquier combinacion de las siguientes opciones, segun 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 numero 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 explicitamente. Las opciones booleanas son: MT_ST_BUFFER_WRITES (Por omision: verdad) Todas las operaciones de escritura van a traves de buferes en el modo de bloque fijo. Si esta opcion es falsa y la unidad emplea un tamano de bloque fijo, entonces todas las operaciones de escritura deben ser un multiplo del tamano de bloque. Esta opcion debe ponerse como falsa para escribir confiablemente archivos multivolumenes. MT_ST_ASYNC_WRITES (Por omision: verdad) Cuando esta opcion es verdad, las operaciones de escritura regresan inmediatamente sin esperar que los datos se transfieran a la unidad si los datos caben en el bufer del controlador. El umbral de escritura determina cuan lleno debe estar el bufer antes de que se de una nueva orden de escritura SCSI. Cualquier error devuelto por la unidad se mantendra en espera hasta la siguiente operacion. Esta opcion debe ponerse como falsa para escribir confiablemente archivos multivolumenes. MT_ST_READ_AHEAD (Por omision: verdad) Esta opcion hace que el controlador proporcione un bufer para la lectura, y lectura por adelantado en el modo de bloque fijo. Si esta opcion es falsa y la unidad emplea un tamano de bloque fijo, entonces todas las operaciones de lectura deben ser para un multiplo del tamano de bloque. MT_ST_TWO_FM (Por omision: falso) Esta opcion modifica el comportamiento del controlador cuando un fichero se cierra. La accion normal es escribir una simlpe marca de fichero. Si la opcion es verdad el controlador escribira dos marcas de fichero y hara un espacio atras sobre el segundo. Nota: Esta opcion no deberia 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 mayoria de las otras unidades actuales tambien detectan el final de los datos grabados y el uso de dos marcas de fichero es normalmente necesario solo al intercambiar cintas con algunos otros sistemas. MT_ST_DEBUGGING (Por omision: falso) Esta opcion activa varios mensajes de depuracion del controlador (solo es efectiva si se compilo la unidad con DEBUG definida a un valor no cero). MT_ST_FAST_EOM (Por omision: falso) Esta opcion hace que la operacion MTEOM se envie directamente a la unidad, acelerando potencialmente la operacion pero haciendo que el controlador pierda la pista del numero de fichero en curso normalmente devuelto por la peticion MTIOCGET. Si MT_ST_FAST_EOM es falso el controlador respondera a una peticion MTEOM saltando hacia adelante sobre los ficheros. MT_ST_AUTO_LOCK (Por omision: falso) Cuando esta opcion es verdadera, la tapa de la unidad se bloquea cuando se abre el dispositivo y se desbloquea cuando se cierra. MT_ST_DEF_WRITES (Por omision: falso) Las opciones de cinta (tamano de bloque, modo, compresion, etc.) pueden cambiar al cambiar de un dispositivo ligado a una unidad a otro dispositivo ligado a la misma unidad dependiendo de como se definan los dispositivos. Esta opcion define cuando es el controlador el que fuerza los cambios usando ordenes SCSI y cuando se confia en las capacidades del autodeteccion de las unidades. Si esta opcion es falsa, el controlador envia inmediatamente ordenes SCSI cuando se cambia el dispositivo. Si la opcion es verdad, no se envian ordenes 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 solo se usan las ordenes SCSI para asegurarse de que una cinta se escribe segun la especificacion correcta. MT_ST_CAN_BSR (Por omision: falso) Algunas veces, cuando se usa lectura por adelantado, se debe retrocer la cinta a la posicion correcta cuando se cierra el dispositivo y, para este proposito, se utiliza la orden SCSI para retrocer sobre los registros. Algunas unidades mas antiguas no pueden procesar esta orden de manera fiable y se puede usar esta opcion para mandar al controlador no usar la orden. El resultado final es que, con lectura por adelantado y el modo de bloque fijo, la cinta podria no estar correctamente posicionada dentro de un archivo cuando el dispositivo se cierra. En la version 2.6 del nucleo, por defecto es verdadero para discos con soporte para SCSI-3. MT_ST_NO_BLKLIMS (Por omision: falso) Algunas unidades no aceptan la orden SCSI READ BLOCK LIMITS. Si se usa esto, el controlador no usara la orden. El inconveniente es que el controlador no puede comprobar antes de enviar ordenes si el tamano de bloque seleccionado es aceptable por la unidad. MT_ST_CAN_PARTITIONS (Por omision: falso) Esta opcion habilita el soporte de varias particiones dentro de una cinta. La opcion se aplica a todos los dispositivos ligados a la unidad. MT_ST_SCSI2LOGICAL (Por omision: falso) Esta opcion obliga al controlador a usar las direcciones logicas de bloques definidas en el estandar SCSI-2 al realizar la busqueda y comunicar operaciones (tanto con la orden MTSEEK como con MTIOCPOS y al cambiar la particion de la cinta). En otro caso, se usan las direcciones especificas del dispositivo. Es muy recomendable activar esta opcion si la unidad soporta direcciones logicas ya que tambien cuentan marcas de fichero. Hay algunos dispositivos que solo soportan direcciones logicas de bloque. MT_ST_SYSV (Por omision: falso) Cuando se habilita esta opcion, los dispositivos de cinta usan la semantica de System V. En caso contrario, se usa la semantica BSD. La diferencia mas importante entre ambas semanticas es que ocurre cuando un dispositivo utilizado para lectura se cierra: en la semantica System V la cinta se avanza hasta pasar la siguiente marca de fichero si esto no ha ocurrido ya al usar el dispositivo. En la semantica BSD la posicion de la cinta no cambia. MT_NO_WAIT (Por omision: falso) Activa el modo inmediato para algunas ordenes. Esto es que no espera a su finalizacion (por ejemplo: el rebobinado). Un 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 tamano de bloque por defecto para un dispositivo se puede configurar con MT_ST_DEF_BLKSIZE y el codigo de densidad por defecto se puede configurar con MT_ST_DEFDENSITY. Los valores para los parametros se operan con un O logico con el codigo de operacion. Con los nucleos 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 logico con el plazo de tiempo en segundos. El plazo largo de tiempo (usado para los rebobinados y otras ordenes que pueden tardar mucho tiempo) se puede configurar con MT_ST_SET_LONG_TIMEOUT. Los valores por defecto del nucleo son muy grandes para asegurarse de que una orden exitosa no sera cancelada para ninguna unidad. Debido a esto, el controlador puede parecer atascado aun cuando solo este esperando a que se cumpla el plazo de tiempo. Estas ordenes se pueden usar para configurar mas valores utiles para una unidad especifica. Los plazos de tiempo configurados para un dispostivo se aplican a todos los dispositivos ligados a la misma unidad. A partir de las versiones 2.4.19 y 2.5.43 de Linux, el controlador incluye un bit de estado que indica si la unidad necesita ser limpiada. El metodo que usara para transmitir informacion sobre su limpieza se define mediante la orden secundaria MT_ST_SEL_CLN. Si su valor es cero, el bit de limpieza siempre estara a cero. Si el valor es uno, se emplea TapeAlert definido en el standard SCSI-3 (pendiente de implementar). Los valores 2-17 estan reservados. Si los menores 8 bits son >=18, se emplean bits de la extesion sense. Los bits 9-16 definen una mascara que define los bits a mirar y los bits 17-23 definen el patron de bits que debe buscarse. Si el patron es cero, uno o mas bits dentro de la mascara indican una peticion de limpieza. Si el patron es distinto de cero, debe concordar con el byte de la mascara sense. MTIOCGET -- obtiene el estado Esta peticion 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 controlador actual informa solo de los tipos genericos MT_ISSCSI1 (cinta generica SCSI-1) y MT_ISSCSI2 (cinta generica SCSI-2). mt_resid contiene el numero de particion actual de la cinta. mt_dsreg informa de los valores actuales de la unidad para el tamano de bloque (en los 24 bits mas bajos) y para la densidad (en los 8 bits mas altos). Estos campos estan definidos por MT_ST_BLKSIZE_SHIFT, MT_ST_BLKSIZE_MASK, MT_ST_DENSITY_SHIFT y MT_ST_DENSITY_MASK. mt_gstat da informacion de estado generica (independiente del dispositivo). El fichero de cabecera define macros para comprobar estos bits de estado: GMT_EOF(x) La cinta esta posicionada justo tras una marca de fichero (siempre falso tras una operacion MTSEEK). GMT_BOT(x) La cinta esta posicionada al principio del primer archivo (siempre falso tras una operacion MTSEEK). GMT_EOT(x) Una operacion de cinta ha alcanzado el Final de Cinta fisico. GMT_SM(x) La cinta esta posicionada actualmente en una marca de conjunto (siempre falso tras una operacion MTSEEK). GMT_EOD(x) La cinta esta posicionada al final de datos grabados. GMT_WR_PROT(x) La unidad esta protegida contra escritura. Para algunas unidades esto tambien puede significar que no admite escribir en el tipo de medio fisico actual. GMT_ONLINE(x) El ultimo open(2) encontro a la unidad con una cinta puesta y lista para la operacion. GMT_D_6250(x) GMT_D_1600(x) GMT_D_800(x) Esta informacion de estado "generica" informa de la densidad actual para unidades de cinta de 9 pistas y 1/2 pulgadas 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 garantias de que los datos se hayan escrito fisicamente en la cinta cuando la llamada de escritura termina. Se le asigna el valor cero solo cuando el controlador no usa buffers para los datos y la unidad no esta configurada para usar buffers de datos. GMT_CLN(x) La unidad necesita ser limpiada. Implementado a partir de las versiones 2.4.19 y 2.5.43 del nucleo. mt_erreg El unico campo definido en mt_erreg es el numero de errores recuperados en los 16 bits de mas 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 numero a menudo no es mantenido (la mayoria 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 numero de fichero actual (empezando por cero). Este valor se pone a -1 cuando el numero de fichero se desconoce (p. ej. despues de MTBSS o MTSEEK). mt_blkno da el numero de bloque (empezando por cero) dentro del fichero actual. Este valor se pone a -1 cuando el numero de bloque se desconoce (p. ej. despues de MTBSF, MTBSS o MTSEEK). MTIOCPOS -- obtener la posicion en la cinta Esta peticion toma un argumento de tipo (struct mtpos *) y devuelve la nocion que tiene el controlador del numero 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 (direccion especifica del dispositivo) o una unidad SCSI-1 compatible Tandberg (Tandberg, Archive Viper, Wangtek, ... ). /* estructura para MTIOCPOS - orden obtener posicion cinta mag. */ struct mtpos { long mt_blkno; /* numero de bloque en curso */ }; VALOR DEVUELTO EACCES Se intento escribir o borrar una cinta protegida para escritura. (Este error no se detecta durante open(2).) EBUSY El dispositivo ya esta en uso o el controlador ha sido incapaz de reservar un bufer. EFAULT Los parametros de la orden apuntan a memoria que no pertenece al proceso invocador. EINVAL Una llamada a ioctl(2) tenia un argumento incorrecto, o el tamano de bloque solicitado no era valido. EIO La operacion pedida no ha podido completarse. ENOMEM La cantidad de bytes contabilizados en read(2) es menor que el siguiente bloque fisico de la cinta. Antes de las versiones 2.2.18 y 2.4.0 los bytes adicionales se ignoraban sin mas. ENOSPC Una operacion de escritura no pudo completarse porque la cinta llego al final del material magnetico. ENOSYS ioctl(2) desconocido. ENXIO Durante la apertura, el dispositivo de cinta no existe. EOVERFLOW Se ha intentado leer o escribir un bloque de longitud variable que es mayor que el bufer interno del controlador. EROFS Se ha intentado realizar una operacion `open' con O_WRONLY o O_RDWR cuando la cinta de la unidad esta protegida contra escritura. ARCHIVOS /dev/st* dispositivos de cinta SCSI con autorebobinado /dev/nst* dispositivos de cinta SCSI sin rebobinado NOTAS o Cuando se intercambian datos entre sistemas, ambos sistemas deben coincidir en el tamano fisico del bloque de la cinta. Los parametros de una unidad despues del arranque no son, con frecuencia, los que la mayoria de los sistemas operativos usan con estos dispositivos. La mayoria de los sistemas usan unidades en modo de bloque variable si la unidad soporta ese modo. Esto es aplicable a la mayoria de las unidades modernas, incluyendo DATs, unidades de recorrido helicoidal de 8mm, DLTs, etc. Puede ser aconsejable usar estas unidades en modo variable tambien 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 tamano de bloque de cinta bastante largo para obtener tasas de transferencia de datos aceptables sobre el bus SCSI. o Muchos programas (por ejemplo, tar(1)) permiten al usuario especificar el tamano de bloque en la linea de ordenes. Dese cuenta que esto determina el tamano fisico del bloque en la cinta solo en el modo de bloque variable. o Para usar unidades de cinta SCSI, el controlador basico de SCSI, el controlador de un adaptador SCSI y el controlador de cintas SCSI deben estar bien configurados dentro del nucleo o cargados como modulos. Si el controlador de cintas SCSI no esta presente, se reconoce la unidad pero el soporte de cinta descrito en esta pagina no esta disponible. o El controlador escribe los mensajes de error a la consola/registro(log). Los codigos SENSE escritos en algunos mensajes se traducen automatica a texto si se han habilitado en la configuracion del nucleo los mensajes SCSI prolijos. o La gestion interna del buffer por parte del controlador permite buenos rendimientos en el modo de bloque fijo incluso con pequenas cantidades de bytes de read(2) y write(2). Con transferencias directas, no es posible y puede originar alguna sorpresa al actualizarse a laversion 2.6 del nucleo. Para evitar esto, se debe configurar el software para usar mayores transferencias (a menudo definiendo un mayor tamano de bloque). Si esto no es posible, pueden desactivarse las transferencias directas. VEASE TAMBIEN mt(1) El fichero drivers/scsi/README.st o Documentation/scsi/st.txt (nucleo >= 2.6) de los fuentes del nucleo contiene la informacion mas reciente del controlador y sus posibilidades de configuracion. TRADUCCION La traduccion al espanol de esta pagina del manual fue creada por Gerardo Aburruzaga Garcia , Juan Piernas y Marcos Fouces Esta traduccion es documentacion libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. Si encuentra algun error en la traduccion de esta pagina del manual, envie un correo electronico a . Paginas de manual de Linux 6.06 31 Octubre 2023 st(4)