Graças a @kasperd, fiz uma investigação mais aprofundada e esse foi realmente o problema. Acontece que esse recurso é chamado de EWEOM (Fim da mídia de aviso prévio) e se refere a um marcador colocado na fita pelo fabricante da fita; portanto, não é a unidade que monitora a quantidade de fita que foi colocada no spool.
Eu escrevi um patch para o mbuffer
programa que estou usando para gravar na fita e, com certeza, no ponto em que estava chegando ao final da fita, recebo ENOSPC
erros em write()
chamadas alternadas , mas posso continuar escrevendo mais dados. No meu caso, muito mais dados - entre 8 e 19 GiB, dependendo da compactação dos meus dados não muito compactáveis.
Curiosamente, depois que o marcador EWEOM é alcançado, a velocidade de gravação da fita cai drasticamente. Quase reduz pela metade de 80 MB / s para 47 MB / s. Isso não parece ser um problema de dados, pois a unidade manteve 80 MB / s por horas antes deste ponto. Você pode ouvir o motor de acionamento a uma velocidade mais lenta e reescrever uma fita inteira, para que esta seção seja reescrita para não aumentar a velocidade (portanto, não é o caso da primeira gravação ser mais lenta, como pode ser no início de uma fita nova.)
Não consigo encontrar nenhuma documentação sobre quando o marcador EWEOM deve aparecer na fita, portanto, não tenho certeza se ele está padronizado. Tudo o que pude encontrar é uma referência vaga às unidades LTO-6/7, que aumentaram para 5% do espaço da fita, o que parece muito. Talvez seja para permitir que grandes buffers sejam liberados devido à alta velocidade de gravação da fita.
No que diz respeito à API do Linux, a linha relevante está no st.c
código-fonte do driver de fita SCSI e a explicação desse comportamento está na st
documentação do driver .