Provided by: manpages-ru_4.21.0-2_all bug

ИМЯ

       st - ленточный накопитель 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);

ОПИСАНИЕ

       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:

   MTIOCTOP  perform a tape operation
       Для  этого  запроса  требуется  аргумент  с  типом  (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.

   MTIOCGET  get status
       Для этого запроса требуется аргумент с типом (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).

   MTIOCPOS  get tape position
       Для этого запроса требуется аргумент с типом (struct mtpos *). Он возвращает текущий номер
       блока ленты, который необязательно совпадает со значением mt_blkno, возвращаемым MTIOCGET.
       Устройство  должен  быть  SCSI-2,  чтобы  поддерживать  команду  READ   POSITION   (адрес,
       определяемый  устройством), или Tandberg-совместимым устройством SCSI-1 (Tandberg, Archive
       Viper, Wangtek, …).

           /* структура для MTIOCPOS - команда получения позиции на ленте */
           struct mtpos {
               long mt_blkno;    /* текущий номер блока */
           };

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       EACCES Попытка записать или стереть ленту, защищённую от записи. (Эта ошибка не  возникает
              при open(2).)

       EBUSY  Устройство уже используется, или драйвер не способен выделить буфер.

       EFAULT Параметры команды указывают на память, не принадлежащую вызывающему процессу.

       EINVAL Вызову  ioctl(2)  был  передан  неверный аргумент, или запрошен неправильный размер
              блока.

       EIO    Запрошенные операции не могут быть завершены.

       ENOMEM The byte count in read(2)  is smaller than the next physical  block  on  the  tape.
              (Before Linux 2.2.18 and Linux 2.4.0 the extra bytes have been silently ignored.)

       ENOSPC Операция записи не может завершиться, потому что лента закончилась.

       ENOSYS Неизвестный вызов ioctl(2).

       ENXIO  Во время открытия обнаружено, что ленточного устройства не существует.

       EOVERFLOW
              Попытка  чтения  или  записи блоков переменной длины, больших, чем внутренний буфер
              драйвера.

       EROFS  Попытка открытия с параметром O_WRONLY или O_RDWR, но лента в  устройстве  защищена
              от записи.

ФАЙЛЫ

       /dev/st*
              ленточные устройства SCSI с автоперемоткой

       /dev/nst*
              ленточные устройства SCSI без автоперемотки

ЗАМЕЧАНИЯ

       •  При обмене данными между системами в них должен быть согласован физический размер блока
          ленты. Параметры устройства после загрузки часто не являются теми,  которые  использует
          большинство  операционных  систем,  работающих с этими устройствами. Большинство систем
          используют  устройства  в  режиме  с  переменным  размером  блока,  если   этот   режим
          поддерживается устройством. Это применимо к большинству современных  устройств, включая
          DAT, DLT и  т.д.  Возможно,  целесообразно  использовать  эти  устройства  в  режиме  с
          переменным  размером  блока также и в Linux (т.е., используйте MTSETBLK или MTSETDEFBLK
          при запуске системы для установки необходимого режима),  по  крайней  мере  при  обмене
          данными  с  другими системами. Недостатком этого является довольно большой размер блока
          ленты, который нужно использовать для работы на приемлемой скорости при передаче данных
          по шине SCSI.

       •  Многие  программы  (например,  tar(1))  позволяют  пользователю  задать  размер блока в
          командной строке. Заметим, что это помогает  определить  размер  физического  блока  на
          ленте, но только в режиме с переменным размером блока.

       •  Для использования ленточных устройств SCSI, базовый драйвер SCSI, драйвер SCSI-адаптера
          и драйвер ленты SCSI должны быть включены в  ядро  или  загружаться  как  модули.  Если
          драйвер  SCSI-ленты  отсутствует,  то  устройство  считается распознанным, но поддержка
          работы с лентой, описанная здесь, будет недоступна.

       •  Драйвер записывает сообщения об ошибках в консоль/журнал. Коды  SENSE,  содержащиеся  в
          некоторых сообщениях, автоматически транслируются в текст, если в ядре включён параметр
          подробного вывода сообщений SCSI.

       •  Использование  внутреннего  буфера  драйвера  позволяет  достичь   хорошей   пропускной
          способности в режиме с постоянным размером блока даже с маленьким числом байт в read(2)
          и write(2). Прямой обмен для этого невозможен и может  привести  к  неожиданностям  при
          переходе  на  ядро 2.6. В качестве решения предлагается указать ПО использовать больший
          обмен передачи (часто, указав использовать больший размер блоков). Если это невозможно,
          то прямой обмен может быть выключен.

СМ. ТАКЖЕ

       mt(1)

       Файл   drivers/scsi/README.st  или  Documentation/scsi/st.txt  (ядро  >=  2.6)  из  дерева
       исходного  кода  ядра  Linux  содержит  самую  последнюю  информацию  о  драйвере  и   его
       возможностях настройки

ПЕРЕВОД

       Русский    перевод    этой    страницы    руководства   был   сделан   Alexander   Golubev
       <fatzer2@gmail.com>,  Azamat  Hackimov  <azamat.hackimov@gmail.com>,   Hotellook,   Nikita
       <zxcvbnm3230@mail.ru>,       Spiros       Georgaras       <sng@hellug.gr>,       Vladislav
       <ivladislavefimov@gmail.com>,   Yuri   Kozlov   <yuray@komyakino.ru>   и    Иван    Павлов
       <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.