ОПИСАНИЕ
The st driver provides the interface to a variety of SCSI
tape devices. Currently, the driver takes control of all detected devices of
type “sequential-access”. The st driver uses major
device number 9.
Each device uses eight minor device numbers. The lowermost five
bits in the minor numbers are assigned sequentially in the order of
detection. In the 2.6 kernel, the bits above the eight lowermost bits are
concatenated to the five lowermost bits to form the tape number. The minor
numbers can be grouped into two sets of four numbers: the principal
(auto-rewind) minor device numbers, n, and the
“no-rewind” device numbers, (n + 128). Devices opened
using the principal device number will be sent a REWIND command when
they are closed. Devices opened using the “no-rewind” device
number will not. (Note that using an auto-rewind device for positioning the
tape with, for instance, mt does not lead to the desired result: the tape is
rewound after the mt command and the next command starts from the beginning
of the tape).
В каждой
группе
четыре
младших
номера
доступны
для
определения
устройств
с особыми
характеристиками
(такими как:
размер
блока,
сжатие,
плотность
и другое).
Когда
система
запускается,
доступно
только
первое
устройство.
Другие три
приводятся
в действие,
когда
определены
некоторые
их
характеристики
(смотрите
ниже). Путем
изменения
константы
при
компиляции
возможно
изменение
баланса
между
максимальным
числом
ленточных
накопителей
и числом из
младших
номеров
каждого
накопителя.
Начальное
значение
позволяет
контролировать
32 ленточных
устройства.
Например,
возможно
контролировать
до 64-х
ленточных
устройств
с двумя
младшими
номерами
для
различных
параметров.
Устройства
обычно
создаются
так:
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
Соответствующее
блочное
устройство
отсутствует.
The driver uses an internal buffer that has to be large enough to
hold at least one tape block. Before Linux 2.1.121, the buffer is allocated
as one contiguous block. This limits the block size to the largest
contiguous block of memory the kernel allocator can provide. The limit is
currently 128 kB for 32-bit architectures and 256 kB for
64-bit architectures. In newer kernels the driver allocates the buffer in
several parts if necessary. By default, the maximum number of parts is 16.
This means that the maximum block size is very large (2 MB if
allocation of 16 blocks of 128 kB succeeds).
The driver's internal buffer size is determined by a compile-time
constant which can be overridden with a kernel startup option. In addition
to this, the driver tries to allocate a larger temporary buffer at run time
if necessary. However, run-time allocation of large contiguous blocks of
memory may fail and it is advisable not to rely too much on dynamic buffer
allocation before Linux 2.1.121 (this applies also to demand-loading the
driver with kerneld or kmod).
В
драйвере
нет
специальной
поддержки
для
устройств
определённых
производителей
или
моделей.
После
старта
системы
параметры
ленточного
устройства
определяются
микропрограммой
устройства.
Для
примера,
если
микропрограмма
выбирает
режим с
блоками
одинакового
размера, то
ленточное
устройство
использует
этот режим.
Параметры
могут быть
изменены
вызовами
ioctl(2) и
действуют
до тех пор,
пока
устройство
не закрыто
и потом не
открыто
вновь.
Установка
параметров
влияет на
оба
устройства
(с
автоперемоткой
и без
автоперемотки).
Внутри
подгруппы
четырёх
устройств
для
каждого
могут быть
заданы
особые
параметры.
Параметры
начинают
работать,
когда
устройство
открывается.
Для
примера,
системный
администратор
может
определить
одно
устройство,
которое
записывает
данные в
режиме
блоков
одинакового
размера с
задаваемым
размером и
другое,
которое
записывает
данные в
режиме
блоков с
разным
размером
(если
накопитель
поддерживает
оба
режима).
Драйвер
поддерживает
ленточные
разделы,
но только
если их
поддерживает
само
устройство.
Заметим,
что
ленточные
разделы не
имеют
ничего
общего с
разделами
диска.
Размеченная
лента
одного
носителя
может
выглядеть
как
несколько
логических
лент.
Поддержка
разделов
включается
с помощью
ioctl(2).
Местоположение
ленты
зафиксировано
внутри
каждого
раздела.
При
последующих
ленточных
операциях
используется
нужный
раздел,
выбранный
с помощью
ioctl(2).
Переключение
раздела
выполняется
вместе со
следующей
операцией
с лентой во
избежании
ненужной
перемотки.
Максимальное
число
разделов
на ленте
определяется
константой
при
компиляции
(изначально
оно равно
четырём).
Драйвер
содержит
вызов ioctl(2),
который
позволяет
форматировать
ленту с
одним или
двумя
разделами.
Обычно, в
системе
создаётся
устройство
/dev/tape в виде
жёсткой
или
символьной
ссылки на
ленточное
устройство
по
умолчанию.
Starting from Linux 2.6.2, the driver exports in the sysfs
directory /sys/class/scsi_tape the attached devices and some
parameters assigned to the devices.
Передача
данных
Драйвер
поддерживает
операции в
обоих
режимах: с
постоянным
и
переменным
размером
блоков
(только
если оба
режима
поддерживает
само
устройство).
В режиме с
постоянным
размером
блока
устройство
выполняет
запись
блоками
заданного
размера, и
размер
блока не
зависит от
количества
байтов,
которые
записываются
системными
вызовами. В
режиме с
переменным
размером
блока один
блок ленты
записывается
при каждом
вызове
записи, и
размер
соответствующего
блока
ленты
определяется
в
соответствии
с
количеством
записываемых
байт.
Заметим,
что блоки
ленты не
содержат
информации
о режиме
записи: при
чтении
единственно
важной
вещью
является
использование
нужных
команд,
которые
принимают
размеры
блоков
ленты.
В режиме с
переменным
размером
блока при
чтении
количество
байтов не
совпадает
точно с
размером
блока
ленты. Если
количество
байтов
больше, чем
в
следующем
блоке
ленты,
драйвер
возвращает
данные, а
функция
возвращает
реальный
размер
блока. Если
размер
блока
больше, чем
количество
байтов, то
возвращается
ошибка.
In fixed-block mode the read byte counts can be arbitrary if
buffering is enabled, or a multiple of the tape block size if buffering is
disabled. Before Linux 2.1.121 allow writes with arbitrary byte count if
buffering is enabled. In all other cases (before Linux 2.1.121 with
buffering disabled or newer kernel) the write byte count must be a multiple
of the tape block size.
In Linux 2.6, the driver tries to use direct transfers between the
user buffer and the device. If this is not possible, the driver's internal
buffer is used. The reasons for not using direct transfers include improper
alignment of the user buffer (default is 512 bytes but this can be changed
by the HBA driver), one or more pages of the user buffer not reachable by
the SCSI adapter, and so on.
Маркер
файла
автоматически
записывается
на ленту,
если
последней
операцией
до
закрытия
была
запись.
Когда при
чтении
обнаруживается
маркер
файла,
происходит
следующее.
Если при
обнаружении
маркера
есть
данные в
буфере, то
возвращаются
данные
буфера.
Следующее
чтение
вернёт
ноль
байтов.
Затем
вернёт
данные из
следующего
файла. О
конце
записанных
данных
будет
сообщено
возвращением
нуля
байтов в
двух
операциях
чтения
подряд. И,
наконец,
третье
чтение
вернёт
ошибку.
Вызовы ioctl
Драйвер
поддерживает
три
запроса ioctl(2).
Запросы, не
опознанные
драйвером
st,
пропускаются
в драйвер
SCSI.
Определения,
приведённые
далее,
взяты из
/usr/include/linux/mtio.h:
Для этого
запроса
требуется
аргумент с
типом (struct mtop *).
Не все
устройства
поддерживает
все
операции.
Драйвер
возвращает
ошибку EIO,
если
устройство
не
выполнило
операцию.
/* Структура для MTIOCTOP - операция с маг. лентой */
struct mtop {
short mt_op; /* операции перечислены далее */
int mt_count; /* их количество */
};
Операции
с
магнитной
лентой для
обычного
использования:
- MTBSF
- Перемотка
ленты на mt_count
файловых
маркеров
назад.
- MTBSFM
- Перемотка
ленты на mt_count
файловых
маркеров
назад.
Перемотка
ленты на
сторону EOT
последнего
маркера
файла.
- MTBSR
- Перемотка
ленты на mt_count
записей
назад
(блоков
ленты).
- MTBSS
- Перемотка
ленты на mt_count
сборочных
маркеров
(setmarks) назад.
- MTCOMPRESSION
- Включение
режима
сжатия
данных на
ленте
устройства,
если mt_count не
равно 0, и
отключение
сжатия,
если mt_count
равно 0. Эта
команда
использует
MODE page 15,
поддерживаемую
многими
DAT-устройствами.
- MTEOM
- Переход в
конец
записанных
на
носителе
данных (для
добавления
файлов).
- MTERASE
- Erase tape. With Linux 2.6, short erase (mark tape empty) is performed if
the argument is zero. Otherwise, long erase (erase all) is done.
- MTFSF
- Перемотка
ленты на mt_count
файловых
маркеров
вперёд.
- MTFSFM
- Перемотка
ленты на mt_count
файловых
маркеров
вперёд.
Перемотка
ленты на
сторону BOT
последнего
маркера
файла.
- MTFSR
- Перемотка
ленты на mt_count
записей
вперёд
(блоков
ленты).
- MTFSS
- Перемотка
ленты на mt_count
сборочных
маркеров
вперёд.
- MTLOAD
- Выполнение
SCSI-команды
загрузки.
Для
некоторых
автозагрузчиков
HP
выполняется
особое
действие.
Если mt_count
равно
константе
MT_ST_HPLOADER_OFFSET плюс
некоторое
число, то
это
значение
передаётся
устройству
для
управления
автозагрузчиком.
- MTLOCK
- Блокирование
дверцы
ленточного
устройства.
- MTMKPART
- Format the tape into one or two partitions. If mt_count is
positive, it gives the size of partition 1 and partition 0 contains the
rest of the tape. If mt_count is zero, the tape is formatted into
one partition. From Linux 4.6, a negative mt_count specifies the
size of partition 0 and the rest of the tape contains partition 1. The
physical ordering of partitions depends on the drive. This command is not
allowed for a drive unless the partition support is enabled for the drive
(see MT_ST_CAN_PARTITIONS below).
- MTNOP
- No op—flushes the driver's buffer as a side effect. Should be used
before reading status with MTIOCGET.
- MTOFFL
- Перемотка
ленты и
отключение
устройства.
- MTRESET
- Возврат
устройства
в исходное
состояние.
- MTRETEN
- Подтягивание
ленты.
- MTREW
- Перемотка
ленты
назад.
- MTSEEK
- Переход к
блоку
ленты с
номером mt_count.
Эта
операция
требует
устройства
SCSI-2,
поддерживающего
команду LOCATE
(адрес,
определяемый
устройством),
или
Tandberg-совместимого
устройства
SCSI-1 (Tandberg, Archive Viper, Wangtek, ... ).
Номер
блока
должен
быть равен
значению,
которое
было
получено
ранее с
помощью MTIOCPOS,
если
используется
адрес,
определяемый
устройством.
- MTSETBLK
- Задание
размера
блока
устройства
равному mt_count.
Нулевое
значение
включает
режим с
переменным
размером
блоков.
- MTSETDENSITY
- Задание
плотности
данных на
ленте
равной mt_count.
Коды
плотности
данных,
поддерживаемые
устройством,
можно
найти в
документации
к
устройству.
- MTSETPART
- Переключение
активного
раздела на
номер mt_count.
Разделы
нумеруются
начиная с
нуля. Эта
команда
только для
устройств
с
включённой
поддержкой
разделов
(см. MT_ST_CAN_PARTITIONS
далее).
- MTUNLOAD
- Выполнение
SCSI-команды
выгрузки
(но лента
не
выталкивается).
- MTUNLOCK
- Разблокирование
дверцы
ленточного
устройства.
- MTWEOF
- Запись mt_count
маркеров
файлов.
- MTWSM
- Запись mt_count
сборочных
маркеров.
Операции
с
магнитной
лентой по
установке
параметров
устройства
(для
суперпользователя):
- MTSETDRVBUFFER
- Set various drive and driver options according to bits encoded in
mt_count. These consist of the drive's buffering mode, a set of
Boolean driver options, the buffer write threshold, defaults for the block
size and density, and timeouts (only since Linux 2.1). A single operation
can affect only one item in the list below (the Booleans counted as one
item.)
- Нулевое
значение
старших 4-х
битов
будет
использовано
для
установки
режима
буферизации
устройства.
Режимы
буферизации:
- 0
- Устройство
не сообщит,
что запись
прошла
успешно (GOOD)
до тех пор,
пока блоки
данных
фактически
не будут
записаны
на
носитель.
- 1
- Устройство
может
сообщить,
что запись
прошла
успешно
после того,
как все
данные
будут
перемещены
во
внутренний
буфер
устройства.
- 2
- Устройство
может
сообщить,
что запись
прошла
успешно
после того,
как: (а) все
данные
будут
перемещены
во
внутренний
буфер
устройства
и (б) все
буферизованные
данные из
различных
источников
были
успешно
записаны
на
носитель.
- Для
контроля
записи
пороговое
значение
mt_count должно
включать в
себя
константу
MT_ST_WRITE_THRESHOLD
побитно
сложенную
(OR) с
счётчиком
блоков в
первых 28-и
битах.
Счётчик
блоков
содержит
количество
блоков по 1024
байта, а не
физических
блоков на
ленте.
Пороговое
значение
не может
превышать
размер
внутреннего
буфера
устройства.
(см.
ОПИСАНИЕ
выше).
- Для
установки
и очистки
логических
параметров
значение
mt_count должно
включать в
себя одну
из
констант:
MT_ST_BOOLEANS, MT_ST_SETBOOLEANS,
MT_ST_CLEARBOOLEANS, MT_ST_DEFBOOLEANS
или любую
их побитно
сложенную
комбинацию.
Используя
параметры
MT_ST_BOOLEANS можно
задать
значения
соответствующими
битами. С
помощью
параметров
MT_ST_SETBOOLEANS можно
выборочно
установить,
а с помощью
MT_ST_DEFBOOLEANS —
выборочно
сбросить
некоторые
биты.
- Параметры
по
умолчанию
для
ленточного
устройства
устанавливаются
с помощью
MT_ST_DEFBOOLEANS.
Неактивное
ленточное
устройство
(например,
устройство
с младшим
номером 32
или 160)
активируется
когда для
него
назначаются
параметры
по
умолчанию
в первый
раз.
Активированное
устройство
наследует
параметры,
которые не
заданы
явно, от
устройства,
активированного
при
загрузке
ОС.
- Логические
параметры:
- MT_ST_BUFFER_WRITES
(по
умолчанию
true)
- Выполнять
буферизацию
чтения и
опережающее
чтение в
режиме с
постоянным
размером
блока. Если
значение
параметра
равно false и
устройство
использует
режим с
постоянным
размером
блока, то
во всех
операциях
чтения
должны
использоваться
блоки
кратной
длины. Для
надёжной
записи
многотомных
архивов
значение
этого
параметра
должно
быть равно
false.
- MT_ST_ASYNC_WRITES
(по
умолчанию
true)
- Когда
значение
этого
параметра
равно true, то
операции
записи
сразу
завершаются,
не
дожидаясь
пока
данные
переместятся
в
устройство,
если
данные
помещаются
в буфер
драйвера.
Порог
записи
определяет,
насколько
должен
быть
заполнен
буфер до
ввода
новых
SCSI-команд.
Любые
ошибки,
возвращённые
устройством,
хранятся
до
следующей
операции.
Для
надёжной
записи
многотомных
архивов
значение
этого
параметра
должно
быть равно
false.
- MT_ST_READ_AHEAD
(по
умолчанию
true)
- Этот
параметр
указывает
драйверу
выполнять
буферизацию
чтения и
опережающее
чтение в
режиме с
постоянным
размером
блока. Если
значение
параметра
равно false и
устройство
использует
режим с
постоянным
размером
блока, то
во всех
операциях
чтения
должны
использоваться
блоки
кратной
длины.
- MT_ST_TWO_FM
(по
умолчанию
false)
- Этот
параметр
изменяет
поведение
драйвера
после
закрытия
файла. По
умолчанию
драйвер
записывает
один
маркер
файла. Если
значение
параметра
равно true, то
драйвер
запишет
два
маркера
файла и
вернётся
на место
второго.
- Замечание:
этому
параметру
не может
быть
присвоено
значение true
для
ленточных
устройств
QIC, так как
они не
могут
перезаписать
маркер
файла. Они
находят
конец
записанных
данных ища
пустое
место на
ленте, а не
два
последовательных
маркера
файла.
Многие
современные
устройства
также
находят
конец
записанных
данных, и
использование
двух меток
файла
обычно
необходимо
только при
одновременном
использовании
лент в
нескольких
разных
системах.
- MT_ST_DEBUGGING
(по
умолчанию
false)
- Этот
параметр
включает
вывод
отладочных
сообщений
драйвера
(работает
только в
том случае,
если
драйвер
был собран
с
ненулевым
значением
DEBUG).
- MT_ST_FAST_EOM
(по
умолчанию
false)
- Этот
параметр
заставляет
посылать
операцию
MTEOM
непосредственно
устройству,
потенциально
увеличивая
скорость
операций,
но
возникает
опасность
потерять
дорожку
текущего
файла,
номер
которой
обычно
возвращается
по запросу
MTIOCGET. Если
значение
параметра
MT_ST_FAST_EOM равно false,
то драйвер
отвечает
на запрос
MTEOM,
перематывая
ленту к
концу
записанных
файлов.
- MT_ST_AUTO_LOCK
(по
умолчанию
false)
- When this option is true, the drive door is locked when the device file is
opened and unlocked when it is closed.
- MT_ST_DEF_WRITES
(по
умолчанию
false)
- Параметры
ленты
(размер
блока,
режим,
сжатие и
т.д.) могут
изменяться,
когда
выполняется
переход от
одного
устройства
к другому
устройству,
которое
связано с
тем же
устройством,
в
зависимости
от того,
как
определяются
устройства.
Этот
параметр
определяет,
будут ли
применяться
изменения
через
драйвер
при помощи
команд SCSI,
или
устройство
само
определит
возможности,
которые
будут
использоваться.
Если
значение
параметра
равно false, то
драйвер
будет
посылать
команды SCSI
сразу
после
смены
устройства.
Если
значение
параметра
равно true,
команды SCSI
не
отправляются
до запроса
записи. В
этом
случае
микропрограмма
устройства
позволяет
выполнить
обнаружение
структуры
ленты во
время
чтения, а
команды SCSI
используются
только для
проверки
правильности
записи на
ленту в
соответствии
со
спецификацией.
- MT_ST_CAN_BSR
(по
умолчанию
false)
- When read-ahead is used, the tape must sometimes be spaced backward to the
correct position when the device is closed and the SCSI command to space
backward over records is used for this purpose. Some older drives can't
process this command reliably and this option can be used to instruct the
driver not to use the command. The end result is that, with read-ahead and
fixed-block mode, the tape may not be correctly positioned within a file
when the device is closed. With Linux 2.6, the default is true for drives
supporting SCSI-3.
- MT_ST_NO_BLKLIMS
(по
умолчанию
false)
- Некоторые
устройства
не
понимают
SCSI-команду READ
BLOCK LIMITS. Если
параметр
установлен,
то драйвер
не
исполняет
эту
команду.
Недостатком
этого
является
невозможность
проверки
драйвером
до
отправки
команд,
поддерживается
ли
устройством
выбранный
размер
блока.
- MT_ST_CAN_PARTITIONS
(по
умолчанию
false)
- Этот
параметр
даёт
возможность
поддерживать
несколько
разделов
на ленте.
Он
применяется
ко всем
файлам
устройств,
связанным
с
устройством.
- MT_ST_SCSI2LOGICAL
(по
умолчанию
false)
- Этот
параметр
заставляет
драйвер
использовать
адресацию
логических
блоков,
определённую
в
стандарте
SCSI-2 для
выполнения
операций
поиска и
пересчёта
(с
командами
MTSEEK и MTIOCPOS и в
том случае,
когда
изменяются
разделы
ленты).
Желательно
установить
этот
параметр,
если
устройство
поддерживает
логические
адреса,
потому что
они
рассчитывают
также и
маркеры
файлов.
Некоторые
устройства
поддерживают
только
адресацию
логических
блоков.
- MT_ST_SYSV
(по
умолчанию
false)
- Когда этот
параметр
установлен,
ленточные
устройства
используют
семантику
System V. В других
случаях
используется
семантика
BSD. Основное
различие
между ними
(когда
устройство,
используемое
для чтения,
закрыто)
состоит в
следующем:
по
семантике
SYSV лента
перематывается
вперед за
следующий
маркер
файла, если
этого не
произошло
во время
использования
устройства.
В
семантике
BSD позиция
на ленте не
меняется.
- MT_NO_WAIT
(по
умолчанию
false)
- Включает
режим без
задержки
(т.е., не
ждать
завершения
работы
команды)
для
некоторых
команд
(например,
rewind).
Пример:
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);
Размер
блока по
умолчанию
для
устройства
может быть
установлен
с помощью
MT_ST_DEF_BLKSIZE, а
плотность
данных по
умолчанию
может быть
установлена
с помощью
MT_ST_DEFDENSITY.
Значения
параметров
логически
складываются
с кодом
операции.
With Linux 2.1.x and later, the timeout values can be set with the
subcommand MT_ST_SET_TIMEOUT ORed with the timeout in seconds. The
long timeout (used for rewinds and other commands that may take a long time)
can be set with MT_ST_SET_LONG_TIMEOUT. The kernel defaults are very
long to make sure that a successful command is not timed out with any drive.
Because of this, the driver may seem stuck even if it is only waiting for
the timeout. These commands can be used to set more practical values for a
specific drive. The timeouts set for one device apply for all devices linked
to the same drive.
Starting from Linux 2.4.19 and Linux 2.5.43, the driver supports a
status bit which indicates whether the drive requests cleaning. The method
used by the drive to return cleaning information is set using the
MT_ST_SEL_CLN subcommand. If the value is zero, the cleaning bit is
always zero. If the value is one, the TapeAlert data defined in the SCSI-3
standard is used (not yet implemented). Values 2–17 are reserved. If
the lowest eight bits are >= 18, bits from the extended sense data are
used. The bits 9–16 specify a mask to select the bits to look at and
the bits 17–23 specify the bit pattern to look for. If the bit
pattern is zero, one or more bits under the mask indicate the cleaning
request. If the pattern is nonzero, the pattern must match the masked sense
data byte.
Для этого
запроса
требуется
аргумент с
типом (struct mtget *).
/* структура для MTIOCGET - команда получения состояния ленты */
struct mtget {
long mt_type;
long mt_resid;
/* следующие регистры зависят от устройства */
long mt_dsreg;
long mt_gstat;
long mt_erreg;
/* следующие два поля используются не всегда */
daddr_t mt_fileno;
daddr_t mt_blkno;
};
- mt_type
- В
заголовочном
файле
определено
множество
значений
mt_type, но
текущий
драйвер
сообщает
только об
общих
типах MT_ISSCSI1
(лента
общего
типа SCSI-1) и MT_ISSCSI2
(лента
общего
типа SCSI-2).
- mt_resid
- Содержит
номер
текущего
раздела
ленты.
- mt_dsreg
- Содержит
текущие
настройки
размера
блока
устройства
(в младших
24-х битах) и
плотность
(в старших
8-х битах).
Эти поля
определяются
с помощью
MT_ST_BLKSIZE_SHIFT, MT_ST_BLKSIZE_MASK,
MT_ST_DENSITY_SHIFT и MT_ST_DENSITY_MASK.
- mt_gstat
- Содержит
общую
(независимую
от
устройства)
информацию
о
состоянии.
В
заголовочном
файле
определены
макросы
для
тестирования
бит:
- GMT_EOF(x)
- Текущая
позиция
сразу
после
маркера
файла
(всегда false
после
выполнения
операции
MTSEEK).
- GMT_BOT(x)
- Текущая
позиция на
начале
первого
файла
(всегда false
после
операции
MTSEEK).
- GMT_EOT(x)
- Текущая
позиция у
физического
конца
ленты.
- GMT_SM(x)
- Текущая
позиция на
сборочном
маркере
(всегда false
после
выполнения
операции
MTSEEK).
- GMT_EOD(x)
- Текущая
позиция в
конце
записанных
данных.
- GMT_WR_PROT(x)
- Устройство
защищено
от записи.
Для
некоторых
устройств
это может
означать,
что они не
поддерживают
запись на
установленный
носитель
(неподдерживаемый
тип).
- GMT_ONLINE(x)
- Последний
вызов open(2)
привёл к
тому, что
лента в
нужном
месте и
устройство
готово к
работе.
- GMT_D_6250(x)
- GMT_D_1600(x)
- GMT_D_800(x)
- This “generic” status information reports the current
density setting for 9-track ½" tape drives only.
- GMT_DR_OPEN(x)
- Нет ленты в
устройстве.
- GMT_IM_REP_EN(x)
- Сообщает о
режиме.
Этот бит
устанавливается,
если нет
гарантии,
что данные
были
правильно
физически
записаны
на ленту
после
возврата
из функции
записи.
Этот бит
приобретает
нулевое
значение,
когда
драйвер не
записывает
данные в
буфер и
устройство
не
настроено
на
буферизацию
данных.
- GMT_CLN(x)
- The drive has requested cleaning. Implemented since Linux 2.4.19 and Linux
2.5.43.
- mt_erreg
- Содержит
счётчик
(младшие 16
бит)
исправленных
ошибок,
определяемых
с помощью
MT_ST_SOFTERR_SHIFT и MT_ST_SOFTERR_MASK.
Из-за
противоречивости
способов
сообщения
об
исправленных
ошибках
устройствами,
часто этот
счётчик не
ведётся
(большинство
устройств
по
умолчанию
не
сообщают
об
исправленных
ошибках,
это можно
изменить с
помощью
SCSI-команды MODE
SELECT).
- mt_fileno
- Содержит
текущий
номер
файла
(отсчёт
ведётся с 0).
Если номер
файла
неизвестен,
то
значение
равно -1
(например,
после MTBSS
или MTSEEK).
- mt_blkno
- Содержит
номер
блока
(отсчёт
ведётся с 0)
в пределах
текущего
файла. Если
номер
блока
неизвестен,
то
значение
равно -1
(например,
после MTBSF, MTBSS
или MTSEEK).
Для этого
запроса
требуется
аргумент с
типом (struct mtpos *).
Он
возвращает
текущий
номер
блока
ленты,
который
необязательно
совпадает
со
значением
mt_blkno,
возвращаемым
MTIOCGET.
Устройство
должен
быть SCSI-2,
чтобы
поддерживать
команду READ
POSITION (адрес,
определяемый
устройством),
или
Tandberg-совместимым
устройством
SCSI-1 (Tandberg, Archive Viper, Wangtek, …).
/* структура для MTIOCPOS - команда получения позиции на ленте */
struct mtpos {
long mt_blkno; /* текущий номер блока */
};