st(4) Device Drivers Manual st(4) NAZWA st - urzadzenie tasmy SCSI SKLADNIA #include 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 udostepnia interfejs do roznego rodzaju napedow tasm magnetycznych SCSI. Obecnie sterownik przejmuje kontrole nad wszystkimi wykrytymi urzadzeniami typu ,,sequential-access" (dostepu sekwencyjnego). Sterownikowi st przydzielony zostal numer glowny 9. Kazde urzadzenie ma osiem numerow podrzednych. Na pieciu najnizszych bitach numeru podrzednego reprezentowane sa przydzielone kolejno numery urzadzen (kolejnosc detekcji). Numery podrzedne mozna pogrupowac w dwoch zbiorach po cztery numery: glowne numery podrzedne (urzadzenia z przewijaniem), n, oraz numery urzadzen ,,bez przewijania", (n+ 128). Urzadzenie otwarte przy wykorzystaniu glownego numeru podrzednego otrzyma polecenie REWIND podczas jego zamykania. Urzadzenia otwierane przy wykorzystaniu numeru urzadzenia ,,bez przewijania" nie otrzymaja takiego rozkazu (trzeba zauwazyc, ze uzywanie urzadzenia ,,bez przewijania" do pozycjonowania tasmy, na przyklad za pomoca mt, nie prowadzi do pozadanego efektu: tasma jest przewijana po wydaniu polecenia mt i nastepne polecenie zaczyna od poczatku tasmy). W kazdej grupie dostepne sa cztery numery podrzedne, definiujace urzadzenia o roznej charakterystyce (rozmiar bloku, kompresja, gestosc itp.). Podczas startu systemu dostepne jest tylko pierwsze urzadzenie. Aktywacja pozostalych trzech nastepuje po zdefiniowaniu ich domyslnych charakterystyk (patrz nizej). (Zmieniajac wartosci stalych podczas kompilacji, mozliwa jest zmiana rownowagi pomiedzy maksymalna liczba napedow tasm a liczba numerow podrzednych dla kazdego napedu. Domyslna alokacja powala na sterowanie 32 napedami tasm. Na przyklad, mozna sterowac nie wiecej niz 64 napedami tasm, posiadajac po dwa numery podrzedne dla roznych opcji.) Pliki urzadzen sa zwykle tworzone za pomoca polecen: 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 odpowiadajacych urzadzen blokowych. Sterownik uzywa wewnetrznego bufora o rozmiarze dostatecznie duzym, by pomiescil co najmniej jeden blok tasmy. Przed Linuksem 2.1.121 bufor ten jest przydzielany jako jeden ciagly blok pamieci. Ogranicza to rozmiar bloku na tasmie do najwiekszego ciaglego bloku pamieci, ktory moze zostac przydzielony przez procedure przydzielania pamieci w jadrze. Obecnie ograniczenie to wynosi 128 kB dla architektur 32-bitowych i 256 kB dla architektur 64-bitowych. W nowszych jadrach sterownik przydziela, jesli trzeba, pamiec dla bufora w kilku czesciach. Domyslna maksymalna liczba fragmentow wynosi 16. Oznacza to, ze maksymalny rozmiar bloku jest bardzo duzy (2 MB, jesli uda sie przydzielic 16 blokow po 128 kB). Rozmiar wewnetrznego bufora sterownika jest okreslony przez stala czasu kompilacji, ale mozna go zmienic za pomoca opcji startowej jadra. Dodatkowo, sterownik probuje przydzielac wiekszy bufor tymczasowy, jesli zajdzie taka potrzeba w trakcie pracy. Jednakze, przydzielanie podczas pracy duzych ciaglych blokow pamieci moze sie nie udac i zaleca sie nie polegac za bardzo na przydzielaniu buforow dynamicznych przed Linuksem 2.1.121 (dotyczy to takze ladowania na zadanie sterownika za pomoca kerneld lub kmod). Ten sterownik nie zawiera zadnej specyficznej obslugi dla tasm wybranego producenta, czy modelu. Po starcie systemu opcje urzadzenia tasmowego sa okreslane na podstawie firmware napedu. Na przyklad, jesli firmware napedu wybiera tryb o stalej dlugosci bloku, urzadzenie tasmowe rowniez uzywa trybu o stalej dlugosci bloku. Opcje te mozna zmienic za pomoca jawnych wywolan ioctl(2) i zmiany te pozostaja aktywne, gdy urzadzenie zostanie zamkniete i ponownie otwarte. Ustawione opcje dotycza zarowno urzadzen z przewijaniem, jak i bez przewijania. Mozna podawac rozne opcje dla roznych urzadzen w ramach podgrupy czterech urzadzen. Opcje sa ustawiane dla urzadzenia, gdy jest otwierane. Na przyklad, administrator systemu moze zdefiniowac jedno urzadzenie zapisujace w trybie o stalej dlugosci bloku i jedno zapisujace w trybie o zmiennej dlugosci bloku (jesli naped obsluguje obydwa tryby). Sterownik obsluguje strefy tasm, jesli sa one obslugiwane przez naped. (Trzeba tu zwrocic uwage, ze strefy tasm nie maja nic wspolnego z partycjami dyskow [po angielsku w obu przypadkach ,,partitions" - przyp. tlum.]. Tasma podzielona na strefy moze byc widziana jako kilka logicznych tasm na jednym nosniku). Obsluge stref trzeba wlaczyc za pomoca ioctl(2). Przy zmianach stref zachowywane jest polozenie na tasmie w obrebie kazdej ze stref. Strefe, ktorej maja dotyczyc nastepne operacje wybiera sie za pomoca ioctl(2). Przelaczanie stref odbywa sie lacznie z nastepna operacja na tasmie, aby uniknac niepotrzebnego przewijania tasmy. Maksymalna liczba stref na tasmie okreslona jest przez stala czasu kompilacji (pierwotnie: cztery). Sterownik zawiera ioctl(2) pozwalajacy sformatowac tasme z jedna lub dwiema strefami. Urzadzenie /dev/tape jest zwykle dowiazaniem zwyklym lub symbolicznym do domyslnego urzadzenia reprezentujacego tasme magnetyczna w danym systemie. Od Linuksa 2.6.2, sterownik eksportuje do katalogu sysfs /sys/class/scsi_tape dolaczone urzadzenia i czesc parametrow przypisanych do urzadzenia. Transfer danych Sterownik moze pracowac zarowno w trybie o stalej, jak i o zmiennej dlugosci bloku (jesli naped obsluguje oba tryby). W trybie o stalej dlugosci bloku naped zapisuje bloki okreslonej dlugosci i rozmiar bloku nie zalezy od liczby bajtow, ktora zostala podana systemowej funkcji zapisu. W trybie o zmiennej dlugosci bloku zapisywany jest jeden blok przy kazdym wywolaniu funkcji zapisu, a liczba bajtow podanych tej funkcji okresla rozmiar odpowiedniego bloku na tasmie. Nalezy tu zwrocic uwage, ze bloki na tasmie nie zawieraja informacji o trybie zapisu: jedyna wazna rzecza podczas odczytu jest uzywanie polecen akceptujacych rozmiary blokow znajdujacych sie na tasmie. W trybie o zmiennej dlugosci bloku ilosc odczytywanych bajtow nie musi dokladnie odpowiadac dlugosci bloku na tasmie. Jesli liczba bajtow jest wieksza niz nastepny blok na tasmie, sterownik zwroci dane, a funkcja zwroci rozmiar biezacego bloku. Jesli dlugosc bloku jest wieksza niz liczba bajtow, zwrocony zostanie blad. W trybie o stalej dlugosci bloku ilosc odczytywanych bajtow moze byc dowolna, gdy wlaczone jest buforowanie. Musi natomiast byc wielokrotnoscia dlugosci bloku, gdy buforowanie jest wylaczone. Przed Linuksem 2.1.121 jadra pozwalaly na zapis dowolnej liczby bajtow przy wlaczonym buforowaniu. Natomiast w pozostalych przypadkach (przed Linuksem 2.1.121 z wylaczonym buforowaniem oraz nowsze jadra) liczba zapisywanych bajtow musi byc wielokrotnoscia dlugosci bloku na tasmie. W Linuksie 2.6, sterownik stara sie uzywac bezposrednich transferow pomiedzy buforem uzytkownika a urzadzeniem. Jesli nie jest to mozliwe, uzywany jest wewnetrzny bufor sterownika. Powodem, dla ktorego transfer bezposredni nie jest uzyty, moze byc niepoprawne wyrownanie bufora uzytkownika (domyslne wynosi 512 bajtow, ale moze byc zmienione w sterowniku HBA), niedostepnosc jednej lub wiecej stron bufora uzytkownika dla adaptera SCSI itp. Znacznik pliku jest zapisywany na tasmie automatycznie, jesli ostatnia operacja na tej tasmie przed jej zamknieciem byl zapis. Gdy podczas odczytu napotkany zostanie znacznik pliku, dzieje sie co nastepuje. Jesli w chwili natrafienia na znacznik pliku w buforze byly dane, zostana zwrocone dane z bufora. Nastepny odczyt zwroci zero bajtow. Kolejne odczyty zwroca dane z nastepnego pliku. Koniec zapisanych danych jest sygnalizowany zwroceniem zerowej liczby bajtow przez dwa kolejne wywolania funkcji odczytu. Trzeci odczyt zwroci blad. Kontrolki systemowe (ioctl) Sterownik obsluguje trzy wywolania funkcji ioctl(2). Wywolania nierozpoznawane przez sterownik i st sa przekazywane do sterownika SCSI. Ponizsze definicje pochodza z pliku /usr/include/linux/mtio.h: MTIOCTOP -- wykonanie operacji na tasmie To wywolanie wymaga argumentu typu (struct mtop *). Nie wszystkie napedy obsluguja wszystkie polecenia. Jesli naped odrzuca polecenie, sterownik przekazuje wartosc EIO. /* Struktura dla polecenia MTIOCTOP dla tasmy magnetycznej: */ struct mtop { short mt_op; /* operacje zdefiniowane ponizej */ int mt_count; /* liczba powtorzen operacji */ }; Operacje na tasmie magnetycznej: MTBSF Przesuniecie do tylu o mt_count znacznikow pliku. MTBSFM Przesuniecie do tylu o mt_count znacznikow pliku. Ustawienie tasmy po stronie EOT (konca tasmy) ostatniego znacznika pliku. MTBSR Przesuniecie do tylu o mt_count rekordow (blokow tasmy). MTBSS Przesuniecie do tylu o mt_count znacznikow (setmarks). MTCOMPRESSION Wlaczenie kompresji danych na tasmie dla danego napedu, gdy mt_count jest niezerowe, wylaczenie kompresji, gdy mt_count jest zerem. Polecenie to korzysta z MODE page 15 obslugiwanego przez wiekszosc urzadzen DAT. MTEOM Przesuniecie do konca zapisanej czesci nosnika (w celu dogrania plikow). MTERASE Usuniecie zapisu z tasmy. W Linuksie 2.6 szybkie usuwanie (oznaczenie tasmy jako pustej) jest wykonywane, gdy argumentem jest zero. W przeciwnym wypadku przeprowadzane jest dlugie usuwanie (usuwanie wszystkiego). MTFSF Przesuniecie do przodu o mt_count znacznikow pliku. MTFSFM Przesuniecie do przodu o mt_count znacznikow pliku. Ustawienie tasmy po stronie BOT (poczatku tasmy) ostatniego znacznika pliku. MTFSR Przesuniecie do przodu o mt_count rekordow (blokow tasmy). MTFSS Przesuniecie do przodu o mt_count znacznikow (setmarks). MTLOAD Wykonanie polecenia SCSI ,,load" (zaladowanie tasmy). Szczegolny przypadek dotyczacy wylacznie niektorych automatycznie ladujacych napedow HP: gdy mt_count jest rowne stalej MT_ST_HPLOADER_OFFSET powiekszonej o pewna liczbe, to ta liczba jest przesylana do napedu dla celow sterowania automatycznym zaladowaniem. MTLOCK Zablokowanie kieszeni napedu tasm. MTMKPART Sformatowanie tasmy na jedna lub dwie strefy. Gdy mt_count jest dodatnie, okresla rozmiar strefy 1, a strefa 0 obejmuje reszte tasmy. Gdy mt_count jest zerem, tasma jest formatowana jako jedna strefa. Od Linuksa 4.6, ujemne mt_count okresla rozmiar strefy 0, a reszta tasmy zawiera strefe 1. Fizyczna kolejnosc stref zalezy od napedu. Polecenie to nie jest dozwolone dla napedow, dla ktorych nie wlaczono obslugi stref (zobacz MT_ST_CAN_PARTITIONS ponizej). MTNOP Brak operacji -- jako efekt uboczny oproznia bufor sterownika. Powinno sie tego uzywac przed odczytaniem stanu za pomoca MTIOCGET. MTOFFL Przewiniecie tasmy i odlaczenie napedu. MTRESET Inicjalizacja napedu. MTRETEN Wyrownanie napiecia tasmy. MTREW Przewiniecie. MTSEEK Wyszukanie na tasmie bloku o numerze podanym w mt_count. Ta operacja wymaga albo sterownika SCSI-2, ktory obsluguje polecenie LOCATE (adres specyficzny dla urzadzenia) albo urzadzenia SCSI-1 zgodnego z Tandberg (Tandberg, Archive Viper, Wangtek, ... ). Numer bloku powinien byc rowny zwroconemu poprzednio przez MTIOCPOS, gdy uzywany jest adres specyficzny dla urzadzenia. MTSETBLK Ustawienie dlugosci bloku sterownika rownej wartosci podanej w mt_count. Dlugosc rowna 0 wprowadza naped w tryb blokow o zmiennej dlugosci. MTSETDENSITY Ustawienie gestosci zapisu tasmy zakodowanej w mt_count. Kody okreslajace gestosc zapisu obslugiwane przez dany naped mozna znalezc w jego dokumentacji. MTSETPART Przelaczenie aktywnej strefy na mt_count. Strefy sa numerowane od zera. Polecenie to nie jest dozwolone dla napedow, dla ktorych nie wlaczono obslugi stref (zobacz MT_ST_CAN_PARTITIONS ponizej). MTUNLOAD Wykonanie polecenia SCSI ,,unload" (nie wysuwa tasmy). MTUNLOCK Odblokowanie kieszeni napedu tasm. MTWEOF Zapisanie mt_count znacznikow pliku. MTWSM Zapisanie mt_count znacznikow (setmarks). Polecenia ustawiajace opcje dla napedow tasm magnetycznych (moga byc wydawane tylko przez administratora): MTSETDRVBUFFER Ustawienie roznych opcji napedu i sterownika, zgodnie z wartosciami pol bitowych przekazanych w mt_count. Dotyczy to sposobu buforowania przez sterownik, zestawu logicznych parametrow sterownika oraz progu zapisu bufora, domyslnej dlugosci bloku i gestosci oraz czasow przeterminowania (tylko od Linuksa 2.1). Pojedyncze dzialanie moze zmienic ustawienia tylko dla jednej pozycji z ponizszej listy (parametry logiczne sa traktowane jako jedna calosc). Wartosc, ktorej 4 najwyzsze bity sa rowne 0 zostanie wykorzystana do ustawienia trybu buforowania napedu. Do wyboru sa nastepujace tryby: 0 Naped nie bedzie sygnalizowac stanu GOOD po poleceniach zapisu, dopoki dane nie zostana zapisane fizycznie na nosniku. 1 Naped moze sygnalizowac stan GOOD po poleceniach zapisu, gdy tylko wszystkie dane zostana umieszczone w wewnetrznym buforze napedu. 2 Naped moze sygnalizowac stan GOOD po poleceniach zapisu, gdy tylko (a) wszystkie dane zostana przeslane do wewnetrznego bufora napedu i (b) wszystkie buforowane dane (z innych polecen) zostana pomyslnie zapisane na nosniku. Aby kontrolowac prog zapisu, wartosc mt_count musi zawierac stala MT_ST_WRITE_THRESHOLD dodana za pomoca bitowego OR do liczby blokow w 28 najnizszych bitach. Liczba blokow odnosi sie do 1024-bajtowych blokow, a nie blokow o fizycznym rozmiarze bloku dla danego urzadzenia. Prog zapisu nie moze przekroczyc rozmiaru wewnetrznego bufora napedu (patrz OPIS powyzej). Aby ustawic lub usunac opcje logiczne, wartosc mt_count musi zawierac jedna ze stalych MT_ST_BOOLEANS, MT_ST_SETBOOLEANS, MT_ST_CLEARBOOLEANS lub MT_ST_DEFBOOLEANS dodana za pomoca bitowego OR do dowolnej kombinacji ponizszych opcji. Uzycie MT_ST_BOOLEANS powoduje nadanie wszystkim opcjom wartosci podanych na odpowiednich polach bitowych. Przy MT_ST_SETBOOLEANS ustawione zostana tylko wybrane opcje, natomiast przy MT_ST_DEFBOOLEANS tylko wybrane opcje zostana usuniete. Za pomoca MT_ST_DEFBOOLEANS ustawiane sa domyslne opcje dla urzadzenia tasmowego. Nieaktywne urzadzenia tasmowe (np. urzadzenia o numerze podrzednym 32 lub 160) sa aktywowane po pierwszym ustawieniu dla nich domyslnych opcji. Aktywowane urzadzenie dziedziczy od urzadzenia aktywowanego podczas startu systemu opcje, ktore nie zostaly jawnie podane. Dostepne sa nastepujace opcje logiczne: MT_ST_BUFFER_WRITES (Domyslnie: wlaczona) Buforowanie wszystkich operacji zapisu w trybie o stalej dlugosci bloku. Jesli ta opcja jest wylaczona i naped uzywa stalej dlugosci bloku, wtedy wszystkie operacje zapisu musza dotyczyc wielokrotnosci dlugosci bloku. Opcja ta powinna byc wylaczona, jesli chcemy w sposob pewny zapisywac archiwa skladajace sie z wielu wolumenow. MT_ST_ASYNC_WRITES (Domyslnie: wlaczona) Gdy opcja ta jest wlaczona, wtedy operacje zapisu przekazuja sterowanie natychmiast, bez oczekiwania na przeslanie informacji do napedu, jesli tylko dane mieszcza sie w buforze sterownika. Stopien wypelnienia bufora, przy ktorym zostanie wydane polecenie zapisu SCSI, jest okreslony przez prog zapisu. Wszystkie bledy zgloszone przez naped beda wstrzymane az do nastepnej operacji. Opcja ta powinna byc wylaczona, jesli chcemy w sposob pewny zapisywac archiwa skladajace sie z wielu wolumenow. MT_ST_READ_AHEAD (Domyslnie: wlaczona) Opcja ta powoduje zapewnienie przez sterownik buforowania i odczytu wyprzedzajacego w trybie o stalej dlugosci bloku. Jesli ta opcja jest wylaczona i naped uzywa blokow o stalej dlugosci, wtedy wszystkie operacje odczytu musza dotyczyc wielokrotnosci dlugosci bloku. MT_ST_TWO_FM (Domyslnie: wylaczona) Opcja ta zmienia zachowanie sterownika w momencie zamkniecia pliku. Zwykle towarzyszy temu zapisanie pojedynczego znacznika konca pliku. Jesli opcja jest wlaczona, sterownik zapisze dwa znaczniki i cofnie sie przed drugi. Uwaga: Ta opcja nie powinna byc wlaczona w przypadku napedow QIC, poniewaz nie sa one w stanie nadpisac danych na znaczniku pliku. Napedy te wykrywaja koniec zapisanych danych poprzez sprawdzenie, czy tasma jest pusta, zamiast stwierdzania dwoch kolejnych znacznikow konca pliku. Wiekszosc innych wspolczesnych napedow rowniez wykrywa koniec zapisanych danych, wiec poslugiwanie sie dwoma znacznikami konca pliku jest niezbedne jedynie przy wymianie tasm z niektorymi innymi systemami. MT_ST_DEBUGGING (Domyslnie: wylaczona) Ta opcja wlacza wypisywanie przez sterownik komunikatow diagnostycznych (skuteczne tylko gdy sterownik zostal skompilowany ze zdefiniowana niezerowa wartoscia DEBUG). MT_ST_FAST_EOM (Domyslnie: wylaczona) Wlaczenie tej opcji powoduje, ze polecenia MTEOM sa przesylane bezposrednio do napedu, potencjalnie przyspieszajac operacje, lecz jednoczesnie powodujac utrate przez sterownik informacji o aktualnym polozeniu tasmy - numerze pliku, zwykle przekazywanego jako wynik zapytania MTIOCGET. Jesli opcja MT_ST_FAST_EOM jest wylaczona, sterownik bedzie odpowiadal na polecenie MTEOM przewijaniem tasmy plik po pliku. MT_ST_AUTO_LOCK (Domyslnie: wylaczona) Jesli ta opcja jest wlaczona, to kieszen napedu bedzie blokowana po otwarciu pliku urzadzenia, a odblokowywana po jego zamknieciu. MT_ST_DEF_WRITES (Domyslnie: wylaczona) Opcje tasmy (dlugosc bloku, tryb, kompresja itp.) moga ulec zmianie przy przelaczaniu z jednego urzadzenia skojarzonego z napedem na inne urzadzenia skojarzone z tym samym napedem, w zaleznosci od definicji tych urzadzen. Ta opcja okresla, kiedy sterownik powinien wymusic zmiany wysylajac polecenia SCSI oraz kiedy nalezy polegac na wlasciwosciach autodetekcyjnych urzadzenia. Jesli opcja ta jest wylaczona, sterownik bedzie wysylac polecenia SCSI natychmiast po zmianie urzadzenia. Jesli jest ona wlaczona, polecenia SCSI nie zostana wyslane dopoki nie pojawi sie zadanie zapisu. W tym przypadku firmware napedu moze dokonywac podczas odczytu autodetekcji struktury tasmy, a polecenia SCSI maja na celu jedynie zapewnienie, aby zapis na tasmie odbywal sie zgodnie z wlasciwa specyfikacja. MT_ST_CAN_BSR (Domyslnie: wylaczona) Gdy wykorzystywany jest odczyt wyprzedzajacy, tasma musi byc czasami cofnieta do wlasciwej pozycji. Dzieje sie to, gdy urzadzenie jest zamykane i wykorzystywane jest w tym celu polecenie SCSI cofania o zadana ilosc rekordow. Niektore starsze napedy nie potrafia wykonac tego polecenia w sposob pewny i opcja ta sluzy to zabronienia napedowi uzywania tych polecen. Koncowym efektem jest nieprawidlowe pozycjonowanie tasmy po zamknieciu urzadzenia przy wlaczonym odczycie wyprzedzajacym w trybie o stalej dlugosci bloku. W Linuksie 2.6 domyslnie wartosc jest wlaczona w przypadku napedow obslugujacych SCSI-3. MT_ST_NO_BLKLIMS (Domyslnie: wylaczona) Niektore napedy nie obsluguja polecenia SCSI READ BLOCK LIMITS. Jesli opcja ta jest wlaczona, sterownik nie uzywa tego polecenia. Wada jest brak mozliwosci sprawdzenia przez sterownik przed wyslaniem polecenia, czy zadana dlugosc bloku jest akceptowana przez naped. MT_ST_CAN_PARTITIONS (Domyslnie: wylaczona) Opcja ta wlacza obsluge kilku stref na jednej tasmie. Dotyczy ona wszystkich urzadzen skojarzonych z napedem. MT_ST_SCSI2LOGICAL (Domyslnie: wylaczona) Ta opcja poleca sterownikowi uzywanie logicznych adresow blokow zdefiniowanych w standardzie SCSI-2 podczas wykonywania operacji wyszukiwania (seek) oraz ,,tell" (dla polecen MTSEEK i MTIOCPOS oraz przy zmianie strefy tasmy). W przeciwnym razie uzywane sa adresy specyficzne dla urzadzenia. Wlaczenie tej opcji jest wysoce zalecane, jesli naped obsluguje adresy logiczne, gdyz zliczaja one rowniez znaczniki plikow. Niektore napedy obsluguja wylacznie logiczne adresy blokow. MT_ST_SYSV (Domyslnie: wylaczona) Gdy ta opcja jest wlaczona, urzadzenia tasmowe uzywaja semantyki Systemu V. W przeciwnym razie uzywana jest semantyka BSD. Najwazniejsza roznica pomiedzy tymi semantykami polega na tym, co sie dzieje, gdy urzadzenie uzywane do odczytu jest zamykane: w semantyce Systemu V tasma jest przewijana do przodu poza najblizszy znacznik pliku, jesli nie stalo sie to wczesniej. W semantyce BSD pozycja tasmy nie jest zmieniana. MT_NO_WAIT (Domyslnie: wylaczona) Wlacza tryb natychmiastowy niektorych polecen, np. rewind -- nie czeka na zakonczenie polecenia. Przyklad: 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); Domyslny rozmiar bloku dla urzadzenia mozna ustawic przy uzyciu MT_ST_DEF_BLKSIZE, a domyslny kod gestosci mozna ustawic przy uzyciu MT_ST_DEFDENSITY. Wartosci tych parametrow powinny byc dodane za pomoca bitowej alternatywy (OR) kodu operacji. W Linuksie 2.1.x i pozniejszych wartosci czasu przeterminowania (timeout) mozna ustawic przy uzyciu podpolecenia MT_ST_SET_TIMEOUT dodanego za pomoca bitowego OR do czasu przeterminowania w sekundach. Dlugie czasy przeterminowania (wykorzystywane przy poleceniach przewijania i niektorych innych trwajacych dlugo) mozna ustawic przy uzyciu MT_ST_SET_LONG_TIMEOUT. Domyslne wartosci jadra sa bardzo dlugie, aby zapewnic, ze pomyslnie wykonywane polecenie nie zostanie przeterminowane przez zaden naped. Z tego powodu niniejszy sterownik moze sprawiac wrazenie zawieszonego, nawet gdy jedynie czeka on na przeterminowanie operacji. Polecenia te moga sluzyc do ustawienia bardziej praktycznych wartosci dla konkretnego napedu. Czasy przeterminowania ustawione dla jednego urzadzenia dotycza wszystkich urzadzen skojarzonych z tym samym napedem. Od Linuksa 2.4.19 i 2.5.43, sterownik obsluguje bit statusu, wskazujacy czy sterownik zada czyszczenia. Metoda uzywana przez naped do zwrocenia informacji o czyszczeniu jest ustawiona za pomoca podpolecenia MT_ST_SEL_CLN. Jesli wartosc wynosi 0, to bit czyszczenia wynosi zawsze zero. Przy wartosci jeden, uzywane sa dane TapeAlert zdefiniowane w standardzie SCSI-3 (jeszcze nie zaimplementowane). Wartosci 2-17 sa zastrzezone. Jesli najnizsze osiem bitow wynosi >=18, to uzywane sa bity z rozszerzonych danych probkowania. Bity 9-16 okreslaja maske do wybrania bitow, ktore maja byc wyszukiwane, a bity 17-23 okreslaja wzorzec bitowy do wyszukiwania. Jesli wzorzec bitowy wynosi 0, to jeden lub wiecej bitow pod maska oznacza zadanie czyszczenia. Jesli wzorzec jest niezerowy, musi od pasowac do maskowanego bajtu danych probkowania. MTIOCGET -- odczytanie stanu To polecenie wykorzystuje argument typu (struct mtget *). /* struktura dla MTIOCGET - odczytanie stanu tasmy magn. */ struct mtget { long mt_type; long mt_resid; /* Nastepne rejestry sa specyficzne dla urzadzenia */ long mt_dsreg; long mt_gstat; long mt_erreg; /* Kolejne dwa pola nie zawsze sa uzywane */ daddr_t mt_fileno; daddr_t mt_blkno; }; mt_type Plik naglowkowy definiuje wiele mozliwych wartosci mt_type, lecz biezacy sterownik raportuje jedynie typy podstawowe MT_ISSCSI1 (Generic SCSI-1 tape) oraz MT_ISSCSI2 (Generic SCSI-2 tape). mt_resid zawiera numer strefy biezacej tasmy. mt_dsreg raportuje biezace ustawienia dlugosci bloku (w najnizszych 24 bitach) oraz gestosci zapisu (w 8 najwyzszych bitach). Pola sa zdefiniowane przez MT_ST_BLKSIZE_SHIFT, MT_ST_BLKSIZE_MASK, MT_ST_DENSITY_SHIFT i MT_ST_DENSITY_MASK. mt_gstat raportuje podstawowe (niezalezne od urzadzenia) informacje o stanie. Plik naglowkowy zawiera definicje makrodefinicji do testowania przekazywanych bitow stanu: GMT_EOF(x) Tasma zostala ustawiona tuz za znacznikiem pliku (zawsze nieprawdziwe po poleceniu MTSEEK). GMT_BOT(x) Tasma zostala ustawiona na poczatku pierwszego pliku (zawsze nieprawdziwe po poleceniu MTSEEK). GMT_EOT(x) Wykonanie polecenia spowodowalo osiagniecie fizycznego konca nosnika. GMT_SM(x) Tasma jest aktualnie ustawiona na znaczniku (setmark) (zawsze nieprawdziwe po poleceniu MTSEEK). GMT_EOD(x) Tasma jest ustawiona na koncu zapisanych danych. GMT_WR_PROT(x) Naped jest chroniony przed zapisem. W przypadku niektorych urzadzen moze to rowniez oznaczac, ze naped nie obsluguje zapisu na biezacym typie nosnika. GMT_ONLINE(x) Ostatnie wykonanie funkcji open(2) zastalo naped gotowy do dzialania z odpowiednio umiejscowionym nosnikiem. GMT_D_6250(x) GMT_D_1600(x) GMT_D_800(x) Ta ,,podstawowa" informacja o stanie urzadzenia zawiera rowniez ustawienia gestosci zapisu, lecz jedynie dla 9-sciezkowych 1/2" urzadzen. GMT_DR_OPEN(x) Brak tasmy w napedzie. GMT_IM_REP_EN(x) Tryb natychmiastowego raportowania. To pole bitowe jest ustawiane na 1, gdy nie ma gwarancji, ze dane zostaly fizycznie zapisane na tasmie do chwili zakonczenia funkcji zapisu. Natomiast jest ustawiane na zero tylko wtedy, gdy sterownik nie buforuje danych i naped zostal ustawiony na ich niebuforowanie. GMT_CLN(x) Naped zazadal czyszczenia. Zaimplementowane od Linuksa 2.4.19 i 2.5.43. mt_erreg Jedyne pole zdefiniowane w mt_erreg to licznik naprawionych bledow, ktory znajduje sie w 16 niskich bitach (jak to zdefiniowano przez MT_ST_SOFTERR_SHIFT i MT_ST_SOFTERR_MASK). Z powodu niezgodnosci w sposobie zglaszania naprawionych bledow przez napedy, licznik ten czesto nie jest obslugiwany (wiekszosc napedow domyslnie nie zglasza naprawionych bledow, ale mozna to zmienic poleceniem SCSI "MODE SELECT"). mt_fileno podaje biezacy numer pliku (liczac od zera). W przypadku gdy numer pliku nie jest znany (np. po MTBSS lub MTSEEK), przekazywana jest wartosc -1. mt_blkno raportuje numer bloku (liczac od zera) wewnatrz biezacego pliku. Gdy numer bloku nie jest znany (np. po poleceniach MTBSF, MTBSS lub MTSEEK), przekazywana jest wartosc -1. MTIOCPOS -- odczytanie polozenia tasmy To polecenie uzywa argumentu typu (struct mtpos *) i podaje biezacy numer bloku tasmy (w sensie, w jakim go rozumie naped), co nie jest rownowazne z mt_blkno przekazywanym przez MTIOCGET. Musi to byc urzadzenie SCSI-2, ktore obsluguje polecenie READ POSITION (adres specyficzny dla urzadzenia) lub urzadzenie SCSI-1 zgodne z Tandberg (Tandberg, Archive Viper, Wangtek, ...). /* struktura dla MTIOCPOS - odczytanie polozenia tasmy magn. */ struct mtpos { long mt_blkno; /* numer biezacego bloku */ }; WARTOSC ZWRACANA EACCES Nastapila proba zapisu lub skasowania tasmy chronionej przed zapisem. (Ten blad nie jest wykrywany podczas wykonywania funkcji open(2)). EBUSY Urzadzenie jest aktualnie w uzyciu lub sterownikowi nie udalo sie przydzielic pamieci dla bufora. EFAULT Parametry polecenia wskazuja na obszar pamieci nie nalezacy do procesu wywolujacego funkcje. EINVAL W wywolaniu ioctl(2) podano niedozwolony argument lub podano niedozwolony rozmiar bloku. EIO Wydane polecenie nie moze zostac zrealizowane. ENOMEM Liczba bajtow w read(2) jest mniejsza od nastepnego bloku fizycznego na tasmie (przed Linuksem 2.2.18 i 2.4.0 dodatkowe bajty byly po cichu ignorowane). ENOSPC Operacja zapisu nie moze zostac zakonczona poniewaz tasma osiagnela koniec nosnika. ENOSYS Nieznana funkcja ioctl(2). ENXIO Podczas otwierania, takie urzadzenie nie istnieje. EOVERFLOW Nastapila proba odczytania lub zapisu bloku o zmiennej dlugosci, ktory jest wiekszy niz wewnetrzny bufor sterownika. EROFS Wystapila proba otwarcia z opcja O_WRONLY lub O_RDWR, podczas gdy tasma znajduje sie w napedzie chronionym przed zapisem. PLIKI /dev/st* automatycznie przewijajace urzadzenia tasm SCSI /dev/nst* nieprzewijajace urzadzenia tasm SCSI UWAGI o Podczas wymiany danych pomiedzy systemami, oba systemy musza uzgodnic dlugosc fizycznego bloku na tasmie. Parametry napedu po starcie systemu czesto roznia sie od uzywanych dla danego urzadzenia przez wiekszosc systemow operacyjnych. Wiekszosc systemow uzywa napedow w trybie o zmiennej dlugosci bloku, o ile naped ten tryb obsluguje. Dotyczy to wiekszosci wspolczesnych napedow, wlaczajac w to napedy DAT, 8 mm napedy wybierania spiralnego, napedy DLT itp. Mozna doradzic uzywanie tych napedow w trybie o zmiennej dlugosci bloku rowniez w Linuksie (tzn. uzycie MTSETBLK lub MTSETDEFBLK przy starcie systemu w celu ustawienia tego trybu), przynajmniej podczas wymiany danych z obcym systemem. Wada tego jest koniecznosc uzycia dosc dlugiego bloku na tasmie, aby otrzymac akceptowalna wydajnosc transferu na magistrali SCSI. o Wiele programow (np. tar(1)) pozwala uzytkownikowi na okreslenie czynnika okreslajacego rozmiar bloku w linii polecen. Nalezy zauwazyc, ze okresla to dlugosc fizycznego bloku na tasmie jedynie w trybie o zmiennej dlugosci bloku. o Aby mozna bylo uzywac napedow tasm SCSI, to podstawowy sterownik SCSI, sterownik kontrolera SCSI oraz sterownik tasm SCSI musza byc wkompilowane w jadro lub zaladowane jako moduly. Jesli nie ma sterownika tasm SCSI, naped zostanie rozpoznany, ale opisana na tej stronie obsluga tasm nie bedzie dostepna. o Sterownik zapisuje komunikaty o bledach na konsole lub do logow. Kody SENSE zapisane w niektorych komunikatach sa automatycznie tlumaczone na tekst, jesli w konfiguracji jadra wlaczono opcje rozwleklych komunikatow SCSI. o Wewnetrzne buforowanie jadra pozwala na dobra przepustowosc w trybie o okreslonych blokach rowniez przy niewielkiej liczbie bajtow odczytywanych (read(2)) i zapisywanych (write(2)). Przy transferach bezposrednich nie jest to mozliwe i moze stanowic niemila niespodzianke przy przejsciu na jadro 2.6. Rozwiazaniem jest nakazanie oprogramowaniu uzycie wiekszych transferow (czesto -- nakazanie uzycia wiekszych blokow). Jesli nie jest to mozliwe, transfery bezposrednie moga byc wylaczone. ZOBACZ TAKZE mt(1) Plik drivers/scsi/README.st lub Documentation/scsi/st.txt (jadra w wersji >= 2.6) w drzewie zrodel jadra Linux zawierajacy najswiezsze informacje dotyczace sterownika i jego mozliwosci konfiguracyjnych. TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Piotr Pogorzelski , Andrzej Krzysztofowicz i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. st(4)