Gracias a @kasperd investigué un poco más y este fue el problema. Resulta que esta función se llama EWEOM (Fin de advertencia anticipada del medio) y se refiere a un marcador colocado en la cinta por el fabricante de la cinta, por lo que no es la unidad que realiza un seguimiento de la cantidad de cinta que se ha enrollado.
Escribí un parche para el mbuffer
programa que estoy usando para escribir en la cinta, y efectivamente, en el punto donde estaba llegando al final de la cinta, recibo ENOSPC
errores en write()
llamadas alternas , pero puedo continuar escribiendo más datos. En mi caso, muchos más datos, entre 8 y 19 GiB, dependiendo de la compresión de mis datos no muy comprimibles.
Curiosamente, después de alcanzar el marcador EWEOM, la velocidad de escritura de la cinta disminuye drásticamente. Casi se reduce a la mitad desde 80 MB / seg hasta aproximadamente 47 MB / seg. Esto no parece ser un problema de datos, ya que la unidad ha mantenido 80 MB / s durante horas antes de este punto. Puede escuchar el motor de accionamiento funcionando a una velocidad más lenta, y reescribir sobre una cinta completa para que esta sección se vuelva a escribir no aumenta la velocidad (por lo que no es un caso de que la primera escritura sea más lenta como puede ser al comienzo de un cinta nueva).
No puedo encontrar ninguna documentación sobre cuándo debería aparecer el marcador EWEOM en la cinta, por lo que no estoy seguro de si está estandarizado. Todo lo que pude encontrar es una vaga referencia a las unidades LTO-6/7, que aumentaron en un 5% del espacio de la cinta, lo que parece mucho. Tal vez esto sea para permitir que se vacíen los búferes grandes debido a la alta velocidad de escritura de la cinta.
En lo que respecta a la API de Linux, la línea relevante está en el st.c
código fuente del controlador de cinta SCSI y la explicación de este comportamiento está en la st
documentación del controlador .