|
|
ST
Section: Gerätedateien (4) Updated: Januar 1996 Index
Return to Main Contents
BEZEICHNUNG
st - SCSI tape device (Bandlaufwerke, Streamer)
UEBERSICHT
#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 für die Benutzung der
diversen SCSI Bandlaufwerke zur Verfügung. Im aktuellen Entwicklungsstand
übernimmt der Treiber die Kontrolle über alle erkannten Laufwerke auf die nur
sequentiell
zugegriffen werden kann.
Der
st
Treiber benutzt die dabei die
major device
Nummer 9.
Zusätzlich werden generell zwei
minor device
Nummern benutzt. Eine grundsätzliche
minor device
Nummer,
n,
die sequentiell beim Erkennen der Laufwerke vergeben wird, und eine
lqnicht zurückspulenrq Device Nummer,
(n+ 128).
Wenn eine Bandeinheit über die grundsätzliche Device Nummer,
n,
geöffnet wird, so wird nach dem Schließen ein
REWIND Kommando an die Bandeinheit geschickt; Bei der Benutzung
der Bandeinheit über die lqnicht zurückspulenrq Device Nummer,
(n+ 128).
halt nicht ;-)
Optionen wie die Schreibdichte oder Blockgröße sind nicht in die
minor device
Nummern implementiert.
Diese Optionen müssen durch die Verwendung von
ioctl()
Aufrufen gesetzt werden
Sie werden erst nach Schließen und einem darauffolgenden lqWieder-Öffnenrq
der lqDevice-Dateirq aktiv.
Devices werden üblicherweise 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 kein vergleichbares
BLOCK
Device.
Das
Character
(zeichenorientierte) Device bietet standartmäßig das Zwischenspeichern
von Zeichen (buffering) und das lq weiterlesenrq (read-ahead) Merkmal
an.
Ferner unterstützt es zufälliges Lesen und Schreiben, welches
nur durch den internen Treiber Buffer begrenzt ist.
(Standard: 32768 bytes)
Die Buffergröße kann sowohl als Kernelparameter, sowie auch im
Quelltext lqfestrq vergeben werden.
Üblicherweise wird ein Soft-Link
/dev/tape
eingerichtet, der auf das im System vorhandene und zu benutzende
Device zeigt.
IOCTLS
Der Treiber unterstützt drei
ioctl()
Aufrufe. Alle dem
st
Treiber unbekannten Aufrufe werden an den SCSI Treiber
übergeben.
Die folgenden Definitionen sind aus
<linux/mtio.h>:
MTIOCTOP - Ausführen einer Band Anweisung
Diese Operation benötigt ein Argument vom Typ
(struct mtop *).
Nicht alle Laufwerke unterstützen jede der möglichen Anweisungen.
Der Treiber gibt ein EIO zurück, wenn das Laufwerk die Anweisung
nicht unterstützt.
Anm. des Übersetzers
Das Folgende ist nur sehr schwer 100%ig ins Deutsche zu übersetzen,
da so mancher Begriff aus dem Englischen geläufiger ist, als seine
deutsche Übersetzung.
Da ich nicht in der lqIBM Übersetzerabteilungrq arbeite, habe ich
hier und dort das englische Original stehen lassen.
(Hauptsächlich bei sehr kurzen Beschreibungen)
Bei lqUnverstehbarkeitrq des folgenden bitte ich auf die Original
(englischsprachige) man-page zu st.4 zurückzugreifen.
Speziell für diesen Abschnitt würde der Übersetzter sich über
Rückmeldungen der lqpraktischen Anwenderrq freuen. ;-)
Für eine gesunde Kritik einfach eine Mail an
c.schmidt@ius.gun.de
/* Struktur für MTIOCTOP - Anweisungen an das Bandlaufwerk */
struct mtop {
short mt_op; /* Welche Anweisung (Auflistung folgt) */
int mt_count; /* Wie oft diese Anweisung ausführen */
};
Bandlaufwerk; mögliche Anweisungen:
- MTBSF
-
Zurückspulen über
mt_count
Filemarks.
- MTBSFM
-
Zurückspulen über
mt_count
Filemarks.
Positionieren des Mediums(Schreibkopf?) auf die EOT Seite des
letzten Filemarks.
- MTBSR
-
Zurückspulen über
mt_count
records (tape blocks) BLOCKS.
- MTBSS
-
Zurückspulen über
mt_count
setmarks.
- MTEOM
-
lqGeh an das Ende der aufgezeichenten Daten...rq Zum Anhängen
von Dateien/Archiven.
- MTERASE
-
Band löschen.
- MTFSF
-
Vorspulen über
mt_count
Filemarks.
- MTFSFM
-
Vorspulen über
mt_count
Filemarks.
Positionieren des Mediums(Schreibkopfes?) auf die BOT Seite des
letzen Filemarks.
- MTFSR
-
Vorspulen über
mt_count
records (tape blocks) BLOCKS.
- MTFSS
-
Vorspulen über
mt_count
Setmarks.
- MTNOP
-
Nichts machen - Als Seiteneffekt wird der Treiberbuffer
gelöscht. Kann möglicherweise in Verbindung mit
MTIOCGET benutzt werden.
- MTOFFL
-
Zurückspulen und Bandlaufwerk stoppen.
- MTRESET
-
Reset drive.
- MTRETEN
-
Retension tape.
(Medium nicht auswerfen?)
- MTREW
-
Zurückspulen.
- MTSEEK
-
Suche nach dem BLOCK mit der Nummer
mt_count.
Diese Anweisung erfordert ein SCSI-2 Bandlaufwerk, welches das LOCATE
Kommando unterstützt (Laufwerkspezifische Addresse),
oder ein Tandberg-kompatibles SCSI-1 Laufwerk.
(Tandberg, Archive, Viper, Wangtek, ... ).
Die BLOCK NUMMER ist dabei Laufwerk spezifisch und kann möglicherweise
über den Rückgabewert von MTIOCPOS herausgefunden werden.
- MTSETBLK
-
Setzen der BLOCK Grö0e auf den Wert, der in
mt_count
angegeben ist.
Ein BLOCK Größe von 0 setzt das Laufwerk auf variable BLOCK Größe.
- MTSETDENSITY
-
Setzen der Schreibdichte (tape density) auf den Wert in
mt_count.
Übliche Werte für 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
-
Set various drive and driver options according to bits encoded in
mt_count.
-
Setzen der Laufwerk und Treiber Optionen.
-
Diese bestehen aus dem Setzen des Laufwerk lqbufferrq Modi,
6 Treiber Optionen vom Typ Boolean und dem lqSchreibschwellwert des
Treiberbuffers.rq (buffer write threshold); d.h. ab dem Erreichen
des Schreibschwellwertes wird das Band physikalisch beschrieben.
Diese Parameter können nur vor vor dem ersten Schreiben auf Laufwerkes benutzt
werden, und bleiben auch beim Schliessen und Öffenen des Devices bestehen.
Eine einzelne Anweisung kann dabei (a) nur den lqbufferrq
Modi, und/oder (b) die Schalter von TYP Boolean, und/oder (c) den
Schreibschwellwert des Treiberbuffers betreffen.
-
Ein Wert von 0 in den lqhigh-order 4 Bitsrq muss zum Setzen des
Laufwerk lqbufferrq Modi benutzt werden.
Folgende Modi sind möglich:
-
- 0
-
Das Laufwerk gibt erst einen GOOD Status zurück, wenn die
Datenblöcke auf das Medium geschrieben wurden.
- 1
-
Mit großer Wahrscheinlichkeit wird das Laufwerk nach einer WRITE
Anweisung einen GOOD Status zurückgeben, wenn alle Daten
in den internen Laufwerksbuffer übertragen sind.
- 2
-
Mit großer Wahrscheinlichkeit wird das Laufwerk nach einer WRITE
Anweisung einen GOOD Status zurückgeben, wenn (a) alle Daten
in den internen Laufwerksbuffer übertragen sind, und (b) alle in dem
Laufwerksbuffer zwischengespeicherten Daten auf das Medium geschrieben
wurden.
-
Der Schwellwert für das Schreiben wird über
mt_count
kontrolliert.
mt_count
kann wie folgende Werte beinhalten:
MT_ST_WRITE_THRESHOLD
Logisch -ODER- Verknüpft mit einem BLOCK Zähler in den unteren
28 Bits.
(logically ORed with a block count in the low 28 bits.)
Der BLOCK Zähler wird mit 1024-Byte großen BLÖCKEN bewertet,
nicht mit der wirklichen physikalischen Größe auf dem Medium.
Die Schwellwertgröße darf, wie vorher beschrieben, die interne
Treiberbuffergröße nicht überschreiten.
-
Setzen der Booleanaqschen Operatoren:
false=falscher Aussagewert, true=wahrer Aussagewert
mt_count
kann dabei folgende Werte annehmen.
Die KONSTANTE
MT_ST_BOOLEANS
logisch ODER verknüpft mit einer der folgenden Kombinationen.
Jede nicht benutzte Option wird lqfalserq gesetzt.
-
-
- MT_ST_BUFFER_WRITES (Default: true)
-
-
Buffer all write operations.
Wird diese Option auf lqfalserq gesetzt und das Laufwerk arbeitet
mit einer festen BLOCK Größe, dann müssen alle Schreiboperationen
mit einem vielfachen der BLOCK Größe durchgeführt werden.
Diese Option muss lqfalserq gesetzt werden um ein sicheres
Schreiben auf lqMulti-Volumesrq zu ermöglichen.
- MT_ST_ASYNC_WRITES (Default: true)
-
Wird diese Option auf lqtruerq gesetzt, wird eine Schreiboperation
direkt beendet, ohne auf das lqwirklich physikalischerq Schreiben
auf das Medium zu warten.
Ein wirkliches SCSI lqWRITErq Kommando wird erst nach erreichen
der Schreibschwellwertgröße des Treiberbuffers abgesetzt.
Eine mögliche Fehlermeldung wird erst nach der nächsten Anweisung
zurückgegeben.
Diese Option muss lqfalserq gesetzt werden um ein sicheres
Schreiben auf lqMulti-Volumesrq zu ermöglichen.
- MT_ST_READ_AHEAD (Default: true)
-
Diese Option wird benutzt um die Zwischenspeicherung von Daten(buffering)
und das lqWeiterlesenrq (read-ahead) Merkmal des Treibers zu setzen.
Wird diese Option auf lqfalserq gesetzt und das Laufwerk arbeitet
mit einer festen BLOCK Größe, dann müssen alle Schreiboperationen
mit einem vielfachen der BLOCK Größe durchgeführt werden.
- MT_ST_TWO_FM (Default: false)
-
Diese Option beinflußt das Treiberverhalten beim Schließen einer Datei.
Normalerweise wird ein einzelnes lqFilemarkrq geschrieben, wenn
diese Option auf lqtruerq gesetzt wird werden zwei lqFilemarksrq
geschrieben und danach an den Anfang des Zweiten zurückgesetzt.
(backspace over the second one)
-
Achtung:
Seid QIC Bandlaufwerke nicht mehr in der Lage sind lqFILEMARKSrq
zu überschreiben, sollte die Option lqtruerq gesetzt werden.
Diese Art von Bandlaufwerken versucht das lqEnde der geschrieben Datenrq
durch einen Test auf freie Stellen auf dem Medium zu finden, anstatt
nach zwei aufeinanderfolgende lqFILEMARKSrq zu suchen.
- MT_ST_DEBUGGING (Default: false)
-
Diese Option wird benutzt um die lqDebug Meldungenrq des Treibers
einzuschalten.(Unterstützung nur, wenn beim Treiberübersetzen
DEBUG gesetzt war.)
- MT_ST_FAST_EOM (Default: false)
-
Diese Option führt dazu, das die MTEOM Anweisung direkt zum
Laufwerk geschickt wird; Möglicherweise ein Geschwindigkeitsvorteil
der aber dazu führen kann, das der Treiber die aktuelle Dateinummer
(die normalerweise durch die MTIOCGET Abfrage herausgefunden
werden kann) lqvergißtrq.
Wenn MT_ST_FAST_EOM den Status lqfalserq hat, wird der Treiber
eine MTEOM Anfrage mit lqforward spacing over filesrq
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 benötigt ein Argument von Typ
(struct mtget *).
Der Treiber gibt eine EIO Fehlermeldung zurück, wenn das Laufwerk
die Operation nicht ausführt.
/* Aufbau von MTIOCGET - lqBesorge dir den Bandlaufwerk Statusrq
Anweisung
struct mtget {
long mt_type;
long mt_resid;
/* Die folgenden Register sind Laufwerksabhängig */
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 lqHeaderrq Definitionen für
mt_type,
aber der aktuelle Treiber unterstützt generell nur die Typen
MT_ISSCSI1 (Generic SCSI-1 tape) und MT_ISSCSI2 (Generic SCSI-2 tape).
- mt_resid
-
ist immer Null. (Nicht implementiert für SCSI Bandlaufwerke.)
- mt_dsreg
-
Gibt die aktuellen Laufwerk Einstellungen für die BLOCK Grösse (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 ( Laufwerksunabhängige) Status Informationen zurück.
Das lqHeader Filerq definiert die Makros zum Testen dieser
Status Bits.
-
-
GMT_EOF(x):
- Das Bandposition ist direkt nach einem lqFILEMARKrq.
(Immer lqfalserq nach einer MTSEEK Anweisung.
-
GMT_BOT(x):
- Die Bandposition ist : Anfang des ersten Datei
(Immer lqfalserq 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 lqSETMARK.rq
(Immer lqfalserq nach einer MTSEEK Anweisung.
-
GMT_EOD(x):
- Die Bandposition ist: Am Ende der letzten geschriebenen Datei.
-
GMT_WR_PROT(x):
- Das Laufwerk(Medium??) ist schreibgeschützt.
Bei manchen Laufwerken kann damit auch gemeint sein, das das
Laufwerk kein Schreiben auf das aktuelle Medium unterstützt.
-
GMT_ONLINE(x):
- Das letzte
open()
hat festgestellt, das ein Medium eingelegt ist und das Laufwerk
für Anweisungen lqempfänglichrq ist.
-
GMT_D_6250(x), GMT_D_1600(x), GMT_D_800(x):
- Diese lqgenerellerq Status Information gibt die aktuelle
Schreibdichte für 9-Spuren (nur ½" Laufwerke) aus
-
GMT_DR_OPEN(x):
- Kein Band eingelegt
-
GMT_IM_REP_EN(x):
- Unverzüglicher Report Mode (nicht unterstützt)
Immediate report mode (not supported).
- mt_erreg
-
Das einzigste definierte Feld in
mt_erreg
ist der lq Fehlerzählerrq (Es werden nur behobene Fehler gezählt)
in den unteren 16 Bits (wie durch
MT_ST_SOFTERR_SHIFT and MT_ST_SOFTERR_MASK definiert).
Da dieser Zähler 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 BLOCK Nummer 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-Block Nummer aus. Diese ist Laufwerksabhängig
und nicht die gleiche wie
mt_blkno
welche durch Verwendung von
MTIOCGET.
zurückgegeben wird.
Das Laufwerk muß ein SCSI-2 Laufwerk sein, welches die READ POSITION
Anweisung unterstützt (Laufwerksabhängige 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ÜCKGABEWERT
- EIO
-
Die Anweisung wurde nicht zuende geführt.
- ENOSPC
-
Eine Schreiboperation konnte nicht beendet werden, da das Ende des
Mediums (EOT) erreicht wurde.
- EACCES
-
Es wurde Versucht ein schreibgeschütztes Medium zu beschreiben.
(Dieser Fehler wird noch nicht bei einem
open().)
erkannt!)
- ENXIO
-
Beim Öffen wurde festgestellt, das das Laufwerk nicht vorhanden ist.
- EBUSY
-
Das Laufwerk wird schon benutzt, oder der Treiber konnte keine
Daten lqPuffernrq.
(or the driver was unable to allocate a buffer)
- EOVERFLOW
-
Es wurde versucht einen Block mit einer variablen Länge zu lesen,
der größer als der interne Treiber lqPufferrq war.
- EINVAL
-
Einem
ioctl()
Aufruf wurde ein unzulässiges Argument übergeben, oder die
angeforderte Block Größe ist unzulässig.
- ENOSYS
-
Unbekannter
ioctl().
Aufruf
COPYRIGHT
Copyright © 1995 Robert K. Nichols - englisches Original
Copyright © 1996 Christian Schmidt - deutsche Übersetzung
Dieses Manual darf sowohl in der Original, als auch in der deutschen
Version mit folgender Einschränkung benutzt, Vervielfältigt und Vertrieben
werden. Dieser Copyright Abschnitt und der lqHeaderrq muß unverändert
in allen Kopien beibehalten werden. Ferner sind die zusätzlichen Vereinbarungen
im lqHeaderrq dieses Manuals zu beachten.
SIEHE AUCH:
mt(1).
Index
- BEZEICHNUNG
-
- UEBERSICHT
-
- BESCHREIBUNG
-
- IOCTLS
-
- MTIOCTOP - Ausführen einer Band Anweisung
-
- MTIOCGET - Get status
-
- MTIOCPOS - Get tape position
-
- RÜCKGABEWERT
-
- COPYRIGHT
-
- SIEHE AUCH:
-
|