focal (4) st.4.gz

Provided by: manpages-pl_0.7-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.

       Sterownik  używa  wewnętrznego bufora o rozmiarze dostatecznie dużym, by pomieścił co najmniej jeden blok
       taśmy. W jądrach wcześniejszych niż 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 w
       jądrach starszych niż 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 jądra 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ócona
       zostanie żądana ilość danych, począwszy od początku bloku, a reszta bloku zostanie odrzucona.

       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. Jądra
       wcześniejsze niż 2.1.121 pozwalały na zapis dowolnej liczby bajtów przy włączonym buforowaniu.  Natomiast
       w  pozostałych  przypadkach  (jądra wcześniejsze niż 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 jądrze 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 jądrach 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 niezerowe, określa rozmiar
                     pierwszej strefy, a druga strefa obejmuje resztę taśmy. Gdy mt_count jest zerem, taśma jest
                     formatowana  jako  jedna  strefa.  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  w  jądrach >= 2.1).  Pojedyncze działanie może zmienić ustawienia tylko
               dla jednej pozycji z powyż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 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.

               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.

               W jądrach 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 jąder 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 w jądrach od wersji 2.4.19 and 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        Liczba bajtów w read(2) jest mniejsza od  następnego  bloku  fizycznego  na  taśmie  (przed
                     jądrami 2.2.18 i 2.4.0-test6 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

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

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

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

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

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

O STRONIE

       Angielska  wersja  tej strony pochodzi z wydania 4.05 projektu Linux man-pages. Opis projektu, informacje
       dotyczące  zgłaszania   błędów,   oraz   najnowszą   wersję   oryginału   można   znaleźć   pod   adresem
       https://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

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

       Polskie  tłumaczenie  jest  częścią  projektu  manpages-pl;  uwagi,  pomoc,  zgłaszanie błędów na stronie
       http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją  4.05 oryginału.