Scroll to navigation

ST(4) Podręcznik programisty Linuksa ST(4)

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:

Przesunięcie do tyłu o mt_count znaczników pliku.
Przesunięcie do tyłu o mt_count znaczników pliku. Ustawienie taśmy po stronie EOT (końca taśmy) ostatniego znacznika pliku.
Przesunięcie do tyłu o mt_count rekordów (bloków taśmy).
Przesunięcie do tyłu o mt_count znaczników (setmarks).
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.
Przesunięcie do końca zapisanej części nośnika (w celu dogrania plików).
Wyczyszczenie taśmy.
Przesunięcie do przodu o mt_count znaczników pliku.
Przesunięcie do przodu o mt_count znaczników pliku. Ustawienie taśmy po stronie BOT (początku taśmy) ostatniego znacznika pliku.
Przesunięcie do przodu o mt_count rekordów (bloków taśmy).
Przesunięcie do przodu o mt_count znaczników (setmarks).
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.
Zablokowanie kieszeni napędu taśm.
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).
Brak operacji - jako efekt uboczny opróżnia bufor sterownika. Powinno się tego używać przed odczytaniem stanu za pomocą MTIOCGET.
Przewinięcie taśmy i odłączenie napędu.
Inicjalizacja napędu.
Wyrównanie napięcia taśmy.
Prezewinięcie.
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.
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.
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.
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).
Wykonanie polecenia SCSI "unload" (nie wysuwa taśmy).
Odblokowanie kieszeni napędu taśm.
Zapisanie mt_count znaczników pliku.
Zapisanie mt_count znaczników (setmarks).

Polecenia ustawiające opcje dla napędów taśm magnetycznych (mogą być wydawane tylko przez superużytkownika):

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

Ta opcja włącza wypisywanie przez sterownik komunikatów diagnostycznych (skuteczne tylko gdy sterownik został skompilowany ze zdefiniowaną niezerową wartością DEBUG).
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.
Jeśli ta opcja jest włączona, to kieszeń napędu będzie blokowana po otwarciu urządzenia, a odblokowywana po jego zamknięciu.
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ą.
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.
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.
Opcja ta włącza obsługę kilku stref na jednej taśmie. Dotyczy ona wszystkich urządzeń skojarzonych z napędem.
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.
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.
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;
};
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).
zawiera numer strefy bieżącej taśmy.
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.
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 ½" 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.

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").
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.
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

Wydane polecenie nie może zostać zrealizowane.
Operacja zapisu nie może zostać zakończona ponieważ taśma osiągnęła koniec nośnika.
Nastąpiła próba zapisu lub skasowania taśmy chronionej przed zapisem. (Ten błąd nie jest wykrywany podczas wykonywania funkcji open().)
Parametry poleenia wskazują na obszar pamięci nie należący do procesu wywołującego funkcję.
Podczas otwierania, takie urządzenie nie istnieje.
Urządzenie jest aktualnie w użyciu lub sterownikowi nie udało się przydzielić pamięci dla bufora.
Nastąpiła próba odczytania lub zapisu bloku o zmiennej długości, który jest większy niż wewnętrzny bufor sterownika.
Funkcja ioctl() posiadała niedozwolony argument lub podano niedozwolony rozmiar bloku.
Nieznana funkcja ioctl().
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 Mäkisarę <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 Mäkisara.

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.

1999-01-18 Linux 1.1.86