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