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

NAZWA

       st - urządzenie taśmy SCSI

SKŁADNIA

       #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);

OPIS

       Sterownik  st udostępnia interfejs do różnego rodzaju napędów taśm magnetycznych SCSI.  Obecnie sterownik
       przejmuje  kontrolę   nad   wszystkimi   wykrytymi   urządzeniami   typu   "sequential-access"   (dostępu
       sekwencyjnego). Sterownikowi st przydzielony został numer główny 9.

       Każde  urządzenie  ma  osiem  numerów  podrzędnych.  Na  pięciu  najniższych  bitach  numeru  podrzędnego
       reprezentowane są przydzielone kolejno numery  urządzeń  (kolejność  detekcji).  Numery  podrzędne  można
       pogrupować  w  dwóch  zbiorach  po cztery numery: główne numery podrzędne (urządzenia z przewijaniem), n,
       oraz numery urządzeń "bez przewijania", (n+ 128).  Urządzenie otwarte przy wykorzystaniu głównego  numeru
       podrzędnego  otrzyma  polecenie  REWIND  podczas  jego zamykania. Urządzenia otwierane przy wykorzystaniu
       numeru urządzenia "bez  przewijania"  nie  otrzymają  takiego  rozkazu.  (Trzeba  zauważyć,  że  używanie
       urządzenia  "bez  przewijania"  do  pozycjonowania  taśmy,  na  przykład  za  pomocą  mt, nie prowadzi do
       pożądanego efektu: taśma jest przewijana po wydaniu polecenia mt i następne polecenie zaczyna od początku
       taśmy.)

       W każdej grupie dostępne są cztery numery podrzędne,  definiujące  urządzenia  o  różnej  charakterystyce
       (rozmiar  bloku,  kompresja,  gęstość  itp.).   Podczas  startu  systemu  dostępne  jest  tylko  pierwsze
       urządzenie. Aktywacja pozostałych trzech następuje po zdefiniowaniu ich domyślnych charakterystyk  (patrz
       niżej).  (Zmieniając  wartości  stałych  podczas  kompilacji,  możliwa  jest  zmiana  równowagi  pomiędzy
       maksymalną liczbą napędów taśm a liczbą numerów podrzędnych dla każdego napędu. Domyślna alokacja  powala
       na  sterowanie  32 napędami taśm. Na przykład, można sterować nie więcej niż 64 napędami taśm, posiadając
       po dwa numery podrzędne dla różnych opcji.)

       Pliki urządzeń są zwykle tworzone za pomocą poleceń:

           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

       Brak jest odpowiadających urządzeń blokowych.

       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).

       Ten sterownik nie zawiera żadnej specyficznej obsługi dla  taśm  wybranego  producenta,  czy  modelu.  Po
       starcie  systemu opcje urządzenia taśmowego są określane na podstawie firmware napędu. Na przykład, jeśli
       firmware napędu wybiera tryb o stałej długości bloku, urządzenie taśmowe również  używa  trybu  o  stałej
       długości  bloku. Opcje te można zmienić za pomocą jawnych wywołań ioctl(2) i zmiany te pozostają aktywne,
       gdy urządzenie zostanie zamknięte  i  ponownie  otwarte.  Ustawione  opcje  dotyczą  zarówno  urządzeń  z
       przewijaniem, jak i bez przewijania.

       Można  podawać  różne  opcje dla różnych urządzeń w ramach podgrupy czterech urządzeń. Opcje są ustawiane
       dla urządzenia, gdy jest otwierane. Na przykład, administrator systemu może zdefiniować jedno  urządzenie
       zapisujące  w trybie o stałej długości bloku i jedno zapisujące w trybie o zmiennej długości bloku (jeśli
       napęd obsługuje obydwa tryby).

       Sterownik obsługuje strefy taśm, jeśli są one obsługiwane przez  napęd.  (Trzeba  tu  zwrócić  uwagę,  że
       strefy  taśm  nie  mają  nic wspólnego z partycjami dysków [po angielsku w obu przypadkach "partitions" -
       przyp. tłum.]. Taśma podzielona na strefy  może  być  widziana  jako  kilka  logicznych  taśm  na  jednym
       nośniku). Obsługę stref trzeba włączyć za pomocą ioctl(2). Przy zmianach stref zachowywane jest położenie
       na taśmie w obrębie każdej ze stref. Strefę, której mają dotyczyć następne operacje wybiera się za pomocą
       ioctl(2). Przełączanie stref odbywa się łącznie z następną operacją na taśmie, aby uniknąć niepotrzebnego
       przewijania  taśmy.   Maksymalna  liczba  stref  na  taśmie  określona  jest przez stałą czasu kompilacji
       (pierwotnie: cztery). Sterownik zawiera  ioctl(2)  pozwalający  sformatować  taśmę  z  jedną  lub  dwiema
       strefami.

       Urządzenie   /dev/tape  jest  zwykle  dowiązaniem  zwykłym  lub  symbolicznym  do  domyślnego  urządzenia
       reprezentującego taśmę magnetyczną w danym systemie.

       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.

   Transfer danych
       Sterownik może pracować zarówno w trybie o stałej, jak i o zmiennej długości bloku (jeśli napęd obsługuje
       oba tryby). W trybie o stałej długości bloku napęd zapisuje bloki określonej długości i rozmiar bloku nie
       zależy  od  liczby  bajtów,  która została podana systemowej funkcji zapisu. W trybie o zmiennej długości
       bloku zapisywany jest jeden blok przy każdym wywołaniu funkcji  zapisu,  a  liczba  bajtów  podanych  tej
       funkcji  określa  rozmiar  odpowiedniego bloku na taśmie. Należy tu zwrócić uwagę, ze bloki na taśmie nie
       zawierają informacji o  trybie  zapisu:  jedyną  ważną  rzeczą  podczas  odczytu  jest  używanie  poleceń
       akceptujących rozmiary bloków znajdujących się na taśmie.

       In  variable-block  mode  the read byte count does not have to match the tape block size exactly.  If the
       byte count is larger than the next block on tape, the driver returns the data and  the  function  returns
       the actual block size.  If the block size is larger than the byte count, an error is returned.

       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.

       Znacznik pliku jest zapisywany na taśmie automatycznie, jeśli ostatnią operacją na tej taśmie  przed  jej
       zamknięciem był zapis.

       Gdy  podczas  odczytu  napotkany  zostanie  znacznik  pliku,  dzieje  się  co  następuje.  Jeśli w chwili
       natrafienia na znacznik pliku w buforze były dane, zostaną zwrócone dane z bufora. Następny odczyt zwróci
       zero bajtów. Kolejne odczyty zwrócą dane z następnego pliku. Koniec zapisanych danych jest  sygnalizowany
       zwróceniem zerowej liczby bajtów przez dwa kolejne wywołania funkcji odczytu. Trzeci odczyt zwróci błąd.

   Kontrolki systemowe (ioctl)
       Sterownik  obsługuje  trzy  wywołania funkcji ioctl(2). Wywołania nierozpoznawane przez sterownik i st są
       przekazywane do sterownika SCSI.  Poniższe definicje pochodzą z pliku /usr/include/linux/mtio.h:

   MTIOCTOP  wykonanie operacji na taśmie
       To wywołanie wymaga argumentu typu (struct mtop *).  Nie wszystkie napędy obsługują wszystkie  polecenia.
       Jeśli napęd odrzuca polecenie, sterownik przekazuje wartość EIO.

           /* Struktura dla polecenia MTIOCTOP dla taśmy magnetycznej: */
           struct mtop {
               short   mt_op;       /* operacje zdefiniowane poniżej */
               int     mt_count;    /* liczba powtórzeń operacji */
           };

       Operacje na taśmie magnetycznej:

       MTBSF  Przesunięcie do tyłu o mt_count znaczników pliku.

       MTBSFM Przesunięcie  do  tyłu  o mt_count znaczników pliku. Ustawienie taśmy po stronie EOT (końca taśmy)
              ostatniego znacznika pliku.

       MTBSR  Przesunięcie do tyłu o mt_count rekordów (bloków taśmy).

       MTBSS  Przesunięcie do tyłu o mt_count znaczników (setmarks).

       MTCOMPRESSION
              Włączenie kompresji danych na taśmie dla danego napędu, gdy mt_count  jest  niezerowe,  wyłączenie
              kompresji,  gdy  mt_count  jest  zerem.  Polecenie  to korzysta z MODE page 15 obsługiwanego przez
              większość urządzeń DAT.

       MTEOM  Przesunięcie do końca zapisanej części nośnika (w celu dogrania plików).

       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  Przesunięcie do przodu o mt_count znaczników pliku.

       MTFSFM Przesunięcie  do  przodu  o  mt_count  znaczników pliku. Ustawienie taśmy po stronie BOT (początku
              taśmy) ostatniego znacznika pliku.

       MTFSR  Przesunięcie do przodu o mt_count rekordów (bloków taśmy).

       MTFSS  Przesunięcie do przodu o mt_count znaczników (setmarks).

       MTLOAD Wykonanie polecenia SCSI "load" (załadowanie  taśmy).  Szczególny  przypadek  dotyczący  wyłącznie
              niektórych    automatycznie    ładujących   napędów   HP:   gdy   mt_count   jest   równe   stałej
              MT_ST_HPLOADER_OFFSET powiększonej o pewną liczbę, to ta liczba  jest  przesyłana  do  napędu  dla
              celów sterowania automatycznym załadowaniem.

       MTLOCK Zablokowanie kieszeni napędu taśm.

       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  Brak  operacji  —  jako  efekt  uboczny  opróżnia bufor sterownika.  Powinno się tego używać przed
              odczytaniem stanu za pomocą MTIOCGET.

       MTOFFL Przewinięcie taśmy i odłączenie napędu.

       MTRESET
              Inicjalizacja napędu.

       MTRETEN
              Wyrównanie napięcia taśmy.

       MTREW  Przewinięcie.

       MTSEEK Wyszukanie na taśmie bloku o numerze podanym w  mt_count.   Ta  operacja  wymaga  albo  sterownika
              SCSI-2, który obsługuje polecenie LOCATE (adres specyficzny dla urządzenia) albo urządzenia SCSI-1
              zgodnego  z  Tandberg  (Tandberg,  Archive  Viper, Wangtek, ... ).  Numer bloku powinien być równy
              zwróconemu poprzednio przez MTIOCPOS, gdy używany jest adres specyficzny dla urządzenia.

       MTSETBLK
              Ustawienie długości bloku  sterownika  równej  wartości  podanej  w  mt_count.   Długość  równa  0
              wprowadza napęd w tryb bloków o zmiennej długości.

       MTSETDENSITY
              Ustawienie  gęstości  zapisu  taśmy  zakodowanej  w  mt_count.   Kody  określające  gęstość zapisu
              obsługiwane przez dany napęd można znaleźć w jego dokumentacji.

       MTSETPART
              Przełączenie aktywnej strefy na mt_count. Strefy są numerowane od  zera.  Polecenie  to  nie  jest
              dozwolone  dla  napędów,  dla  których  nie  włączono  obsługi  stref (zobacz MT_ST_CAN_PARTITIONS
              poniżej).

       MTUNLOAD
              Wykonanie polecenia SCSI "unload" (nie wysuwa taśmy).

       MTUNLOCK
              Odblokowanie kieszeni napędu taśm.

       MTWEOF Zapisanie mt_count znaczników pliku.

       MTWSM  Zapisanie mt_count znaczników (setmarks).

       Polecenia  ustawiające  opcje  dla  napędów  taśm  magnetycznych   (mogą   być   wydawane   tylko   przez
       administratora):

       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.)

              Wartość, której 4 najwyższe bity są równe 0 zostanie wykorzystana do ustawienia trybu  buforowania
              napędu. Do wyboru są następujące tryby:

              0      Napęd  nie  będzie  sygnalizować  stanu GOOD po poleceniach zapisu, dopóki dane nie zostaną
                     zapisane fizycznie na nośniku.

              1      Napęd może sygnalizować stan GOOD po poleceniach zapisu, gdy tylko wszystkie  dane  zostaną
                     umieszczone w wewnętrznym buforze napędu.

              2      Napęd  może  sygnalizować  stan  GOOD  po  poleceniach zapisu, gdy tylko (a) wszystkie dane
                     zostaną przesłane do wewnętrznego bufora napędu i (b) wszystkie buforowane dane  (z  innych
                     poleceń) zostaną pomyślnie zapisane na nośniku.

              Aby  kontrolować próg zapisu, wartość mt_count musi zawierać stałą MT_ST_WRITE_THRESHOLD dodaną za
              pomocą bitowego OR do liczby  bloków  w  28  najniższych  bitach.  Liczba  bloków  odnosi  się  do
              1024-bajtowych  bloków,  a  nie  bloków  o  fizycznym rozmiarze bloku dla danego urządzenia.  Próg
              zapisu nie może przekroczyć rozmiaru wewnętrznego bufora napędu (patrz OPIS powyżej).

              Aby  ustawić  lub  usunąć  opcje  logiczne,  wartość  mt_count  musi  zawierać  jedną  ze  stałych
              MT_ST_BOOLEANS,  MT_ST_SETBOOLEANS,  MT_ST_CLEARBOOLEANS  lub  MT_ST_DEFBOOLEANS  dodaną za pomocą
              bitowego OR do dowolnej  kombinacji  poniższych  opcji.  Użycie  MT_ST_BOOLEANS  powoduje  nadanie
              wszystkim  opcjom  wartości  podanych  na  odpowiednich  polach  bitowych.  Przy MT_ST_SETBOOLEANS
              ustawione zostaną tylko wybrane  opcje,  natomiast  przy  MT_ST_DEFBOOLEANS  tylko  wybrane  opcje
              zostaną usunięte.

              Za  pomocą  MT_ST_DEFBOOLEANS  ustawiane  są  domyślne  opcje dla urządzenia taśmowego. Nieaktywne
              urządzenia taśmowe (np. urządzenia o numerze podrzędnym 32 lub 160)  są  aktywowane  po  pierwszym
              ustawieniu  dla nich domyślnych opcji. Aktywowane urządzenie dziedziczy od urządzenia aktywowanego
              podczas startu systemu opcje, które nie zostały jawnie podane.

              Dostępne są następujące opcje logiczne:

              MT_ST_BUFFER_WRITES (Domyślnie: włączona)
                     Buforowanie wszystkich operacji zapisu w trybie o stałej długości  bloku.  Jeśli  ta  opcja
                     jest  wyłączona  i napęd używa stałej długości bloku, wtedy wszystkie operacje zapisu muszą
                     dotyczyć wielokrotności długości bloku.  Opcja ta powinna być  wyłączona,  jeśli  chcemy  w
                     sposób pewny zapisywać archiwa składające się z wielu wolumenów.

              MT_ST_ASYNC_WRITES (Domyślnie: włączona)
                     Gdy  opcja  ta  jest włączona, wtedy operacje zapisu przekazują sterowanie natychmiast, bez
                     oczekiwania na przesłanie informacji do napędu, jeśli tylko dane  mieszczą  się  w  buforze
                     sterownika.  Stopień wypełnienia bufora, przy którym zostanie wydane polecenie zapisu SCSI,
                     jest  określony przez próg zapisu. Wszystkie błędy zgłoszone przez napęd będą wstrzymane aż
                     do następnej operacji. Opcja  ta  powinna  być  wyłączona,  jeśli  chcemy  w  sposób  pewny
                     zapisywać archiwa składające się z wielu wolumenów.

              MT_ST_READ_AHEAD (Domyślnie: włączona)
                     Opcja  ta  powoduje  zapewnienie  przez  sterownik  buforowania i odczytu wyprzedzającego w
                     trybie o stałej długości bloku. Jeśli ta opcja jest wyłączona i napęd używa bloków o stałej
                     długości, wtedy wszystkie operacje odczytu muszą dotyczyć wielokrotności długości bloku.

              MT_ST_TWO_FM (Domyślnie: wyłączona)
                     Opcja ta zmienia zachowanie sterownika w momencie zamknięcia pliku.  Zwykle towarzyszy temu
                     zapisanie pojedynczego znacznika końca pliku.  Jeśli opcja jest włączona, sterownik zapisze
                     dwa znaczniki i cofnie się przed drugi.

                     Uwaga: Ta opcja nie powinna być włączona w przypadku napędów QIC, ponieważ  nie  są  one  w
                     stanie  nadpisać  danych  na  znaczniku pliku. Napędy te wykrywają koniec zapisanych danych
                     poprzez sprawdzenie, czy taśma jest pusta, zamiast stwierdzania dwóch kolejnych  znaczników
                     końca  pliku.  Większość  innych  współczesnych  napędów  również wykrywa koniec zapisanych
                     danych, więc posługiwanie się dwoma znacznikami końca pliku  jest  niezbędne  jedynie  przy
                     wymianie taśm z niektórymi innymi systemami.

              MT_ST_DEBUGGING (Domyślnie: wyłączona)
                     Ta  opcja  włącza  wypisywanie przez sterownik komunikatów diagnostycznych (skuteczne tylko
                     gdy sterownik został skompilowany ze zdefiniowaną niezerową wartością DEBUG).

              MT_ST_FAST_EOM (Domyślnie: wyłączona)
                     Włączenie tej opcji powoduje, że polecenia MTEOM  są  przesyłane  bezpośrednio  do  napędu,
                     potencjalnie  przyspieszając  operację,  lecz jednocześnie powodując utratę przez sterownik
                     informacji o aktualnym położeniu taśmy - numerze pliku, zwykle  przekazywanego  jako  wynik
                     zapytania MTIOCGET.  Jeśli opcja MT_ST_FAST_EOM jest wyłączona, sterownik będzie odpowiadał
                     na polecenie MTEOM przewijaniem taśmy plik po pliku.

              MT_ST_AUTO_LOCK (Domyślnie: wyłączona)
                     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 (Domyślnie: wyłączona)
                     Opcje taśmy (długość bloku, tryb, kompresja itp.) mogą ulec  zmianie  przy  przełączaniu  z
                     jednego  urządzenia  skojarzonego  z  napędem  na  inne  urządzenia  skojarzone z tym samym
                     napędem, w zależności od definicji  tych  urządzeń.   Ta  opcja  określa,  kiedy  sterownik
                     powinien   wymusić   zmiany   wysyłając   polecenia  SCSI  oraz  kiedy  należy  polegać  na
                     właściwościach autodetekcyjnych urządzenia.   Jeśli  opcja  ta  jest  wyłączona,  sterownik
                     będzie  wysyłać  polecenia SCSI natychmiast po zmianie urządzenia. Jeśli jest ona włączona,
                     polecenia SCSI nie zostaną wysłane dopóki nie pojawi się żądanie zapisu.  W  tym  przypadku
                     firmware  napędu  może  dokonywać podczas odczytu autodetekcji struktury taśmy, a polecenia
                     SCSI mają na celu jedynie zapewnienie, aby zapis na taśmie odbywał się zgodnie  z  właściwą
                     specyfikacją.

              MT_ST_CAN_BSR (Domyślnie: wyłączona)
                     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 (Domyślnie: wyłączona)
                     Niektóre  napędy  nie  obsługują  polecenia  SCSI  READ  BLOCK  LIMITS. Jeśli opcja ta jest
                     włączona, sterownik nie używa tego polecenia. Wadą jest brak możliwości  sprawdzenia  przez
                     sterownik przed wysłaniem polecenia, czy zadana długość bloku jest akceptowana przez napęd.

              MT_ST_CAN_PARTITIONS (Domyślnie: wyłączona)
                     Opcja  ta  włącza  obsługę  kilku  stref  na jednej taśmie. Dotyczy ona wszystkich urządzeń
                     skojarzonych z napędem.

              MT_ST_SCSI2LOGICAL (Domyślnie: wyłączona)
                     Ta  opcja  poleca  sterownikowi  używanie  logicznych  adresów  bloków   zdefiniowanych   w
                     standardzie  SCSI-2  podczas  wykonywania  operacji  wyszukiwania  (seek)  oraz "tell" (dla
                     poleceń MTSEEK i MTIOCPOS oraz przy zmianie strefy taśmy).  W przeciwnym razie  używane  są
                     adresy  specyficzne  dla  urządzenia. Włączenie tej opcji jest wysoce zalecane, jeśli napęd
                     obsługuje adresy logiczne, gdyż zliczają one  również  znaczniki  plików.  Niektóre  napędy
                     obsługują wyłącznie logiczne adresy bloków.

              MT_ST_SYSV (Domyślnie: wyłączona)
                     Gdy  ta  opcja jest włączona, urządzenia taśmowe używają semantyki Systemu V.  W przeciwnym
                     razie używana jest semantyka BSD. Najważniejsza różnica pomiędzy tymi semantykami polega na
                     tym, co się dzieje, gdy urządzenie używane do odczytu jest zamykane: w semantyce SYSV taśma
                     jest przewijana do przodu poza najbliższy znacznik pliku, jeśli nie stało się to wcześniej.
                     W semantyce BSD pozycja taśmy nie jest zmieniana.

              MT_NO_WAIT (Domyślnie: wyłączona)
                     Włącza tryb natychmiastowy niektórych poleceń,  np.  rewind  -  nie  czeka  na  zakończenie
                     polecenia.

              Przykład:

                  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);

              Domyślny  rozmiar bloku dla urządzenia można ustawić przy użyciu MT_ST_DEF_BLKSIZE, a domyślny kod
              gęstości można ustawić przy użyciu MT_ST_DEFDENSITY. Wartości tych parametrów powinny  być  dodane
              za pomocą bitowej alternatywy (OR) kodu operacji.

              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  odczytanie stanu
       To polecenie wykorzystuje argument typu (struct mtget *).

           /* struktura dla MTIOCGET - odczytanie stanu taśmy magn. */
           struct mtget {
               long     mt_type;
               long     mt_resid;
               /* Następne rejestry są specyficzne dla urządzenia */

               long     mt_dsreg;
               long     mt_gstat;
               long     mt_erreg;
               /* Kolejne dwa pola nie zawsze są używane */
               daddr_t  mt_fileno;
               daddr_t  mt_blkno;
           };

       mt_type
              Plik  nagłówkowy  definiuje  wiele  możliwych  wartości  mt_type, lecz bieżący sterownik raportuje
              jedynie typy podstawowe MT_ISSCSI1 (Generic SCSI-1 tape) oraz MT_ISSCSI2 (Generic SCSI-2 tape).

       mt_resid
              zawiera numer strefy bieżącej taśmy.

       mt_dsreg
              raportuje bieżące ustawienia długości bloku (w najniższych 24 bitach) oraz gęstości  zapisu  (w  8
              najwyższych   bitach).   Pola   są  zdefiniowane  przez  MT_ST_BLKSIZE_SHIFT,  MT_ST_BLKSIZE_MASK,
              MT_ST_DENSITY_SHIFT i MT_ST_DENSITY_MASK.

       mt_gstat
              raportuje podstawowe (niezależne od urządzenia)  informacje  o  stanie.  Plik  nagłówkowy  zawiera
              definicje makrodefinicji do testowania przekazywanych bitów stanu:

              GMT_EOF(x)
                     Taśma została ustawiona tuż za znacznikiem pliku (zawsze nieprawdziwe po poleceniu MTSEEK).

              GMT_BOT(x)
                     Taśma  została  ustawiona  na  początku  pierwszego pliku (zawsze nieprawdziwe po poleceniu
                     MTSEEK).

              GMT_EOT(x)
                     Wykonanie polecenia spowodowało osiągnięcie fizycznego końca nośnika.

              GMT_SM(x)
                     Taśma jest aktualnie ustawiona na znaczniku (setmark)  (zawsze  nieprawdziwe  po  poleceniu
                     MTSEEK).

              GMT_EOD(x)
                     Taśma jest ustawiona na końcu zapisanych danych.

              GMT_WR_PROT(x)
                     Napęd  jest  chroniony  przed  zapisem.  W  przypadku  niektórych  urządzeń może to również
                     oznaczać, że napęd nie obsługuje zapisu na bieżącym typie nośnika.

              GMT_ONLINE(x)
                     Ostatnie wykonanie  funkcji  open(2)  zastało  napęd  gotowy  do  działania  z  odpowiednio
                     umiejscowionym nośnikiem.

              GMT_D_6250(x)
              GMT_D_1600(x)
              GMT_D_800(x)
                     Ta  "podstawowa" informacja o stanie urządzenia zawiera również ustawienia gęstości zapisu,
                     lecz jedynie dla 9-ścieżkowych ½" urządzeń.

              GMT_DR_OPEN(x)
                     Brak taśmy w napędzie.

              GMT_IM_REP_EN(x)
                     Tryb natychmiastowego raportowania. To  pole  bitowe  jest  ustawiane  na  1,  gdy  nie  ma
                     gwarancji,  że  dane  zostały  fizycznie  zapisane  na taśmie do chwili zakończenia funkcji
                     zapisu. Natomiast jest ustawiane na zero tylko wtedy, gdy sterownik nie buforuje  danych  i
                     napęd został ustawiony na ich niebuforowanie.

              GMT_CLN(x)
                     The drive has requested cleaning.  Implemented since Linux 2.4.19 and Linux 2.5.43.

       mt_erreg
              Jedyne  pole  zdefiniowane  w  mt_erreg  to  licznik  naprawionych błędów, który znajduje sie w 16
              niskich bitach (jak to zdefiniowano przez MT_ST_SOFTERR_SHIFT  i  MT_ST_SOFTERR_MASK).   Z  powodu
              niezgodności  w  sposobie zgłaszania naprawionych błędów przez napędy, licznik ten często nie jest
              obsługiwany (większość napędów domyślnie nie zgłasza naprawionych błędów,  ale  można  to  zmienić
              poleceniem SCSI "MODE SELECT").

       mt_fileno
              podaje  bieżący  numer pliku (licząc od zera). W przypadku gdy  numer pliku nie jest znany (np. po
              MTBSS lub MTSEEK), przekazywana jest wartość -1.

       mt_blkno
              raportuje numer bloku (licząc od zera) wewnątrz bieżącego pliku. Gdy numer bloku  nie  jest  znany
              (np. po poleceniach MTBSF, MTBSS lub MTSEEK), przekazywana jest wartość -1.

   MTIOCPOS  odczytanie położenia taśmy
       To  polecenie używa argumentu typu (struct mtpos *) i podaje bieżący numer bloku taśmy (w sensie, w jakim
       go rozumie napęd), co nie jest równoważne z mt_blkno przekazywanym przez MTIOCGET. Musi to być urządzenie
       SCSI-2, które obsługuje polecenie READ POSITION (adres specyficzny dla urządzenia) lub urządzenie  SCSI-1
       zgodne z Tandberg (Tandberg, Archive Viper, Wangtek, ...).

           /* struktura dla MTIOCPOS - odczytanie położenia taśmy magn. */
           struct mtpos {
               long mt_blkno;    /* numer bieżącego bloku */
           };

