Provided by:
manpages-pl_20060617-2_all 
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.