st - Dispositivo de Fita SCSI
#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)
O driver st provê a interface para vários
dispositivos de fita SCSI. Atualmente, o driver controla todos os
dispositivos detetados do tipo “acesso-seqüencial.” O
driver st usa o número de dispositvo maior 9.
Cada dispositivo usa oito números menores. Os cinco bits de
menor ordem nos números menores são atribuidos
seqüencialmente na ordem em que são detetados. Os
números menores podem ser agrupados em dois conjuntos de quatro
números. os números menores principais (auto-rebobinamento),
n, e um número de dispositivo “sem
rebobinamento” números de dispositivo, (n+ 128).
Os dispositivos abertos usando o número principal receberão o
comando REWIND que os rebobinará quando forem fechados. Dispositivos
abertos usando o ”número de dispositvo“sem
rebobinamento. (Observe que usando um dispositivo com auto-rebobinamento, ao
posicionar a fita, por exemplo, o mt não dá o resultado
desejado: a fita é rebobinada depois do comando mt e o próximo
comando atua a partir do inicio da fita).
Em cada grupo, quatro números menores estão
disponíveis para definir dispositivos com características
diferentes (tamanho do bloco, compressão, densidade, etc). Quando o
sistema inicia, apenas o primeiro dispositivo está disponível.
Os outros três são ativados quando as características
padrões são definidas (veja abaixo). (Alterando as constantes
durante a compilação, é possível mudar o
balanço entre o número máximo de unidades de fita e o
número de menor número de dispositivo para cada unidade. A
alocação padrão permite controlar 32 unidades de fita.
Por exemplo, é possível controlar até 64 unidades com
dois números menores para diferentes opções).
Os dispositivos são tipicamente criados por:
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
Não há dispositivos de bloco correspondentes.
O driver usa um buffer interno que tem que ter espaço
suficiente para manter no mínimo um bloco de fita. No Linux anterior
ao 2.1.121, o buffer é alocado como um bloco contíguo. Isto
limita o tamanho do bloco para o maior bloco contíguo de
memória que o alocador pode prover. O limite atual é de 128kB
para a arquitetura de 32 bits e 256kB para a arquitetura de 64 bits. Nas
novas versões do Linux o driver aloca o buffer em várias
partes se necessário. Por padrão, o número
máximo de partes é 16. Isto significa que o tamanho
máximo do bloco é muito grande (2 MB se alocado 16 blocos de
128kB).
O tamanho do buffer interno do driver é determinado por uma
constante em tempo de compilação, que pode ser sobrescrita com
uma opção na inicialização do kernel do Linux.
Em adição a isto, o driver tenta alocar um buffer
temporário grande em tempo de execução se
necessário. Porém, a alocação em tempo de
execução de grandes blocos contíguos de memória
pode falhar, portanto, não confie muito em alocação
dinâmica de buffer em versões anteriores a 2.1.121 (isto
também se aplica em carga dinâmica de driver usando o kerneld
e kmod).
O driver não suporta especificamente qualquer marca ou
modelo de unidade de fita. Depois que o sistema inicia, as
opções do dispositivo de fita são definidas pelo
firmware da unidade. Por exemplo, se o firmware seleciona o modo de blocagem
fixa, a unidade de fita usará este modo. As opções
podem ser alteradas com chamadas ioctl() explícitas e mantidas
em efeito quando o dispositivo é fechado e reaberto. As
opções definidas afetam, tanto os dispositivos com
auto-rebobinamento, quanto os sem rebobinamento.
Opções diferentes podem ser especificadas para
dispositivos diferentes, dentro de um subgrupo de quatro. As
opções fazem efeito quanto o dispositivo é aberto. Por
exemplo, o administrador do sistema pode definir um dispositivo que grava em
blocos fixos com uma certa blocagem e outro que grava em blocos
variáveis (se a unidade suportar ambos os modos).
O driver suporta partições se a unidade de
fita suportá-las. (As partições em fita não tem
nada ver com as partições em disco. Uma fita particionada pode
ser vista como várias fitas lógicas.) O suporte a
partições tem que ser habilitado com um ioctl. A
localização da fita é preservada em cada
partição através das alterações na
partição. A partição usada para
operações subseqüentes, é selecionada com um
ioctl. A mudança de partição é executada junto
com a próxima operação para evitar movimento
desnecessário da fita. O número máximo de
partições um uma fita é definido por uma constante
durante a compilação (originalmente quatro). O driver
contém um ioctl que pode formatar uma fita com uma ou duas
partições.
O dispositivo /dev/tape é geralmente criado como um
vínculo símbólico ou fixo para o dispositivo de fita
padrão no sistema.
O driver suporta operações nos modos de blocagem
fixa e variável (se suportado pela unidade). No modo de blocagem fixa
a unidade grava blocos de tamanho específico e o tamanho do bloco
não é dependente do contador de bytes gravados, usado pelas
chamadas do sistema. No modo de blocagem variável, um bloco é
gravado para cada chamada de gravação e o contador de bytes
determina o tamanho do bloco. Observe que os blocos na fita, não
contém quaisquer informações sobre o mode de
gravação. Durante a leitura, o importante é usar
comandos que aceitam o tamanho dos blocos gravados.
No modo variável, o contador de bytes não precisa
coincidir exatamente com o tamanho do bloco. Se o contador é maior do
que o próximo bloco na fita, o driver retorna os dados e a
função retorna o tamanho atual do bloco. Se o tamanho do bloco
é maior do que o contador de bytes, a quantidade requisitada de dados
é retornada a partir do inicio do bloco e o resto é
descartado.
No modo fixo, o contador de bytes lidos pode ser arbitrário
se o uso de buffer estiver habilitado ou um múltiplo do tamanho do
bloco se o buffer estiver desabilitado. O Linux antes da versão
2.1.121 permite gravação com um contador de byte
arbitrário, se o buffer estiver habilitado. Em todos os casos, o
contador de bytes de gravados deve ser um múltiplo do tamanho do
bloco.
Um marcador de arquivo é automáticamente gravado na
fita se a última operação na fita antes de
fechá-la foi uma gravação.
Quando um marcador de arquivo é encontrado enquanto lendo,
a seguinte é comcluído. Se houver dados no buffer quando um
marcador de arquivo é encontrado, estes dados serão
retornados. A próxima leitura retornará zero bytes. A leitura
seguinte retornará os dados do próximo arquivo. O fim dos
dados gravados é sinalizado pelo retorno de zero bytes durante duas
leituras consecutivas. A terceira leitura retornará um erro.
O driver suporta três requisitos ioctl. Os requisitos
não reconhecidos pelo driver st são passados para o
driver SCSI As definições abaixo são do
/usr/include/linux/mtio.h:
MTIOCTOP - Executa uma operação de fita
Este requisito leva um argumento do tipo (struct mtop *).
Nem todos as unidades suportam todas as operações. O driver
retorna um erro EIO se a unidade rejeitar uma operação.
/* Estrutura do MTIOCTOP - comando op de fita mag: */
struct mtop {
short mt_op; /* operações definidas abaixo */
int mt_count; /* quantidade delas */
};
Operações de fita magnéticas para uso
normal:
- MTBSF
- Retrocede espaços sobre mt_count marcadores de
arquivos.
- MTBSFM
- Retrocede espaços sobre mt_count marcadores de arquivos.
Reposiciona a fita no lado EOT último marcador de arquivo.
- MTBSR
- Retrocede espaços sobre mt_count registros (blocos da
fita).
- MTBSS
- Retrocede espaços sobre mt_count setmarks.
- MTCOMPRESSION
- Habilita compressão de dados se mt_count não for zero
e desabilita a compressão se mt_count é zero. Este
comando usa o MODO page 15 suportado pela maioria das fitas DATs.
- MTEOM
- Vai para o final da mídia gravada (para acrescentar arquivos).
- MTERASE
- Apaga a fita.
- MTFSF
- Avança mt_count marcadores de arquivos.
- MTFSFM
- Avança mt_count marcadores de arquivos. Reposiciona a fita
no lado BOT do último marcado de arquivo.
- MTFSR
- Avança espaços sobre mt_count registro (blocos da
fita).
- MTFSS
- Avança espaços sobre mt_count setmarks.
- MTLOAD
- Executa o comando load SCSI. Um caso especial está
disponível para alguns carregadores automáticos HP. Se
mt_count é a constante MT_ST_HPLOADER_OFFSET mais um
número, o número é enviando para a unidade controlar
a carga automática.
- MTLOCK
- Bloqueia a porta da unidade de fita.
- MTMKPART
- Formata a fita em uma ou duas partições. Se mt_count
não for zero, ele dá o tamanho da primeira
partição e a segunda partição contém o
resto da fita. Se mt_count for zero, a fita é formatada com
um partição. Este comando não é permitido em
uma unidade a menos que o suporte a esteja habilitado (veja
MT_ST_CAN_PARTITIONS abaixo).
- MTNOP
- Nenhuma operação - descarrega o buffer do driver. Ele pode
ser usado antes de ler o estado com MTIOCGET.
- MTOFFL
- Rebobina a fita e coloca a unidade fora de linha.
- MTRESET
- Reinicia a unidade.
- MTRETEN
- Retensiona a fita.
- MTREW
- Rebobina.
- MTSEEK
- Posiciona no número de bloco especificado em mt_count. Esta
operação requer uma unidade SCSI-2 que suporte o comando
LOCATE (endereço de dispositivo específico) ou uma unidade
Tandberg-compatível SCSI-1 (Tandberg, Archive Viper, Wangtek, ...
). O número do bloco deverá ser aquele previamente retornado
pelo MTIOCPOS se o endereço específico do dispositivo foi
usado.
- MTSETBLK
- Define o tamanho do bloco para o valor especificado em mt_count. Um
tamanho de zero define o modo de bloco de tamanho variável.
- MTSETDENSITY
- Define a densidade para o código em mt_count. O
código de densidade suportado pela unidade pode ser encontrado na
documentação da unidade.
- MTSETPART
- A partição é alternada para mt_count . As
partições são numeradas a partir de zero. Este
comando não é permitido em uma unidade, a menos que o
suporte a partições esteja habilitado (veja
MT_ST_CAN_PARTITIONS abaixo).
- MTUNLOAD
- Executa o comando SCSI unload (não ejeta a fita).
- MTUNLOCK
- Desbloqueia a porta da unidade de fita.
- MTWEOF
- Grava mt_count marcadores de arquivos.
- MTWSM
- Grava mt_count setmarks.
Operações de Fita Magnética para configurar
opções de dispositivo (superusuário):
- MTSETDRVBUFFER
- Define várias opções de driver e unidade de acordo
com os bits codificados em mt_count. Isto consiste do modo de
buferização da unidade, 13 opções Booleanas da
unidade, os limites de gravação do buffer, padrões
para o tamanho do bloco e densidade e limites de tempo (apenas no Linux
>= 2.1). Uma operação simples só pode afetar um
ítem na lista acima (as opções Booleanas contadas com
um ítem.)
- Um valor zero nos 4 bits de alta órdem será usado para
definir o modo de buferização da unidade de fita. Os modos
de buferização são:
- 0
- A unidade não informará o estado GOOD nos comandos de
gravação até que os blocos de dados sejam gravados na
mídia.
- 1
- A unidade informará o estado GOOD nos comandos de
gravação assim que todos os dados tenham sido transferidos
do buffer interno da unidade.
- 2
- A unidade pode informar o estado GOOD nos comandos de
gravação assim que: (a) os dados foram transferido do buffer
interno da unidade e (b) todos os dados em buffers de inicializadores
diferentes foram gravados com sucesso para a mídia.
-
- Para controlar o limite de gravação, o valor em
mt_count deve incluir a constante MT_ST_WRITE_THRESHOLD logicamente
ORed com um contador de bloco nos 28 bits inferiores. O contador de bloco
refere-se a blocos de 1024-byte e não ao tamanho físico dos
blocos na fita. Os limites não podem exceder o tamanho do buffer
interno da unidade (veja DESCRIÇÃO, acima).
- Para definir e limpar as opções Booleanas o valor em
mt_count deve incluir uma das constantes MT_ST_BOOLEANS,
MT_ST_SETBOOLEANS, MT_ST_CLEARBOOLEANS ou MT_ST_DEFBOOLEANS logicamente
ORed com qualquer combinação das opções a
seguir é desejável. Usando MT_ST_BOOLEANS as
opções podem ser definidas para valores definidos nos bits
correspondentes. Com MT_ST_SETBOOLEANS as opções podem ser
seletivamente definidas e com MT_ST_DEFBOOLEANS seletivamente limpas.
-
- As opções padrões para um dispositivo de fita podem
ser definidas com MT_ST_DEFBOOLEANS. Um dispositivo de fita inativo (i.e.,
um dispositivo com número menor 32 ou 160) é ativado quando
as opções padrões para ele são definidas na
primeira vez. Um dispositivo ativado herda daquele ativado na
inicialização as opções não definidas
explicitamente.
-
- As opções Booleanas são:
- MT_ST_BUFFER_WRITES
(Padrão: true)
- Coloca no buffer todas as operações de
gravação usando a blocagem fixa. Se esta opção
é false e a unidade usa um bloco de tamanho fixo, então
todas as operações de gravação devem usar um
múltiplo do tamanho do bloco. Esta opção deve ser
definida como falsa para se obter uma gravação
confiável em sistemas multi-volumes.
- MT_ST_ASYNC_WRITES
(Padrão: true)
- Quando esta opção é verdadejra, a
operação de gravação retorna imediatamente sem
esperar que os dados sejam transferidos para a unidade se os dados
estão ajustados dentro do buffer da unidade. O limite de
gravação determina quando o buffer está cheio mas
depois um novo comando de escrita SCSI é usado. Quaisquer erros
relatados pela unidade serão retidos até a próxima
operação. Esta opção deve ser definida como
falsa para se obter uma gravação confiável em
sistemas multi-volumes.
- MT_ST_READ_AHEAD
(Padrão: true)
- Esta opção faz o driver prover leitura buferizada e leitura
a frente em blocos fixos. Se esta opção é false e a
unidade usa um tamanho de bloco fixo, todas as operações de
leitura devem ser múltiplos do tamanho do bloco.
- MT_ST_TWO_FM
(Padrão: false)
- Esta opção modifica as características do driver
quando um arquivo é fechado. A ação normal é
gravar uma marca de arquivo simples. Se esta opção é
true o driver gravará duas marcas de arquivo e um caracter de
retrocesso sobre a última marca.
- Nota: Esta opção não pode ser true para unidades de
fita QIC uma vez que elas não podem sobrescrever a marca de
arquivo. Estas unidades detetam o final dos dados gravados testando se a
fita está em branco. A maioria das unidades atuais também
detetam o final dos dados gravados e o uso das duas marcas de arquivo
são necessária apenas quando há intercambio de fita
com outros sistemas.
- MT_ST_DEBUGGING
(Padrão: false)
- Esta opção ativa várias mensagens de
depuração de erros do driver (só tem efeito se o
driver foi compilado com DEBUG definido com valor diferente de zero).
- MT_ST_FAST_EOM
(Padrão: false)
- Esta opção envia a operação MTEOM diretamente
para a unidade, potencialmente acelera a operação, mas causa
perda de trilhas do número de arquivo atual, normalmente retornado
pela requisição MTIOCGET. Se MT_ST_FAST_EOM é false o
driver responderá a um requisito MTEOM repassando espaços
sobre o arquivo.
- MT_ST_AUTO_LOCK
(Padrão: false)
- Quando esta opção é true, a porta da unidade é
bloqueada quando o dispositivo é aberto e desbloqueada quando ele
é fechado.
- MT_ST_DEF_WRITES
(Padrão: false)
- As opções da fita (tamanho do bloco, modo,
compressão, etc.) pode variar quando muda-se de um dispositivo
vinculado a uma unidade, para outro vinculado a mesma unidade dependendo
de como os dispositivos estão definidos. Esta opção
define quando as mudanças são forçadas pelo driver
através de comandos SCSI e quando a unidade auto-deteta que as
capacidades são confiáveis. Se esta opção
é false, o driver envia os comandos SCSI imediatamente quando o
dispositivo é alterado. Se a opção é true, os
comandos SCSI não são enviados até que uma
gravação seja requisitada. Neste caso o firmware da unidade
tem permissão para detetar a estrutura da fita durante a leitura e
os comandos SCSI são usados apenas para certificar-se que a fita
é gravada de acordo com a especificação correta.
- MT_ST_CAN_BSR
(Padrão: false)
- Quando a leitura a frente é usada, a fita deve algumas vezes ser
rebobinada para a posição correta quando o dispositivo
é fechado e o comando SCSI para efetuar esta tarefa é usado.
Algumas unidades antigas não podem processar este comando
confiavelmente e esta opção pode ser usada para instruir o a
não usá-lo. O resultado final é que, com leitura a
frente e o modo de bloco fixo, a fita não pode ser corretamente
posicionada no arquivo quando o dispositivo é fechado.
- MT_ST_NO_BLKLIMS
(Padrão: false)
- Algumas unidades não aceitam o comando SCSI READ BLOCK LIMITS. Se
ele é usado, o driver não usá-o. A desvantagem
é que o driver não pode checar antes de enviar os comandos
se o tamanho de bloco selecionado é aceitável pela unidade
de fita.
- MT_ST_CAN_PARTITIONS
(Padrão: false)
- Esta opção habilita o suporte a várias
partições em uma fita. Ela aplica-se a todos os dispositivos
vinculados à unidade.
- MT_ST_SCSI2LOGICAL
(Padrão: false)
- Esta opção instrui o driver a usar o endereço
lógico de bloco definido no padrão SCSI-2 durante as
operações de procura e ( com os comandos MTSEEK e MTIOCPOS e
durante alterações na partição). Do
contrário o endereço específico do dispositivo
é usado. É altamente recomendável definir esta
opção se a unidade suporta os endereços
lógicos, porque eles também contam as marcas de arquivo.
Há algumas unidades que só suportam o endereçamento
lógico de bloco.
- MT_ST_SYSV
(Padrão: false)
- Quando esta opção é habilitada, o dispositivo de fita
usa a semântica do SystemV. Do contrário a do BSD é
usada. A diferença mais importante entre as semânticas
é o que acontece quando um dispositivo usado para leitura é
fechado: na semântica SYSV a fita é avançada para a
próxima marca de arquivo se a mesma não foi encontrada
durante a utilização do dispositivo. Na semântica BSD
a posição da fita não se altera.
- EXEMPLO
-
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);
-
- O tamanho padrão do bloco para um dispositivo pode ser definido com
MT_ST_DEF_BLKSIZE e a densidade padrão com MT_ST_DEFDENSITY. Uma
operação OU é executada entre os valores dos
parâmetros e o código da operação.
-
- Com o Linux 2.1.x e posteriores, os limites de tempo podem ser definidos
com o subcomando MT_ST_SET_TIMEOUT e um OU do tempo em segundos. O limite
longo (usado para rebobinamento e outros comandos que levam muito tempo)
pode ser definido com MT_ST_SET_LONG_TIMEOUT. O padrão do Linux
é muito longo para certificar-se que um comando falhou por ter
excedido o limite de tempo em qualquer unidade. Por isso o driver pode
parecer travar, mesmo que ele seja o único em espera. Estes
comandos podem ser usados para definir valores mais práticos para
unidades específicas. O limite definido para um dispositivo,
aplica-se a todos que estejam vinculados a mesma unidade.
MTIOCGET - Obtém o estado
Esta requisição leva um argumento do tipo (struct
mtget *).
/* estrutura para MTIOCGET - comando para obter o estado da fita */
struct mtget {
long mt_type;
long mt_resid;
/* os registradores abaixo são dependentes do dispositivo */
long mt_dsreg;
long mt_gstat;
long mt_erreg;
/* Os dois campos a seguit nem sempre são usados */
daddr_t mt_fileno;
daddr_t mt_blkno;
};
- mt_type
- Arquivo cabeçalho define vários valores para mt_type,
mas o driver atual só informa os tipos genéricos MT_ISSCSI1
(Fita SCSI-1 genérica) e MT_ISSCSI2 (Fita SCSI-2
genérica).
- mt_resid
- contém o número da partição da fita
atual.
- mt_dsreg
- informa a definição de tamanho de bloco da unidade atual
(nos 24 bits baixos) e densidade (nos 8 bits altos). Estes campos
são definidos por MT_ST_BLKSIZE_SHIFT, MT_ST_BLKSIZE_MASK,
MT_ST_DENSITY_SHIFT e MT_ST_DENSITY_MASK.
- mt_gstat
- dá informações genéricas do estado
(independente do dispositivo). O arquivo cabeçalho define macros
para testar estes bits de estado:
GMT_EOF(x): A fita está posicionada após a
marca de arquivo (sempre false após uma operação
MTSEEK).
GMT_BOT(x): A fita está posicionada no inicio do
primeiro arquivo (sempre false após uma operação
MTSEEK).
GMT_EOT(x): Uma operação da fita
alcançou o final físico da Fita.
GMT_SM(x): A fita está posicionada na setmark
(sempre false após uma operação MTSEEK).
GMT_EOD(x): A fita está posicionada no final do
dado gravado.
GMT_WR_PROT(x): A unidade está protegida contra
gravação. Para algumas unidades isto pode significar que a
mesma não suporta gravação no tipo mídia
atual.
GMT_ONLINE(x): O último open() encontrou
uma fita na unidade e pronta para operação.
GMT_D_6250(x), GMT_D_1600(x),
GMT_D_800(x): Reporta informações de estado
“genéricas” sobre a densidade atual definida em 9-track
enas para unidades de fita de 12".
GMT_DR_OPEN(x): A unidade não contém uma
fita.
GMT_IM_REP_EN(x): Modo de Informação
Imediata. Este bit é definido se não há garantias que
os foram fisicamente gravados na fita quando a chamada de
gravação retorna. Ele é definido zero apenas quando o
driver não buferiza os dados e a unidade está definida para
não colocar os dados no buffer.
- mt_erreg
- O único campo definido em mt_erreg é o contador de
erros recuperados, nos 16 bits de baixa órdem (como definido
porMT_ST_SOFTERR_SHIFT e MT_ST_SOFTERR_MASK). Devido a
inconsistências na forma como as unidades informam os erros
recuperados, o contador freqüentemente não é mantido
(a maioria das unidades não informam por padrão erros de
programas, mas isto pode ser alterado com o comando SCSI MODE
SELECT).
- mt_fileno
- Informa o número atual do arquivo (base-zero). Este valor é
-1 quando o número do arquivo é desconhecido (i.e., depois
de MTBSS ou MTSEEK).
- mt_blkno
- Informa o número de bloco (base-zero) do arquivo atual. Este valor
é -1 quando o número do bloco é desconhecido (i.e.,
depois de MTBSF, MTBSS, ou MTSEEK).
MTIOCPOS - Obtém a posição da fita.
Este requesito aceita um argumento do tipo (struct mtpos *)
e informa a noção da unidade do número de bloco da fita
atual, que não é o mesmo que mt_blkno retornado por
MTIOCGET. A unidade deve ser uma SCSI-2 que suporte o comando READ POSITION
(endereço específico do dispositivo) ou uma unidade SCSI-1
Tandberg-compatível (Tandberg, Archive Viper, Wangtek, ... ).
/* estrutura para MTIOCPOS - comando para obter a posição da fita */
struct mtpos {
long mt_blkno; /* número do bloco atual */
};
- EIO
- A operação solicitada não pode ser concluida.
- ENOSPC
- Uma operação de gravação não pode ser
concluida porque a fita chegou no final físico.
- EACCES
- Tentando gravar ou apagar um fita com proteção a
gravação. (Este erro não é detetado durante um
open().)
- EFAULT
- Os parâmetros do comando apontam para memória que não
pertencem ao processo chamado.
- ENXIO
- Durante a abertura o dispositivo de fita não existe.
- EBUSY
- O dispositivo já está em uso ou o driver não
conseguiu alocar um buffer.
- EOVERFLOW
- Tentou ler ou gravar um bloco de tamanho variável que é
maior do que o buffer interno da unidade.
- EINVAL
- Um ioctl() tem um argumento ilegal ou o tamanho do bloco requisita
é ilegal.
- ENOSYS
- ioctl() desconhecido.
- EROFS
- Tentativa de abrir com O_WRONLY ou O_RDWR quando a fita na unidade
está protegida contra gravação.
/dev/st* : Dispositivo de fita SCSI com auto-rebobinamento
/dev/nst* : Dispositivo de fita SCSI sem auto-rebobinamento
O driver foi escrito por Kai Mäkisara
(Kai.Makisara@metla.fi) a partir de um driver escrito por Dwayne Forsyth.
Várias outras pessoas também contribuiram com o driver.
mt(1)
O arquivo README.st nos fontes do Linux contém
informações mais recentes sobre o driver e suas possibilidades
de configuração.
1. Quando trocar dados entre sistemas, ambos tem que usar o mesmo
tamanho de bloco físico da fita. Os parâmetros da unidade
após a inicialização freqÜentemente não
são os mesmos que o sistema usa para o dispositivo. A maioria dos
sistema usam unidades no modo de blocagem variável, se a mesma
suportar. Isto aplica-se a maioria das unidades modernas, incluindo DATs,
8mm, DLTs, etc. Pode ser oportuno usar esta unidades em modo variável
também no Linux (i.e usa MTSETBLK ou MTSETDEFBLK na
inicialização para definir o modo), ao menos quando trocar
dados com outros sistemas. A desvantagem disto é que um tamanho de
bloco suficientemente grande tem que ser usado para obter uma taxa de
transferência aceitável em barramento SCSI.
2. Muitos programas (por ex., tar) permitem ao usuário
especificar o fator de bloco na linha de comando. Note que isto determina o
tamanho do bloco físico na fita apenas no modo de bloco
variável.
3. Para poder usar unidades SCSI, o driver SCSI básico, o
driver da placa SCSI e o driver para fita SCSI deve ser compilado no Linux
ou carregado como módulo. Se o driver para fita SCSI não
estiver presente, a unidade é reconhecida, mas o suporte descrito
nesta página não está disponível.
4. O driver grava as mensagens de erro no console/log. Os
códigos escritos em algumas mensagens são
automáticamente traduzidos para texto se a exibição das
mensagens SCSI está habilitada na compilação do
Linux.
Copyright © 1995 Robert K. Nichols.
Copyright © 1999 Kai Mäkisara.
É permitido fazer e distribuir cópias deste manual
desde que o aviso de direitos autorais e esta permissão esteja
presente em todas as cópias. Permissões adicionais
estão contidas nos cabeçalhos do arquivo fonte.
Fábio Henrique F. Silva
<fabiohfs@eol.com.br> (tradução)
Carlos Augusto Horylka <horylka@conectiva.com.br>
(revisão)