WARTOŚĆ ZWRACANA

       EACCES Nastąpiła próba zapisu lub skasowania taśmy chronionej przed zapisem. (Ten błąd nie jest wykrywany
              podczas wykonywania funkcji open(2)).

       EBUSY  Urządzenie jest aktualnie w użyciu lub sterownikowi nie udało się przydzielić pamięci dla bufora.

       EFAULT Parametry polecenia wskazują na obszar pamięci nie należący do procesu wywołującego funkcję.

       EINVAL W wywołaniu ioctl(2) podano niedozwolony argument lub podano niedozwolony rozmiar bloku.

       EIO    Wydane polecenie nie może zostać zrealizowane.

       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 Operacja zapisu nie może zostać zakończona ponieważ taśma osiągnęła koniec nośnika.

       ENOSYS Nieznana funkcja ioctl(2).

       ENXIO  Podczas otwierania, takie urządzenie nie istnieje.

       EOVERFLOW
              Nastąpiła próba odczytania lub zapisu bloku o zmiennej długości, który jest większy niż wewnętrzny
              bufor sterownika.

       EROFS  Wystąpiła próba otwarcia z opcją O_WRONLY lub O_RDWR, podczas gdy taśma znajduje  się  w  napędzie
              chronionym przed zapisem.

PLIKI

       /dev/st*
              automatycznie przewijające urządzenia taśm SCSI

       /dev/nst*
              nieprzewijające urządzenia taśm SCSI

