Provided by:
manpages-es_1.55-10_all 
NOMBRE
st - dispositivo de cinta magnetica 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'ON
El manejador (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
manejador 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. 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 manejador 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 128KB para arquitecturas de 32 bits y
256KB para arquitecturas de 64 bits. En nucleos posteriores el
manejador 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 (2MB si es posible una
asignacion de 16 bloques de 128KB).
El tamano del buffer interno del manejador viene determinado por una
contante en tiempo de compilacion que se puede alterar con una opcion
de inicio del nucleo. Aparte de esto, el manejador 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 manejador con
kerneld o kmod).
El manejador 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() 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 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 logicas dentro de un mismo medio). El soporte de
particiones se debe habilitar con ioctl. 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. 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
manejador contiene un ioctl 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.
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 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 cantida 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
manejador 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
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 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.
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 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'on en la cinta
Esta peticion 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 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 fichero.
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 Borrar cinta.
MTFSF Espacio atras sobre mt_count marcas de fichero.
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 puerta de la unidad de cinta.
MTMKPART Formatea la cinta en una o dos particiones. Si mt_count
no es cero, 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.
Esta orden no esta permitida para una unidad a menos que
se habilite el soporte de particiones para la unidad (ver
MT_ST_CAN_PARTITIONS mas abajo).
MTNOP No op. - vuelca el bufer del manejador 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 puerta de la unidad de cinta.
MTWEOF Escribe mt_count marcas de fichero.
MTWSM Escribe mt_count marcas de conjunto.
Operaciones de Cinta Magnetica para configurar las opciones del
dispositivo (a realizar por el superusuario):
MTSETDRVBUFFER
Establece varias opciones de la unidad y el manejador segun los
bits codificados en mt_count. Estas 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 tamano de bloque y de densidad y plazos de tiempo
(solo en nucleos >= 2.1). 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 manejador, 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 manejador (vea DESCRIPCI'ON, 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 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 manejador. 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 manejador 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 manejador
cuando un fichero se cierra. La accion normal es
escribir una simlpe marca de fichero. Si la opcion es
verdad el manejador 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
manejador (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 manejador pierda la pista
del numero de fichero en curso normalmente devuelto por
la peticion MTIOCGET. Si MT_ST_FAST_EOM es falso el
manejador respondera a una peticion MTEOM saltando hacia
adelante sobre los ficheros.
MT_ST_AUTO_LOCK (Por omision: falso)
Cuando esta opcion 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 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
manejador 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 manejador
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
manejador 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 fichero cuando el dispositivo se cierra.
MT_ST_NO_BLKLIMS (Por omision: falso)
Algunas unidades no aceptan la orden SCSI READ BLOCK
LIMITS. Si se usa esto, el manejador no usara la orden.
El inconveniente es que el manejador 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 (Default: false)
Esta opcion obliga al manejador 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 SystemV. 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 SYSV 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.
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 manejador 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.
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 manejador 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 fichero (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 de 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() 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 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 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 manejador no usa buffers para los datos y la
unidad no esta configurada para usar buffers de datos.
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 posici'on en la cinta
Esta peticion toma un argumento de tipo (struct mtpos *) y devuelve la
nocion que tiene el manejador 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
EIO La operacion pedida no ha podido completarse.
ENOSPC Una operacion de escritura no pudo completarse porque la
cinta llego al final del material magnetico.
EACCES Se intento escribir o borrar una cinta protegida para
escritura. (Este error no se detecta durante open().)
EFAULT Los parametros 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 esta en uso o el manejador ha sido
incapaz de reservar un bufer.
EOVERFLOW Se ha intentado leer o escribir un bloque de longitud
variable que es mayor que el bufer interno del manejador.
EINVAL Una llamada a ioctl() tenia un argumento incorrecto, o un
tamano de bloque pedido era ilegal.
ENOSYS ioctl() desconocido.
EROFS Se ha intentado realizar una operacion `open' con
O_WRONLY o O_RDWR cuando la cinta de la unidad esta
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 Makisara
(Kai.Makisara@metla.fi) a partir del manejador escrito por Dwayne
Forsyth. Varias otras personas tambien han contribuido al manejador.
V'EASE TAMBI'EN
mt(1)
El fichero README.st de los fuentes del nucleo contiene la informacion
mas reciente del manejador y sus posibilidades de configuracion.
OBSERVACIONES
1. 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. 2. Muchos
programas (por ejemplo, tar) 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.
3. Para usar unidades de cinta SCSI, el manejador basico de SCSI, el
manejador de un adaptador SCSI y el manejador de cintas SCSI deben
estar bien configurados dentro del nucleo o cargados como modulos. Si
el manejador de cintas SCSI no esta presente, se reconoce la unidad
pero el soporte de cinta descrito en esta pagina no esta disponible.
4. El manejador 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.
COPYRIGHT
Copyright (C) 1995 Robert K. Nichols.
Copyright (C) 1999 Kai Makisara.
Se da permiso para hacer y distribuir copias identicas de este manual
supuesto que la nota de copyright y esta de permiso se preservan en
todas las copias. El fichero de cabecera del codigo fuente contiene
permisos adicionales.