Provided by: manpages-pl_4.23.1-1_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.

       Sterownik używa wewnętrznego bufora o rozmiarze dostatecznie dużym, by pomieścił co najmniej  jeden  blok
       taśmy.  Przed  Linuksem  2.1.121 bufor ten jest przydzielany jako jeden ciągły blok pamięci. Ogranicza to
       rozmiar bloku na taśmie do największego ciągłego bloku pamięci,  który  może  zostać  przydzielony  przez
       procedurę  przydzielania  pamięci  w  jądrze.   Obecnie  ograniczenie  to  wynosi  128 kB dla architektur
       32-bitowych i 256 kB dla architektur 64-bitowych. W nowszych jądrach sterownik przydziela, jeśli  trzeba,
       pamięć  dla  bufora  w  kilku  częściach. Domyślna maksymalna liczba fragmentów wynosi 16. Oznacza to, że
       maksymalny rozmiar bloku jest bardzo duży (2 MB, jeśli uda się przydzielić 16 bloków po 128 kB).

       Rozmiar wewnętrznego bufora sterownika jest określony przez stałą czasu kompilacji, ale można go  zmienić
       za pomocą opcji startowej jądra. Dodatkowo, sterownik próbuje przydzielać większy bufor tymczasowy, jeśli
       zajdzie  taka  potrzeba  w  trakcie  pracy.  Jednakże, przydzielanie podczas pracy dużych ciągłych bloków
       pamięci może się nie udać i zaleca się nie polegać za bardzo na przydzielaniu buforów dynamicznych  przed
       Linuksem 2.1.121 (dotyczy to także ładowania na żądanie sterownika za pomocą kerneld lub 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.

       Od  Linuksa  2.6.2,  sterownik  eksportuje  do katalogu sysfs /sys/class/scsi_tape dołączone urządzenia i
       część parametrów przypisanych do urządzenia.

   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.

       W trybie o zmiennej długości bloku ilość odczytywanych bajtów  nie  musi  dokładnie  odpowiadać  długości
       bloku  na  taśmie. Jeśli liczba bajtów jest większa niż następny blok na taśmie, sterownik zwróci dane, a
       funkcja zwróci rozmiar bieżącego bloku. Jeśli długość bloku jest  większa  niż  liczba  bajtów,  zwrócony
       zostanie błąd.

       W  trybie  o  stałej  długości  bloku  ilość  odczytywanych  bajtów  może  być dowolna, gdy włączone jest
       buforowanie. Musi natomiast być wielokrotnością długości bloku, gdy  buforowanie  jest  wyłączone.  Przed
       Linuksem  2.1.121 jądra pozwalały na zapis dowolnej liczby bajtów przy włączonym buforowaniu. Natomiast w
       pozostałych przypadkach (przed Linuksem 2.1.121 z  wyłączonym  buforowaniem  oraz  nowsze  jądra)  liczba
       zapisywanych bajtów musi być wielokrotnością długości bloku na taśmie.

       W  Linuksie  2.6,  sterownik  stara  się  używać  bezpośrednich transferów pomiędzy buforem użytkownika a
       urządzeniem. Jeśli nie jest to możliwe, używany jest wewnętrzny bufor sterownika.  Powodem,  dla  którego
       transfer  bezpośredni nie jest użyty, może być niepoprawne wyrównanie bufora użytkownika (domyślne wynosi
       512 bajtów, ale może być zmienione w sterowniku  HBA),  niedostępność  jednej  lub  więcej  stron  bufora
       użytkownika dla adaptera SCSI itp.

       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
              Usunięcie  zapisu  z  taśmy.  W  Linuksie 2.6 szybkie usuwanie (oznaczenie taśmy jako pustej) jest
              wykonywane, gdy argumentem jest zero. W przeciwnym wypadku  przeprowadzane  jest  długie  usuwanie
              (usuwanie wszystkiego).

       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
              Sformatowanie  taśmy  na jedną lub dwie strefy. Gdy mt_count jest dodatnie, określa rozmiar strefy
              1, a strefa 0 obejmuje resztę taśmy. Gdy mt_count jest zerem, taśma jest  formatowana  jako  jedna
              strefa. Od Linuksa 4.6, ujemne mt_count określa rozmiar strefy 0, a reszta taśmy zawiera strefę 1.
              Fizyczna  kolejność  stref  zależy  od  napędu.  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).

       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
              Ustawienie  różnych  opcji  napędu i sterownika, zgodnie z wartościami pól bitowych przekazanych w
              mt_count. Dotyczy to sposobu buforowania przez sterownik, zestawu logicznych parametrów sterownika
              oraz progu zapisu bufora, domyślnej długości bloku i gęstości oraz czasów przeterminowania  (tylko
              od Linuksa 2.1). Pojedyncze działanie może zmienić ustawienia tylko dla jednej pozycji z poniższej
              listy (parametry logiczne są traktowane jako jedna całość).

              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)
                     Jeśli ta opcja jest  włączona,  to  kieszeń  napędu  będzie  blokowana  po  otwarciu  pliku
                     urządzenia, a odblokowywana po jego zamknięciu.

              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)
                     Gdy  wykorzystywany jest odczyt wyprzedzający, taśma musi być czasami cofnięta do właściwej
                     pozycji. Dzieje się to, gdy urządzenie jest zamykane  i  wykorzystywane  jest  w  tym  celu
                     polecenie  SCSI  cofania  o  zadaną  ilość  rekordów.  Niektóre starsze napędy nie potrafią
                     wykonać tego polecenia w sposób pewny i opcja ta służy  to  zabronienia  napędowi  używania
                     tych  poleceń.  Końcowym  efektem  jest  nieprawidłowe  pozycjonowanie  taśmy po zamknięciu
                     urządzenia przy włączonym odczycie wyprzedzającym w  trybie  o  stałej  długości  bloku.  W
                     Linuksie 2.6 domyślnie wartość jest włączona w przypadku napędów obsługujących 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 Systemu  V
                     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.

              W  Linuksie  2.1.x  i  późniejszych  wartości  czasu przeterminowania (timeout) można ustawić przy
              użyciu podpolecenia MT_ST_SET_TIMEOUT dodanego za pomocą bitowego OR do czasu  przeterminowania  w
              sekundach. Długie czasy przeterminowania (wykorzystywane przy poleceniach przewijania i niektórych
              innych trwających długo) można ustawić przy użyciu MT_ST_SET_LONG_TIMEOUT. Domyślne wartości jądra
              są  bardzo  długie,  aby  zapewnić, że pomyślnie wykonywane polecenie nie zostanie przeterminowane
              przez żaden napęd. Z tego powodu niniejszy sterownik może sprawiać  wrażenie  zawieszonego,  nawet
              gdy jedynie czeka on na przeterminowanie operacji. Polecenia te mogą służyć do ustawienia bardziej
              praktycznych  wartości  dla  konkretnego  napędu.  Czasy  przeterminowania  ustawione  dla jednego
              urządzenia dotyczą wszystkich urządzeń skojarzonych z tym samym napędem.

              Od Linuksa 2.4.19 i 2.5.43,  sterownik  obsługuje  bit  statusu,  wskazujący  czy  sterownik  żąda
              czyszczenia.  Metoda  używana  przez napęd do zwrócenia informacji o czyszczeniu jest ustawiona za
              pomocą podpolecenia MT_ST_SEL_CLN. Jeśli wartość wynosi 0, to bit czyszczenia wynosi zawsze  zero.
              Przy  wartości  jeden,  używane  są  dane TapeAlert zdefiniowane w standardzie SCSI-3 (jeszcze nie
              zaimplementowane). Wartości 2–17 są zastrzeżone. Jeśli  najniższe  osiem  bitów  wynosi  >=18,  to
              używane  są  bity z rozszerzonych danych próbkowania. Bity 9–16 określają maskę do wybrania bitów,
              które mają być wyszukiwane, a bity 17–23 określają wzorzec bitowy do wyszukiwania.  Jeśli  wzorzec
              bitowy  wynosi  0,  to jeden lub więcej bitów pod maską oznacza żądanie czyszczenia. Jeśli wzorzec
              jest niezerowy, musi od pasować do maskowanego bajtu danych próbkowania.

   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)
                     Napęd zażądał czyszczenia. Zaimplementowane od Linuksa 2.4.19 i 2.5.43.

       mt_erreg
              Jedyne pole zdefiniowane w mt_erreg to licznik  naprawionych  błędów,  który  znajduje  się  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 Liczba bajtów w read(2) jest mniejsza od następnego bloku fizycznego  na  taśmie  (przed  Linuksem
              2.2.18 i 2.4.0 dodatkowe bajty były po cichu ignorowane).

       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.8                              2 maja 2024 r.                                            st(4)