Provided by:
manpages-de_0.8-1_all 
BEZEICHNUNG
st - SCSI tape device (Bandlaufwerke, Streamer)
Diese Handbuchseite ist eventuell veraltet. Im Zweifelsfall ziehen Sie
die englischsprachige Handbuchseite zu Rate, indem Sie
man -LC 4 st
eingeben.
"UBERSICHT
#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)
BESCHREIBUNG
Der st-Treiber stellt eine einheitliche Schnittstelle fur die Benutzung
der diversen SCSI-Bandlaufwerke zur Verfugung. Im aktuellen
Entwicklungsstand ubernimmt der Treiber die Kontrolle uber alle
erkannten Laufwerke, auf die nur sequentiell zugegriffen werden kann.
Der st-Treiber benutzt die dabei die grundsatzliche (major device)
Geratenummer 9.
Zusatzlich werden generell zwei nebensachliche (minor device)
Geratenummern benutzt. Eine grundsatzliche Geratenummer, n, die
sequentiell beim Erkennen der Laufwerke vergeben wird, und eine Nummer
fur ein nicht-zuruckspulendes Gerat, (n+ 128). Wenn eine Bandeinheit
uber die grundsatzliche Geratenummer, n, geoffnet wird, so wird nach
dem SchlieBen ein REWIND-Kommando an die Bandeinheit geschickt; Bei der
Benutzung der Bandeinheit uber die Geratedatei fur das nicht-
zuruckspulende Gerat, (n+ 128). halt nicht ;-)
Optionen wie die Schreibdichte oder BlockgroBe sind nicht in den
Geratenummern implementiert. Diese Optionen mussen durch die
Verwendung von ioctl()-Aufrufen gesetzt werden Sie werden erst nach
SchlieBen und einem darauffolgenden erneuten Offnen der Geratedatei
aktiv.
Geratedateien werden ublicherweise mit dem Programm mknod eingetragen
mknod -m 660 /dev/st0 c 9 0
mknod -m 660 /dev/st1 c 9 1
mknod -m 660 /dev/nst0 c 9 128
mknod -m 660 /dev/nst1 c 9 129
Es gibt hier keine vergleichbare block-orientiert Geratedatei. Die
zeichenorientierte Geratedatei bietet standardmaBig das
Zwischenspeichern von Zeichen (buffering) und das Merkmal "
weiterlesen" (read-ahead) an. Ferner unterstutzt es wahlfreies Lesen
und Schreiben, welches nur durch den internen Treiber-Puffer begrenzt
ist. (Standard: 32768 bytes)
Die PuffergroBe kann sowohl als Kernelparameter, sowie auch im
Quelltext "fest" vergeben werden.
Ublicherweise wird ein Soft-Link /dev/tape eingerichtet, der auf das im
System vorhandene und zu benutzende Gerat zeigt.
IOCTLS
Der Treiber unterstutzt drei ioctl()-Aufrufe.
Alle dem st-Treiber unbekannten Aufrufe werden an den SCSI-Treiber
ubergeben. Die folgenden Definitionen stammen aus <linux/mtio.h>:
MTIOCTOP - Ausf"uhren einer Band Anweisung
Diese Operation benotigt ein Argument vom Typ
(struct mtop *).
Nicht alle Laufwerke unterstutzen jede der moglichen Anweisungen. Der
Treiber gibt ein EIO zuruck, wenn das Laufwerk die Anweisung nicht
unterstutzt.
Anm. des Ubersetzers
Das Folgende ist nur sehr schwer 100%ig ins Deutsche zu ubersetzen, da
so mancher Begriff aus dem Englischen gelaufiger ist, als seine
deutsche Ubersetzung. Da ich nicht in der "IBM Ubersetzerabteilung"
arbeite, habe ich hier und dort das englische Original stehen lassen.
(Hauptsachlich bei sehr kurzen Beschreibungen)
Bei "Unverstandlichkeit" des Folgenden bitte ich auf die ursprungliche
(englischsprachige) man-page zu st(4) zuruckzugreifen. Speziell fur
diesen Abschnitt wurde der Ubersetzer sich uber Ruckmeldungen der
"praktischen Anwender" freuen. ;-)
Fur eine gesunde Kritik einfach eine Mail an c.schmidt@ius.gun.de
/* Struktur fur MTIOCTOP - Anweisungen an das Bandlaufwerk */
struct mtop {
short mt_op; /* Welche Anweisung (Auflistung folgt) */
int mt_count; /* Wie oft diese Anweisung ausfuhren */
};
Bandlaufwerk; mogliche Anweisungen:
MTBSF Zuruckspulen uber mt_count Filemarks.
MTBSFM Zuruckspulen uber mt_count Filemarks. Positionieren des
Mediums(Schreibkopf?) auf die EOT Seite des letzten
Filemarks.
MTBSR Zuruckspulen uber mt_count records (tape blocks) BLOCKS.
MTBSS Zuruckspulen uber mt_count setmarks.
MTEOM "Geh an das Ende der aufgezeichenten Daten ..." Zum
Anhangen von Dateien/Archiven.
MTERASE Band loschen.
MTFSF Vorspulen uber mt_count Filemarks.
MTFSFM Vorspulen uber mt_count Filemarks. Positionieren des
Mediums(Schreibkopfes?) auf die BOT Seite des letzten
Filemarks.
MTFSR Vorspulen uber mt_count records (tape blocks) BLOCKS.
MTFSS Vorspulen uber mt_count Setmarks.
MTNOP Nichts machen - Als Seiteneffekt wird der Treiberpuffer
geloscht. Kann moglicherweise in Verbindung mit MTIOCGET
benutzt werden.
MTOFFL Zuruckspulen und Bandlaufwerk stoppen.
MTRESET Reset drive.
MTRETEN Retension tape. (Medium nicht auswerfen?)
MTREW Zuruckspulen.
MTSEEK Suche nach dem BLOCK mit der Nummer mt_count. Diese
Anweisung erfordert ein SCSI-2 Bandlaufwerk, welches das
LOCATE Kommando unterstutzt (laufwerksspezifische
Adresse), oder ein Tandberg-kompatibles SCSI-1 Laufwerk.
(Tandberg, Archive, Viper, Wangtek, ...). Die BLOCK
NUMMER ist dabei Laufwerk spezifisch und kann
moglicherweise uber den Ruckgabewert von MTIOCPOS
herausgefunden werden.
MTSETBLK Setzen der BLOCK GroBe auf den Wert, der in mt_count
angegeben ist. Ein BLOCK GroBe von 0 setzt das Laufwerk
auf variable BLOCK GroBe.
MTSETDENSITY Setzen der Schreibdichte (tape density) auf den Wert in
mt_count. Ubliche Werte fur die Schreibdichte sind:
0x00 Implicit 0x11 QIC-525
0x04 QIC-11 0x12 QIC-1350
0x05 QIC-24 0x13 DDS
0x0F QIC-120 0x14 Exabyte EXB-8200
0x10 QIC-150 0x15 Exabyte EXB-8500
MTWEOF Schreibe mt_count Filemarks.
MTWSM Schreibe mt_count Setmarks.
MTSETDRVBUFFER
Setzt verschiedene Laufwerks- und Treiber-spezifische Optionen,
gemaB der in mt_count kodierten Bits.
Setzen der Laufwerk- und Treiber-Optionen.
Diese bestehen aus dem Setzen des Laufwerk-"buffer"-Modus, 6
Treiber-Optionen vom Typ Boolean und dem "Schreibschwellwert
des Treiberpuffers." (buffer write threshold); d.h. ab dem
Erreichen des Schreibschwellwertes wird das Band physikalisch
beschrieben. Diese Parameter konnen nur vor vor dem ersten
Schreiben auf Laufwerkes benutzt werden, und bleiben auch beim
SchlieBen und Offnen des Devices bestehen. Eine einzelne
Anweisung kann dabei (a) nur den "buffer" Modi, und/oder (b)
die Schalter von Typ Boolean, und/oder (c) den
Schreibschwellwert des Treiberbuffers betreffen.
Ein Wert von 0 in den "high-order 4 Bits" muss zum Setzen des
Laufwerk "buffer" Modi benutzt werden. Folgende Modi sind
moglich:
0 Das Laufwerk gibt erst einen GOOD Status zuruck, wenn
die Datenblocke auf das Medium geschrieben wurden.
1 Mit groBer Wahrscheinlichkeit wird das Laufwerk nach
einer WRITE Anweisung einen GOOD Status zuruckgeben,
wenn alle Daten in den internen Laufwerksbuffer
ubertragen sind.
2 Mit groBer Wahrscheinlichkeit wird das Laufwerk nach
einer WRITE Anweisung einen GOOD Status zuruckgeben,
wenn (a) alle Daten in den internen Laufwerkspuffer
ubertragen sind, und (b) alle in dem Laufwerkspuffer
zwischengespeicherten Daten auf das Medium geschrieben
wurden.
Der Schwellwert fur das Schreiben wird uber mt_count
kontrolliert.
mt_count kann wie folgende Werte beinhalten:
MT_ST_WRITE_THRESHOLD
Logisch -ODER- Verknupft mit einem BLOCK Zahler in den unteren 28 Bits.
(logically ORed with a block count in the low 28 bits.) Der Block-
Zahler wird mit 1024-Byte groBen Blocken bewertet, nicht mit der
wirklichen physikalischen GroBe auf dem Medium. Die SchwellwertgroBe
darf, wie vorher beschrieben, die interne TreiberbuffergroBe nicht
uberschreiten.
Setzen der Boolean'schen Operatoren:
false=falscher Aussagewert, true=wahrer Aussagewert
mt_count kann dabei folgende Werte annehmen.
Die KONSTANTE MT_ST_BOOLEANS logisch ODER verknupft mit einer der
folgenden Kombinationen. Jede nicht benutzte Option wird "false"
gesetzt.
MT_ST_BUFFER_WRITES (Default: true)
Buffer all write operations. Wird diese Option auf
"false" gesetzt und das Laufwerk arbeitet mit einer
festen BlockgroBe, dann mussen alle Schreiboperationen
mit einem vielfachen der BlockgroBe durchgefuhrt werden.
Diese Option muss "false" gesetzt werden um ein sicheres
Schreiben auf "Multi-Volumes" zu ermoglichen.
MT_ST_ASYNC_WRITES (Default: true)
Wird diese Option auf "true" gesetzt, wird eine
Schreiboperation direkt beendet, ohne auf das "wirklich
physikalische" Schreiben auf das Medium zu warten. Ein
wirkliches SCSI "WRITE" Kommando wird erst nach erreichen
der SchreibschwellwertgroBe des Treiberbuffers abgesetzt.
Eine mogliche Fehlermeldung wird erst nach der nachsten
Anweisung zuruckgegeben. Diese Option muss "false"
gesetzt werden um ein sicheres Schreiben auf "Multi-
Volumes" zu ermoglichen.
MT_ST_READ_AHEAD (Default: true)
Diese Option wird benutzt um die Zwischenspeicherung von
Daten (buffering) und das "Weiterlesen" (read-ahead)
Merkmal des Treibers zu setzen. Wird diese Option auf
"false" gesetzt und das Laufwerk arbeitet mit einer
festen BLOCK GroBe, dann mussen alle Schreiboperationen
mit einem vielfachen der BLOCK GroBe durchgefuhrt werden.
MT_ST_TWO_FM (Default: false)
Diese Option beeinflusst das Treiberverhalten beim
SchlieBen einer Datei. Normalerweise wird ein einzelnes
"Filemark" geschrieben, wenn diese Option auf "true"
gesetzt wird werden zwei "Filemarks" geschrieben und
danach an den Anfang des Zweiten zuruckgesetzt.
(backspace over the second one)
Achtung: Seit QIC Bandlaufwerke nicht mehr in der Lage
sind "FILEMARKS" zu uberschreiben, sollte die Option
"true" gesetzt werden. Diese Art von Bandlaufwerken
versucht das "Ende der geschrieben Daten" durch einen
Test auf freie Stellen auf dem Medium zu finden, anstatt
nach zwei aufeinanderfolgende "FILEMARKS" zu suchen.
MT_ST_DEBUGGING (Default: false)
Diese Option wird benutzt um die "Debug Meldungen" des
Treibers einzuschalten. (Unterstutzung nur, wenn beim
Treiberubersetzen DEBUG gesetzt war.)
MT_ST_FAST_EOM (Default: false)
Diese Option fuhrt dazu, das die MTEOM Anweisung direkt
zum Laufwerk geschickt wird; Moglicherweise ein
Geschwindigkeitsvorteil der aber dazu fuhren kann, das
der Treiber die aktuelle Dateinummer (die normalerweise
durch die MTIOCGET Abfrage herausgefunden werden kann)
"vergiBt". Wenn MT_ST_FAST_EOM den Status "false" hat,
wird der Treiber eine MTEOM Anfrage mit "forward spacing
over files" beantworten.
BEISPIEL
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);
MTIOCGET - Get status
Diese Abfrage benotigt ein Argument von Typ (struct mtget *). Der
Treiber gibt eine EIO Fehlermeldung zuruck, wenn das Laufwerk die
Operation nicht ausfuhrt.
/* Aufbau von MTIOCGET - "Besorge dir den Bandlaufwerk Status"
Anweisung
struct mtget {
long mt_type;
long mt_resid;
/* Die folgenden Register sind laufwerksabhangig */
long mt_dsreg;
long mt_gstat;
long mt_erreg;
/* Die folgenden zwei Felder werden nicht immer benutzt */
daddr_t mt_fileno;
daddr_t mt_blkno;
};
mt_type 11
Es gibt viele "Header" Definitionen fur mt_type, aber der
aktuelle Treiber unterstutzt generell nur die Typen MT_ISSCSI1
(Generic SCSI-1 tape) und MT_ISSCSI2 (Generic SCSI-2 tape).
mt_resid
ist immer Null. (Nicht implementiert fur SCSI Bandlaufwerke.)
mt_dsreg
Gibt die aktuellen Laufwerk-Einstellungen fur die BlockgroBe (in
den unteren 24 Bits) und der Schreibdichte (in den hohen 8 Bits)
aus. Diese Felder sind durch MT_ST-BLKSIZE_SHIFT,
MT_ST_BLKSIZE_MASK, MT_ST_DENSITY_SHIFT, und MT_ST_DENSITY_MASK
definiert.
mt_gstat
Gibt generelle (laufwerksunabhangige) Status-Informationen
zuruck. Das "Header File" definiert die Makros zum Testen
dieser Status Bits.
GMT_EOF(x): Das Bandposition ist direkt nach einem "FILEMARK".
(Immer "false" nach einer MTSEEK Anweisung.
GMT_BOT(x): Die Bandposition ist : Anfang des ersten Datei
(Immer "false" nach einer MTSEEK Anweisung.
GMT_EOT(x): Eine Bandanweisung hat das physikalische Ende des
Bandes erreicht (EOT).
GMT_SM(x): Die Bandposition ist: Am Ende eines "SETMARK."
(Immer "false" nach einer MTSEEK Anweisung.
GMT_EOD(x): Die Bandposition ist: Am Ende der letzten
geschriebenen Datei.
GMT_WR_PROT(x): Das Laufwerk(Medium??) ist schreibgeschutzt.
Bei manchen Laufwerken kann damit auch gemeint sein, das das
Laufwerk kein Schreiben auf das aktuelle Medium unterstutzt.
GMT_ONLINE(x): Das letzte open() hat festgestellt, das ein
Medium eingelegt ist und das Laufwerk fur Anweisungen
"empfanglich" ist.
GMT_D_6250(x), GMT_D_1600(x), GMT_D_800(x): Diese "generelle"
Status Information gibt die aktuelle Schreibdichte fur
9-Spuren (nur 1/2" Laufwerke) aus
GMT_DR_OPEN(x): Kein Band eingelegt
GMT_IM_REP_EN(x): Unverzuglicher Report Mode (nicht unterstutzt)
Immediate report mode (not supported).
mt_erreg
Das einzigste definierte Feld in mt_erreg ist der "
Fehlerzahler" (Es werden nur behobene Fehler gezahlt) in den
unteren 16 Bits (wie durch MT_ST_SOFTERR_SHIFT und
MT_ST_SOFTERR_MASK definiert). Da dieser Zahler keinem Standard
unterliegt (also von Laufwerk zu Laufwerk unterschiedlich sein
kann), wird er nicht oft benutzt.
mt_fileno
Ausgabe der aktuellen Datei/Archiv Nummer (zero-based). Dieser
Wert wird auf -1 gesetzt, wenn er nicht bekannt ist. (Z.B. nach
einer MTBSS oder MTSEEK Anweisung).
mt_blkno
Ausgabe der Blocknummer der/des aktuellen Datei/Archiv (zero-
based). Dieser Wert wird auf -1 gesetzt, wenn er nicht bekannt
ist. (Z.B. nach einer MTBSF, MTBSS oder MTSEEK Anweisung).
MTIOCPOS - Get tape position
Diese Anfrage benutzt ein Argument vom Typ (struct mtpos *) und gibt
die aktuelle Band-Blocknummer aus. Diese ist Laufwerksabhangig und
nicht die gleiche wie mt_blkno welche durch Verwendung von MTIOCGET.
zuruckgegeben wird. Das Laufwerk muss ein SCSI-2 Laufwerk sein,
welches die READ POSITION Anweisung unterstutzt (Laufwerksabhangige
Adresse), oder ein Tandberg-kompatibles SCSI-1 Laufwerk (Tandberg,
Archive, Viper, Wangtek, ... ).
/* structure for MTIOCPOS - mag tape get position command */
struct mtpos {
long mt_blkno; /* aktielle Block Nummer */
};
R"UCKGABEWERT
EIO Die Anweisung wurde nicht zu Ende gefuhrt.
ENOSPC Eine Schreiboperation konnte nicht beendet werden, da das
Ende des Mediums (EOT) erreicht wurde.
EACCES Es wurde Versucht ein schreibgeschutztes Medium zu
beschreiben. (Dieser Fehler wird noch nicht bei einem
open().) erkannt!)
ENXIO Beim Offen wurde festgestellt, das das Laufwerk nicht
vorhanden ist.
EBUSY Das Laufwerk wird schon benutzt, oder der Treiber konnte
keine Daten "Puffern". (or the driver was unable to
allocate a buffer)
EOVERFLOW Es wurde versucht einen Block mit einer variablen Lange
zu lesen, der groBer als der interne Treiber "Puffer"
war.
EINVAL Einem ioctl() Aufruf wurde ein unzulassiges Argument
ubergeben, oder die angeforderte BlockgroBe ist
unzulassig.
ENOSYS Unbekannter ioctl()-Aufruf.
COPYRIGHT
Copyright (C) 1995 Robert K. Nichols - englisches Original Copyright
(C) 1996 Christian Schmidt - deutsche Ubersetzung
Dieses Manual darf sowohl in der Original, als auch in der deutschen
Version mit folgender Einschrankung benutzt, Vervielfaltigt und
Vertrieben werden. Dieser Copyright-Abschnitt und der "Header" muss
unverandert in allen Kopien beibehalten werden. Ferner sind die
zusatzlichen Vereinbarungen im "Header" dieses Manuals zu beachten.
SIEHE AUCH:
mt(1).