Provided by: manpages-pl_20060617-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
       sekwecyjnego)."  Sterownikowi st przydzielony zostal numer główny 9.

       Każde  urządzenie  posiada  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żadanego 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
       sterowac  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 kernelach 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
       kernelach 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()  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  ono
       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. 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. 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 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.

TRANSMISJA 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 byforowaniem oraz  nowsze  jądra)
       liczba  zapisywanych  bajtów musi być wielokrotnością długości bloku na
       taśmie.

       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.

IOCTL

       Sterownik   obsługuje   trzy   wywołania   funkcji   ioctl.   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 MTIOCTOP - dla polecenia op dla taśmy magnetycznej: */
       struct mtop {
           short  mt_op;    /* jedno ze zdefiniowanych poniżej poleceń*/
           int    mt_count; /* ile razy powtórzyć*/
       };

       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       Wyczyszczenie taśmy.
       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łep  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         Prezewinię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 sa
                     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 superużytkownika):
       MTSETDRVBUFFER
               Ustawienie   różnych  opcji  napędu  i  sterownika,  zgodnie  z
               warościami pól bitowych przekazanych w  mt_count.   Dotyczy  to
               sposobu  buforowania  przez sterownik, 13 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  zanim  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 zapisać 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 przwijaniem 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łąją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,  steronik  nie
                      używa  tego  polecenia. Wadą jest niemożność 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  podzczas
                      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  zamykanie:  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 ulega zmianie.
               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ą bitowego OR do kodu operacji.

               Przy    kernelu    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ć   nie    przeterminowanie    pomyślnie
               wykonywanego   polecenia  przez  żaden  napęd.  Z  tego  powodu
               niniejszy sterownik może sprawiać wrażenie zawieszonego,  newet
               gdy jedynie czaka 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.

   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;
           /* Kolejne rejestry są specyficzne dla urządzenia */
           long   mt_dsreg;
           long   mt_gstat;
           long   mt_erreg;
           /* Kolejne dwa pole 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 aktualny sterownik raportuje  jedynie  typy  podstawowe
                  MT_ISSCSI1  (Generic  SCSI-1  tape)  i  MT_ISSCSI2  (Generic
                  SCSI-2 tape).
       mt_resid   zawiera numer strefy bieżącej taśmy.
       mt_dsreg   raportuje  aktualne  ustawienia  długości   bloku   dla   (w
                  najniższych 24 bitach) oraz gęstości zapisu (w 8 najwyższych
                  bitach).  Te pola są zdefiniowane przez MT_ST_BLKSIZE_SHIFT,
                  MT_ST_BLKSIZE_MASK,           MT_ST_DENSITY_SHIFT          i
                  MT_ST_DENSITY_MASK.
       mt_gstat   raprotuje podstawowe (niezależne od urządzenia) informacje o
                  atanie.  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 nośniku tego typu, co
                      bieżący.
                  GMT_ONLINE(x): Ostatnie  wykonanie  funkcji  open()  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 1/2" 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.
       mt_erreg   Jedyne  pole  zdefiniowane  w  mt_erreg  jest   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  raportuje   aktualny   numer  pliku  (licząc  od  zera).   W
                  przypadku gdy nie jest znany numer pliku (np. po  MTBSS  lub
                  MTSEEK), przekazywana jest wartość -1.
       mt_blkno   raportuje  numer  bloku (licząc od zera) wewnątrz aktualnego
                  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 raportuje aktualny
       numer bloku taśmy (w sensie, w jakim go rozumie  napęd),  co  nie  jest
       równoważne   mt_blkno  przekazywanemu  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; /* aktualny numer bloku */
       };

WARTOŚĆ ZWRACANA

       EIO           Wydane polecenie nie może zostać zrealizowane.

       ENOSPC        Operacja zapisu nie może zostać zakończona ponieważ taśma
                     osiągnęła koniec nośnika.

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

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

       ENXIO         Podczas otwierania, takie urządzenie nie istnieje.

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

       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.

       EINVAL        Funkcja   ioctl()  posiadała  niedozwolony  argument  lub
                     podano niedozwolony rozmiar bloku.

       ENOSYS        Nieznana funkcja ioctl().

       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

AUTOR

       Sterownik     został     napisany      przez      Kai'ego      Makisarę
       <Kai.Makisara@metla.fi>   na   podstawie  sterownika  napisanego  przez
       Dwayne'a Forsytha. Kilka innych  osób  również  wniosło  wkład  podczas
       tworzenia sterownika.

ZOBACZ TAKŻE

       mt(1)

       Plik  README.st  w  źródłach  jądra  zawierający najświeższe informacje
       dotyczące sterownika i jego możliwości konfiguracyjnych.

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. Wiekszość 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ć ackceptowalna wydajność transferu na magistrali
       SCSI.

       2. Wiele  programów  (np.  tar)  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, muszą być wkompilowane w
       kernel lub załadowane jako moduły: podstawowy sterownik SCSI, sterownik
       kontrolera  SCSI oraz sterownik taśm SCSI. Jeśli nie ma sterownika taśm
       SCSI, nepę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 konsoli / do logów. Kody
       SENSE zapisane w niektórych komunikatach są automatycznie tłumaczone na
       tekst,  o ile w konfiguracji jądra włączono rozwlekłe komuniakaty SCSI.

COPYRIGHT

       Copyright (C) 1995 Robert K. Nichols.
       Copyright (C) 1999 Kai Makisara.

       Udziela  się   pozwolenia   na   dystrybucję   dosłownych   kopii   tej
       dokumentacji,  pod warunkiem, że każda kopia będzie zawierać informację
       o prawach autorskich oraz tę uwagę. Dodatkowe pozwolenia można  znaleźć
       w nagłówku w pliku źródłowym.