.\" -*- nroff -*- .\" Copyright 1995 Robert K. Nichols (Robert.K.Nichols@att.com) .\" Copyright 1999 Kai Mäkisara (Kai.Makisara@metla.fi) .\" .\" A redistribuição de cópias deste manual é permitida, desde que acom- .\" panhadas deste aviso de copyright e desta permissão. .\" .\" A distribuição de versões modificadas deste manual é permitida, desde .\" que, sob as condições descritas acima e o trabalho derivado do origi- .\" nal seja distribuido sob os mesmos termos desta permissão. .\" .\" Uma vez que o Linux e as bibliotecas estão constantemente sendo alte- .\" radas, esta página de manual pode estar incorreta ou desatualizada. O .\" autor não assume quaisquer responsibilidades por erros ou omissões ou .\" por danos resultantes por uso das informações obtidas aqui. O autor .\" pode não ter tomado os mesmos níveis de cuidados na produção deste ma- .\" nual, que é licenciado sem cobrança de taxas, como se ele fosse produ- .\" zido comercialmente. .\" .\" Versões formatadas ou processadas deste manual, se não vier com os fon- .\" tes, devem ter o aviso de copyright e relacionado os autores do mesmo. .TH ST 4 "18/01/1999" "Linux 2.0 - 2.2" "Manual do Programador Linux" .SH NOME st \- Dispositivo de Fita SCSI .SH SINOPSE .nf .B #include .sp .BI "int ioctl(int " fd ", int " request " [, (void *)" arg3 "])" .BI "int ioctl(int " fd ", \s-1MTIOCTOP\s+1, (struct mtop *)" mt_cmd ")" .BI "int ioctl(int " fd ", \s-1MTIOCGET\s+1, (struct mtget *)" mt_status ")" .BI "int ioctl(int " fd ", \s-1MTIOCPOS\s+1, (struct mtpos *)" mt_pos ")" .fi .SH DESCRIÇÃO O driver .B st provê a interface para vários dispositivos de fita SCSI. Atualmente, o driver controla todos os dispositivos detetados do tipo \(lqacesso-seqüencial.\(rq O driver .B st usa o número de dispositvo maior 9. .PP 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), .IR n , e um número de dispositivo \(lqsem rebobinamento\(rq números de dispositivo, .IR "" ( n "+ 128)." Os dispositivos abertos usando o número principal receberão o comando \s-1REWIND\s+1 que os rebobinará quando forem fechados. Dispositivos abertos usando o \(rqnúmero de dispositvo\(lqsem 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). .PP 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). .PP Os dispositivos são tipicamente criados por: .RS .nf 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 .fi .RE .PP Não há dispositivos de bloco correspondentes. .PP 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). .PP 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). .PP 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 .B 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. .PP 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). .PP O driver suporta .B 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. .PP O dispositivo .B /dev/tape é geralmente criado como um vínculo símbólico ou fixo para o dispositivo de fita padrão no sistema. .SH "TRANSFERÊNCIA DE DADOS" 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. .PP 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. .PP 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. .PP Um marcador de arquivo é automáticamente gravado na fita se a última operação na fita antes de fechá-la foi uma gravação. .PP 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. .SH "IOCTLS" O driver suporta três requisitos ioctl. Os requisitos não reconhecidos pelo driver .B st são passados para o driver .B SCSI . As definições abaixo são do .BR /usr/include/linux/mtio.h : .SS "\s-1MTIOCTOP\s+1 \- Executa uma operação de fita" .PP Este requisito leva um argumento do tipo .BR "(struct mtop *)" . Nem todos as unidades suportam todas as operações. O driver retorna um erro EIO se a unidade rejeitar uma operação. .PP .nf .ta +.4i +.7i +1i /* Estrutura do \s-1MTIOCTOP\s+1 \- comando op de fita mag: */ struct mtop { short mt_op; /* operações definidas abaixo */ int mt_count; /* quantidade delas */ }; .fi .PP Operações de fita magnéticas para uso normal: .PD 0 .IP MTBSF 14 Retrocede espaços sobre .B mt_count marcadores de arquivos. .IP MTBSFM Retrocede espaços sobre .B mt_count marcadores de arquivos. Reposiciona a fita no lado EOT último marcador de arquivo. .IP MTBSR Retrocede espaços sobre .B mt_count registros (blocos da fita). .IP MTBSS Retrocede espaços sobre .B mt_count setmarks. .IP MTCOMPRESSION Habilita compressão de dados se .B mt_count não for zero e desabilita a compressão se .B mt_count é zero. Este comando usa o MODO page 15 suportado pela maioria das fitas DATs. .IP MTEOM Vai para o final da mídia gravada (para acrescentar arquivos). .IP MTERASE Apaga a fita. .IP MTFSF Avança .B mt_count marcadores de arquivos. .IP MTFSFM Avança .B mt_count marcadores de arquivos. Reposiciona a fita no lado BOT do último marcado de arquivo. .IP MTFSR Avança espaços sobre .B mt_count registro (blocos da fita). .IP MTFSS Avança espaços sobre .B mt_count setmarks. .IP MTLOAD Executa o comando load SCSI. Um caso especial está disponível para alguns carregadores automáticos HP. Se .B mt_count é a constante MT_ST_HPLOADER_OFFSET mais um número, o número é enviando para a unidade controlar a carga automática. .IP MTLOCK Bloqueia a porta da unidade de fita. .IP MTMKPART Formata a fita em uma ou duas partições. Se .B 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 .B 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). .IP MTNOP Nenhuma operação \- descarrega o buffer do driver. Ele pode ser usado antes de ler o estado com \s-1MTIOCGET\s+1. .IP MTOFFL Rebobina a fita e coloca a unidade fora de linha. .IP MTRESET Reinicia a unidade. .IP MTRETEN Retensiona a fita. .IP MTREW Rebobina. .IP MTSEEK Posiciona no número de bloco especificado em .BR mt_count . Esta operação requer uma unidade SCSI-2 que suporte o comando \s-1LOCATE\s+1 (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 \s-1MTIOCPOS\s+1 se o endereço específico do dispositivo foi usado. .IP MTSETBLK Define o tamanho do bloco para o valor especificado em .BR mt_count . Um tamanho de zero define o modo de bloco de tamanho variável. .IP MTSETDENSITY Define a densidade para o código em .BR mt_count . O código de densidade suportado pela unidade pode ser encontrado na documentação da unidade. .IP MTSETPART A partição é alternada para .B 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). .IP MTUNLOAD Executa o comando SCSI unload (não ejeta a fita). .IP MTUNLOCK Desbloqueia a porta da unidade de fita. .IP MTWEOF Grava .B mt_count marcadores de arquivos. .IP MTWSM Grava .B mt_count setmarks. .PD .PP Operações de Fita Magnética para configurar opções de dispositivo (superusuário): .PD 0 .IP MTSETDRVBUFFER 8 Define várias opções de driver e unidade de acordo com os bits codificados em .BR 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.) .PD .IP 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: .RS 12 .IP 0 4 A unidade não informará o estado \s-1GOOD\s+1 nos comandos de gravação até que os blocos de dados sejam gravados na mídia. .PD 0 .IP 1 A unidade informará o estado \s-1GOOD\s+1 nos comandos de gravação assim que todos os dados tenham sido transferidos do buffer interno da unidade. .IP 2 A unidade pode informar o estado \s-1GOOD\s+1 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. .PD .RE .IP "" Para controlar o limite de gravação, o valor em .B mt_count deve incluir a constante \s-1MT_ST_WRITE_THRESHOLD\s+1 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 .BR \s-1DESCRIÇÃO\s+1 , acima). .IP Para definir e limpar as opções Booleanas o valor em .B mt_count deve incluir uma das constantes \s-1MT_ST_BOOLEANS\s+1, \s-1MT_ST_SETBOOLEANS\s+1, \s-1MT_ST_CLEARBOOLEANS\s+1 ou \s-1MT_ST_DEFBOOLEANS\s+1 logicamente ORed com qualquer combinação das opções a seguir é desejável. Usando \s-1MT_ST_BOOLEANS\s+1 as opções podem ser definidas para valores definidos nos bits correspondentes. Com \s-1MT_ST_SETBOOLEANS\s+1 as opções podem ser seletivamente definidas e com \s-1MT_ST_DEFBOOLEANS\s+1 seletivamente limpas. .IP "" As opções padrões para um dispositivo de fita podem ser definidas com \s-1MT_ST_DEFBOOLEANS\s+1. 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. .IP "" As opções Booleanas são: .IP .PD 0 .RS .IP "\s-1MT_ST_BUFFER_WRITES\s+1 (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. .IP "\s-1MT_ST_ASYNC_WRITES\s+1 (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. .IP "\s-1MT_ST_READ_AHEAD\s+1 (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. .IP "\s-1MT_ST_TWO_FM\s+1 (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. .PD .IP 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. .PP .PD 0 .IP "\s-1MT_ST_DEBUGGING\s+1 (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 \s-1DEBUG\s+1 definido com valor diferente de zero). .IP "\s-1MT_ST_FAST_EOM\s+1 (Padrão: false)" Esta opção envia a operação \s-1MTEOM\s+1 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 \s-1MTIOCGET\s+1. Se \s-1MT_ST_FAST_EOM\s+1 é false o driver responderá a um requisito \s-1MTEOM\s+1 repassando espaços sobre o arquivo. .IP "\s-1MT_ST_AUTO_LOCK\s+1 (Padrão: false)" Quando esta opção é true, a porta da unidade é bloqueada quando o dispositivo é aberto e desbloqueada quando ele é fechado. .IP "\s-1MT_ST_DEF_WRITES\s+1 (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. .IP "\s-1MT_ST_CAN_BSR\s+1 (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. .IP "\s-1MT_ST_NO_BLKLIMS\s+1 (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. .IP "\s-1MT_ST_CAN_PARTITIONS\s+1 (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. .IP "\s-1MT_ST_SCSI2LOGICAL\s+1 (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. .IP "\s-1MT_ST_SYSV\s+1 (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. .IP \s-1EXEMPLO\s+1 .nf .ta +.4i +.7i +1i .BI "struct mtop " mt_cmd ; .IB "mt_cmd.mt_op" " = \s-1MTSETDRVBUFFER\s+1;" .IB "mt_cmd.mt_count" " = \s-1MT_ST_BOOLEANS\s+1 |" .B " \s-1MT_ST_BUFFER_WRITES\s+1 |" .B " \s-1MT_ST_ASYNC_WRITES\s+1;" .BI "ioctl(" fd ", \s-1MTIOCTOP\s+1, &" mt_cmd ");" .fi .RE .PD .IP "" O tamanho padrão do bloco para um dispositivo pode ser definido com \s-1MT_ST_DEF_BLKSIZE\s+1 e a densidade padrão com \s-1MT_ST_DEFDENSITY\s+1. Uma operação OU é executada entre os valores dos parâmetros e o código da operação. .IP "" Com o Linux 2.1.x e posteriores, os limites de tempo podem ser definidos com o subcomando \s-1MT_ST_SET_TIMEOUT\s+1 e um OU do tempo em segundos. O limite longo (usado para rebobinamento e outros comandos que levam muito tempo) pode ser definido com \s-1MT_ST_SET_LONG_TIMEOUT\s+1. 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. .SS "\s-1MTIOCGET\s+1 \- Obtém o estado" .PP Esta requisição leva um argumento do tipo .BR "(struct mtget *)" . .PP .nf /* estrutura para \s-1MTIOCGET\s+1 - 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; }; .fi .IP \fBmt_type\fP 11 Arquivo cabeçalho define vários valores para .BR mt_type , mas o driver atual só informa os tipos genéricos \s-1MT_ISSCSI1\s+1 (Fita SCSI-1 genérica) e \s-1MT_ISSCSI2\s+1 (Fita SCSI-2 genérica). .PD 0 .IP \fBmt_resid\fP contém o número da partição da fita atual. .IP \fBmt_dsreg\fP 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 \s-1MT_ST_BLKSIZE_SHIFT\s+1, \s-1MT_ST_BLKSIZE_MASK\s+1, \s-1MT_ST_DENSITY_SHIFT\s+1 e \s-1MT_ST_DENSITY_MASK\s+1. .IP \fBmt_gstat\fP dá informações genéricas do estado (independente do dispositivo). O arquivo cabeçalho define macros para testar estes bits de estado: .RS .HP 4 \s-1GMT_EOF(\s+1\fIx\fP\s-1)\s+1: A fita está posicionada após a marca de arquivo (sempre false após uma operação \s-1MTSEEK\s+1). .HP \s-1GMT_BOT(\s+1\fIx\fP\s-1)\s+1: A fita está posicionada no inicio do primeiro arquivo (sempre false após uma operação \s-1MTSEEK\s+1). .HP \s-1GMT_EOT(\s+1\fIx\fP\s-1)\s+1: Uma operação da fita alcançou o final físico da Fita. .HP \s-1GMT_SM(\s+1\fIx\fP\s-1)\s+1: A fita está posicionada na setmark (sempre false após uma operação \s-1MTSEEK\s+1). .HP \s-1GMT_EOD(\s+1\fIx\fP\s-1)\s+1: A fita está posicionada no final do dado gravado. .HP \s-1GMT_WR_PROT(\s+1\fIx\fP\s-1)\s+1: 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. .HP \s-1GMT_ONLINE(\s+1\fIx\fP\s-1)\s+1: O último .B open() encontrou uma fita na unidade e pronta para operação. .HP \s-1GMT_D_6250(\s+1\fIx\fP\s-1)\s+1, \s-1GMT_D_1600(\s+1\fIx\fP\s-1)\s+1, \s-1GMT_D_800(\s+1\fIx\fP\s-1)\s+1: Reporta informações de estado \(lqgenéricas\(rq sobre a densidade atual definida em 9-track \(Apenas para unidades de fita de 12". .HP \s-1GMT_DR_OPEN(\s+1\fIx\fP\s-1)\s+1: A unidade não contém uma fita. .HP \s-1GMT_IM_REP_EN(\s+1\fIx\fP\s-1)\s+1: 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. .RE .IP \fBmt_erreg\fP O único campo definido em .B mt_erreg é o contador de erros recuperados, nos 16 bits de baixa órdem (como definido por\s-1MT_ST_SOFTERR_SHIFT\s+1 e \s-1MT_ST_SOFTERR_MASK\s+1). 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). .IP \fBmt_fileno\fP Informa o número atual do arquivo (base-zero). Este valor é -1 quando o número do arquivo é desconhecido (i.e., depois de \s-1MTBSS\s+1 ou \s-1MTSEEK\s+1). .IP \fBmt_blkno\fP 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 \s-1MTBSF\s+1, \s-1MTBSS\s+1, ou \s-1MTSEEK\s+1). .PD .SS "\s-1MTIOCPOS\s+1 \- Obtém a posição da fita." .PP Este requesito aceita um argumento do tipo .B "(struct mtpos *)" e informa a noção da unidade do número de bloco da fita atual, que não é o mesmo que .B mt_blkno retornado por \s-1MTIOCGET\s+1. A unidade deve ser uma SCSI-2 que suporte o comando \s-1READ POSITION\s+1 (endereço específico do dispositivo) ou uma unidade SCSI-1 Tandberg-compatível (Tandberg, Archive Viper, Wangtek, ... ). .PP .nf /* estrutura para \s-1MTIOCPOS\s+1 - comando para obter a posição da fita */ struct mtpos { long mt_blkno; /* número do bloco atual */ }; .fi .SH "VALOR RETORNADO" .IP EIO 14 A operação solicitada não pode ser concluida. .IP ENOSPC Uma operação de gravação não pode ser concluida porque a fita chegou no final físico. .IP EACCES Tentando gravar ou apagar um fita com proteção a gravação. (Este erro não é detetado durante um .BR open() .) .IP EFAULT Os parâmetros do comando apontam para memória que não pertencem ao processo chamado. .IP ENXIO Durante a abertura o dispositivo de fita não existe. .IP EBUSY O dispositivo já está em uso ou o driver não conseguiu alocar um buffer. .IP EOVERFLOW Tentou ler ou gravar um bloco de tamanho variável que é maior do que o buffer interno da unidade. .IP EINVAL Um .B ioctl() tem um argumento ilegal ou o tamanho do bloco requisita é ilegal. .IP ENOSYS .BR ioctl() desconhecido. .IP EROFS Tentativa de abrir com O_WRONLY ou O_RDWR quando a fita na unidade está protegida contra gravação. .SH ARQUIVOS /dev/st* : Dispositivo de fita SCSI com auto-rebobinamento .br /dev/nst* : Dispositivo de fita SCSI sem auto-rebobinamento .SH AUTOR O driver foi escrito por Kai M\(:akisara (Kai.Makisara@metla.fi) a partir de um driver escrito por Dwayne Forsyth. Várias outras pessoas também contribuiram com o driver. .SH "VEJA TAMBÉM" .BR mt (1) .PP O arquivo README.st nos fontes do Linux contém informações mais recentes sobre o driver e suas possibilidades de configuração. .SH NOTAS 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. .PP 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. .PP 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. .PP 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. .SH DIREITOS AUTORAIS Copyright \(co 1995 Robert K. Nichols. .br Copyright \(co 1999 Kai M\(:akisara. .PP É 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. .SH TRADUÇÃO E REVISÃO PARA LÍNGUA PORTUGUESA \&\fR\&\f(CWFábio Henrique F. Silva (tradução)\fR \&\fR\&\f(CWCarlos Augusto Horylka (revisão)\fR