UWAGI

       •  Podczas  wymiany  danych  pomiędzy  systemami,  oba systemy muszą uzgodnić długość fizycznego bloku na
          taśmie. Parametry napędu po starcie systemu często różnią się od używanych dla danego urządzenia przez
          większość systemów operacyjnych. Większość systemów używa napędów w trybie o zmiennej długości  bloku,
          o  ile  napęd  ten  tryb obsługuje. Dotyczy to większości współczesnych napędów, włączając w to napędy
          DAT, 8 mm napędy wybierania spiralnego, napędy DLT itp. Można doradzić używanie tych napędów w  trybie
          o  zmiennej  długości  bloku  również  w  Linuksie  (tzn. użycie MTSETBLK lub MTSETDEFBLK przy starcie
          systemu w celu ustawienia tego trybu), przynajmniej podczas wymiany danych z obcym systemem. Wadą tego
          jest konieczność użycia dość długiego bloku na taśmie, aby otrzymać akceptowalną  wydajność  transferu
          na magistrali SCSI.

       •  Wiele  programów (np. tar(1)) pozwala użytkownikowi na określenie czynnika określającego rozmiar bloku
          w linii poleceń. Należy zauważyć, że określa to długość fizycznego bloku na taśmie jedynie w trybie  o
          zmiennej długości bloku.

       •  Aby  można było używać napędów taśm SCSI, to podstawowy sterownik SCSI, sterownik kontrolera SCSI oraz
          sterownik taśm SCSI muszą być wkompilowane w jądro lub załadowane jako moduły. Jeśli nie ma sterownika
          taśm SCSI, napęd zostanie rozpoznany, ale opisana na tej stronie obsługa taśm nie będzie dostępna.

       •  Sterownik zapisuje komunikaty o błędach na konsolę lub do logów.  Kody  SENSE  zapisane  w  niektórych
          komunikatach  są  automatycznie  tłumaczone  na  tekst,  jeśli  w  konfiguracji  jądra  włączono opcję
          rozwlekłych komunikatów SCSI.

       •  Wewnętrzne buforowanie jądra pozwala na dobrą przepustowość w trybie  o  określonych  blokach  również
          przy  niewielkiej  liczbie  bajtów odczytywanych (read(2)) i zapisywanych (write(2)). Przy transferach
          bezpośrednich nie jest to możliwe i może stanowić niemiłą niespodziankę przy przejściu na  jądro  2.6.
          Rozwiązaniem  jest  nakazanie  oprogramowaniu  użycie  większych transferów (często - nakazanie użycia
          większych bloków). Jeśli nie jest to możliwe, transfery bezpośrednie mogą być wyłączone.

ZOBACZ TAKŻE

       mt(1)

       Plik drivers/scsi/README.st lub Documentation/scsi/st.txt (jądra w wersji >= 2.6) w drzewie źródeł  jądra
       Linux zawierający najświeższe informacje dotyczące sterownika i jego możliwości konfiguracyjnych.

TŁUMACZENIE

       Autorami    polskiego    tłumaczenia    niniejszej    strony    podręcznika    są:    Piotr   Pogorzelski
       <piotr.pogorzelski@ippt.gov.pl>,  Andrzej  Krzysztofowicz  <ankry@green.mf.pg.gda.pl>  i  Michał   Kułach
       <michal.kulach@gmail.com>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją.  Bliższe informacje o warunkach licencji można uzyskać
       zapoznając  się  z  GNU General Public License w wersji 3  lub  nowszej.   Nie   przyjmuje   się   ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej manpages-pl-
       list@lists.sourceforge.net.

Linux man-pages 6.03                            5 lutego 2023 r.                                           st(4)