Provided by:
manpages-es_1.55-8_all 
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.