Home :: International :: Manuals :: Howto :: FAQ :: Man Pages :: Email Login

 
 

 

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:

 
 
 
 
Google
  Web Linuxinfor   
 

Home :: Copyright :: Privacy :: Credits :: Get a free Linuxinfor Email Account

Document on this page is part of "Linuxinfor Man Pages in HTML Format: man4". See Index Page for more info about Authorship and Copyright.

1999-2008 Linuxinfor.com. No rights reserved.