Provided by: manpages-de_4.27.0-1_all 

BEZEICHNUNG
st - SCSI-Bandgerät
ÜBERSICHT
#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 diverse SCSI-Bandlaufwerke zur Verfügung.
Derzeit übernimmt der Treiber die Kontrolle über alle erkannten Geräte, auf die nur »sequenziell«
zugegriffen werden kann. Der st-Treiber verwendet die Major-Gerätenummer 9.
Jedes Gerät verwendet acht Minor-Gerätenummern. Die untersten fünf Bits in den Minor-Nummern werden
nacheinander in der Reihenfolge der Erkennung zugeordnet. Im Kernel 2.6 werden die Bits über den acht
untersten Bits mit den fünf untersten Bits verkettet, um die Nummer des Bands zu bilden. Die
Minor-Nummern lassen sich in zwei Gruppen von vier Nummern aufteilen: die Haupt-Minor-Gerätenummern für
automatisches Rückspulen und die Gerätenummern ohne Rücklauf (n + 128, no-rewind). Mit der
Hauptgerätenummer geöffnete Geräten wird ein REWIND-Befehl gegeben, wenn sie geschlossen werden. Diesen
Befehl erhalten mit der no-rewind-Gerätenummer geöffnete Geräte nicht. (Beachten Sie, dass ein
Rückspulgerät mit mt nicht positioniert werden kann: das Band wird nach dem mt-Befehl zurückgespult und
der nächste Befehl hat als Ausgangspunkt den Anfang des Bands.)
Innerhalb jeder Gruppe stehen vier Minor-Nummern zur Verfügung, um Geräte mit unterschiedlichen
Eigenschaften zu definieren (Blockgröße, Kompression, Dichte usw.). Wenn das System startet, steht nur
das erste Gerät zur Verfügung. Die anderen drei werden standardmäßig aktiviert, wenn die Merkmale
definiert sind (siehe unten). (Durch die Änderung von Kompilierungs-Konstanten ist es möglich, die
Balance zwischen der maximalen Anzahl von Bandlaufwerken und der Anzahl der Minor-Nummern für jedes
Laufwerk zu ändern. Die Standard-Zuweisung ermöglicht die Steuerung von 32 Bandlaufwerken. Beispielsweise
ist es möglich, bis zu 64 Bandlaufwerke mit zwei Minor-Nummern für verschiedene Optionen zu steuern.)
Geräte werden üblicherweise mit
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
erstellt. Es gibt kein entsprechendes blockorientiertes Gerät.
Der Treiber benutzt einen internen Puffer, der groß genug sein muss, um mindestens einen Band-Block
aufzunehmen. Vor Linux 2.1.121 wird der Puffer als ein zusammenhängender Block zugewiesen. Dies
beschränkt die Blockgröße auf den größten zusammenhängenden Speicherblock, den der Kernel-Allocator
vergeben kann. Die Grenze ist derzeit 128 kB für 32-Bit-Architekturen und 256 kB für
64-Bit-Architekturen. In neueren Kerneln teilt der Treiber den Puffer in mehrere Teile, wenn nötig.
Standardmäßig ist die maximale Anzahl der Teile 16. Das bedeutet, dass die maximale Blockgröße sehr groß
ist (2 MB, wenn die Zuteilung von 16 Blöcken zu je 128 kB gelingt).
Die interne Puffergröße des Treibers wird durch eine Compiler-Konstante bestimmt, die aber mit einer
Kernel-Startoption überschrieben werden kann. Darüber hinaus versucht der Treiber, zur Laufzeit im
Bedarfsfall einen größeren temporären Puffer bereitzustellen. Es ist aber durchaus möglich, dass zur
Laufzeit die Zuteilung von großen, zusammenhängenden Speicherblöcken fehlschlägt. Daher ist es ratsam,
sich nicht zu sehr auf dynamische Pufferzuweisung in Linux vor 2.1.121 zu verlassen. (Das gilt auch für
das bedarfsweise Laden des Treibers mit kerneld oder kmod.)
Der Treiber unterstützt nicht speziell bestimmte Marken oder Geräte. Nach dem Systemstart werden die
Geräte-Optionen von der Firmware des Laufwerks bestimmt. Wenn z. B. die Firmware Blöcke fester Größe
wählt, arbeitet das Bandlaufwerk im Festblock-Modus. Die Optionen können mit expliziten Aufrufen von
ioctl(2) geändert werden und bleiben in Kraft, wenn das Gerät geschlossen und wieder geöffnet wird. Das
Einstellen der Optionen betrifft Geräte sowohl mit als auch ohne Rückspulfunktion.
Für die verschiedenen Geräte innerhalb der Vierer-Untergruppen können unterschiedliche Optionen angegeben
werden. Die Optionen werden wirksam, wenn das Gerät geöffnet wird. Zum Beispiel kann der
Systemadministrator festlegen, dass ein Gerät mit einer bestimmten Blockgröße im Festblock-Modus schreibt
und ein anderes Gerät mit variabler Blockgröße betrieben wird (wenn das Laufwerk beide Modi unterstützt).
Wenn das Gerät mit Band-Partionen umgehen kann, wird das vom Treiber unterstützt. (Beachten Sie, dass
Band-Partitionen nichts mit Festplatten-Partitionen zu tun haben. Ein partitioniertes Band kann als
mehrere logische Bänder innerhalb eines Mediums angesehen werden.) Die Unterstützung von Partitionen muss
mit einem Aufruf von ioctl(2) aktiviert werden. Der Treiber merkt sich im Fall von Partitionswechseln die
Positionen auf dem Band. Die Partition für die nachfolgenden Bandoperationen wird mit einem Aufruf von
ioctl(2) ausgewählt. Der Wechsel der Partition wird zusammen mit der nächsten Bandoperation ausgeführt,
um unnötige Bandbewegungen zu vermeiden. Die maximale Anzahl der Partitionen auf einem Band wird durch
eine Compiler-Konstante (ursprünglich vier) definiert. Der Treiber enthält einen ioctl(2), der ein Band
mit einer oder zwei Partitionen formatieren kann.
Das Gerät /dev/tape wird üblicherweise als harter oder symbolischer Link auf das Standard-Bandgerät des
Systems angelegt.
Seit Linux 2.6.2 exportiert der Treiber im sysfs-Verzeichnis /sys/class/scsi_tape die vorhandenen Geräte
und einige ihrer Parameter.
Datenübertragung
Der Treiber unterstützt den Betrieb sowohl im Festblock-Modus als auch im variablen Modus (wenn das
Laufwerk dazu imstande ist). Im Festblock-Modus schreibt das Laufwerk Blöcke der angegebenen Größe, wobei
die Blockgröße nicht abhängig von der Byteanzahl der Schreib-Systemaufrufe ist. Bei variabler Blockgröße
wird für jeden Schreibaufruf ein Block geschrieben, die Byteanzahl des Aufrufs bestimmt die Größe des
entsprechenden Blocks auf dem Band. Beachten Sie, dass die Blöcke auf dem Band keine Informationen über
den Schreibmodus enthalten: Beim Lesen ist das einzig Wichtige, Befehle zu verwenden, die Blockgrößen auf
dem Band erkennen und danach handeln können.
Bei variabler Blockgröße muss die Anzahl gelesener Bytes nicht exakt zur Bandblockgröße passen. Wenn die
Byteanzahl größer ist als der nächste Block auf dem Band, gibt der Treiber die Daten zurück und die
Funktion liefert die aktuelle Blockgröße. Wenn der Block größer ist als die angeforderte Anzahl von
Bytes, wird ein Fehler zurückgegeben.
Im Festblock-Modus kann die Anzahl der zu lesenden Bytes beliebig sein, wenn Pufferung aktiviert ist,
oder ein Vielfaches der Blockgröße des Bandes, wenn Pufferung deaktiviert ist. Linux vor 2.1.121
ermöglicht Schreibvorgänge mit beliebiger Byteanzahl bei aktivierter Pufferung. In allen anderen Fällen
(Linux vor 2.1.121 mit deaktivierter Pufferung oder neuere Kernel) muss die Anzahl der zu schreibenden
Bytes ein Vielfaches der Blockgröße des Bands sein.
In Linux 2.6 versucht der Treiber direkte Transfers zwischen dem Benutzerpuffer und dem Gerät. Wenn das
nicht möglich ist, wird der Treiber seinen internen Puffer verwenden. Die Gründe dafür, keine direkten
Transfers zu verwenden, umfassen falsche Ausrichtung des Benutzerpuffers (Vorgabe sind 512 Byte, aber
diese kann durch den HBA-Treiber geändert werden), eine oder mehrere vom SCSI-Adapter nicht erreichbare
Seiten des Benutzerpuffers, etc.
Wenn die letzte Bandoperation vor dem Schließen ein Schreibvorgang war, wird automatisch eine Dateimarke
geschrieben.
Wenn beim Lesen eine Dateimarke angetroffen wird, geschieht folgendes: Wenn noch Daten im Puffer sind,
wenn die Dateimarke gefunden wird, werden die gepufferten Daten zurückgegeben. Der nächste Leseaufruf
gibt null Byte zurück. Der übernächste Leseaufruf gibt Daten aus der nächsten Datei zurück. Das Ende der
aufgezeichneten Daten wird durch Rückgabe von null Byte für zwei aufeinanderfolgende Leseaufrufe
signalisiert. Ein dritter Aufruf gibt einen Fehler zurück.
Ioctls
Der Treiber unterstützt drei verschiedene ioctl(2)-Aufrufe. Alle vom st-Treiber nicht erkannten Aufrufe
werden an den SCSI-Treiber weitergereicht. Die folgenden Definitionen wurden aus
/usr/include/linux/mtio.h entnommen:
MTIOCTOP — führt eine Bandoperation aus
Diese Operation verarbeitet 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.
/* Struktur für den MTIOCTOP-Befehl an das Bandlaufwerk */
struct mtop {
short mt_op; /* im Folgenden definierte Operationen */
int mt_count; /* Anzahl der Operationen */
};
Operationen für den Normalbetrieb von Bandlaufwerken:
MTBSF um mt_count Dateimarken zurückspringen
MTBSFM um mt_count Dateimarken zurückspringen; Medium auf die EOT-Seite der letzten Dateimarke
positionieren
MTBSR um mt_count Datensätze (Bandblöcke) zurückspringen
MTBSS um mt_count »Setmarks« zurückspringen
MTCOMPRESSION
Wenn mt_count ungleich Null ist, wird die Kompression der Banddaten durch das Laufwerk aktiviert.
Ist mt_count gleich Null, wird die Kompression deaktiviert. Dieser Befehl verwendet die »MODE page
15«, welche von den meisten digitalen Magnetbandgeräten (Digital Audio Tape, DAT) unterstützt
wird.
MTEOM positioniert auf das Ende der aufgezeichneten Daten (um Dateien anzufügen)
MTERASE
Das Band wird gelöscht, Mit Linux 2.6 wird »kurz gelöscht« (short erase), wenn das Argument gleich
Null ist. Anderenfalls wird alles gelöscht (erase all).
MTFSF um mt_count Dateimarken vorwärtsspringen
MTFSFM um mt_count Dateimarken vorwärtsspringen; das Medium auf die BOT-Seite der letzten Dateimarke
setzen
MTFSR um mt_count Datensätze (Bandblöcke) vorwärtsspringen
MTFSS um mt_count »Setmarks« vorwärtsspringen
MTLOAD führt den SCSI-Ladebefehl aus. Für einige HP-Bandwechsler steht eine spezielle Option zur
Verfügung. Wenn mt_count gleich der Konstante MT_ST_HPLOADER_OFFSET plus einer Zahl ist, wird die
Zahl an das Laufwerk gesendet, um den Bandwechsler zu steuern.
MTLOCK den Einschub des Bandlaufwerkes verriegeln
MTMKPART
formatiert das Band in ein oder zwei Partitionen. Wenn mt_count positiv ist, gibt es die Größe der
Partition 1 an und Partition 2 umfasst den Rest des Bands. Wenn mt_count Null ist, wird auf dem
Band eine Partition angelegt. Seit Linux 4.6 legt ein negativer mt_count die Größe der Partition 0
fest und der Rest des Bandes umfasst Partition 1. Die physische Reihenfolge der Partitionen hängt
vom Laufwerk ab. Dieser Befehl ist nur für Laufwerke zulässig, wenn die Unterstützung von
Partitionen für das Laufwerk aktiviert ist (siehe MT_ST_CAN_PARTITIONS weiter unten).
MTNOP Nichts tun — als Seiteneffekt wird der Puffer des Treibers geleert. Die Option sollte genutzt
werden, bevor der Status mit MTIOCGET ausgelesen wird.
MTOFFL zurückspulen und Bandlaufwerk vom Netz nehmen
MTRESET
Laufwerk zurücksetzen
MTRETEN
Band neu spannen
MTREW zurückspulen
MTSEEK sucht nach dem Bandblock mit der Nummer mt_count. Diese Anweisung erfordert ein
SCSI-2-Bandlaufwerk, welches den LOCATE-Befehl unterstützt (gerätespezifische Adresse) oder ein
Tandberg-kompatibles SCSI-1-Laufwerk (Tandberg, Archive, Viper, Wangtek, etc.). Die Blocknummer
sollte vorher von MTIOCPOS zurückgegeben worden sein, wenn gerätespezifische Adressen verwendet
werden.
MTSETBLK
setzt die Blockgröße des Laufwerks auf den Wert von mt_count. Eine Blockgröße von 0 setzt das
Laufwerk auf variable Blockgröße.
MTSETDENSITY
setzt die Schreibdichte (tape density) auf den Wert in mt_count. Die Kodierung der von einem
Laufwerk unterstützten Schreibdichte finden Sie in der Laufwerksdokumentation.
MTSETPART
Die aktive Partition wird auf mt_count gesetzt. Die Partitionen werden von Null gezählt. Dieser
Befehl ist nur für ein Laufwerk zulässig, wenn die Partitionsunterstützung für das Laufwerk
aktiviert ist (siehe MT_ST_CAN_PARTITIONS weiter unten).
MTUNLOAD
führt den SCSI-Entladebefehl aus. (Das Band wird nicht ausgeworfen).
MTUNLOCK
entriegelt den Einschub des Bandlaufwerks
MTWEOF schreibt mt_count Dateimarken
MTWSM schreibt mt_count »Setmarks«
Magnetband-Aktionen für das Setzen von Geräte-Optionen (für den Superuser):
MTSETDRVBUFFER
setzt diverse Geräte- und Treiberoptionen gemäß den in mt_count kodierten Bits. Diese umfassen den
Puffer-Modus des Laufwerks, einen Satz von booleschen Treiberoptionen, den Schreibschwellwert des
Treiberpuffers, Vorgabewerte für Blockgröße und Schreibdichte, Zeitschranken
(Zeitüberschreitungen, erst seit Kernel 2.1). Eine einzelne Aktion kann nur ein Element dieser
Aufzählung beeinflussen (die booleschen Werte werden dabei als ein Wert angesehen).
Ein Wert mit Nullen in den oberen (high-order) vier Bits wird zum Setzen des Puffermodus des
Laufwerks verwendet. Die Modi sind:
0 Das Laufwerk gibt erst dann einen GOOD-Status zurück, wenn die Datenblöcke tatsächlich auf
das Medium geschrieben wurden.
1 Das Laufwerk darf den Status GOOD für Schreibbefehle melden, sobald alle Daten in den
internen Laufwerkspuffer übertragen wurden.
2 Das Laufwerk darf den Status GOOD für Schreibbefehle melden, sobald (a) alle Daten in den
internen Laufwerkspuffer übertragen wurden und (b) alle in dem Laufwerkspuffer (aus
verschiedenen Aufrufen) zwischengespeicherten Daten erfolgreich auf das Medium geschrieben
wurden.
Der Schreibschwellwert wird über mt_count gesteuert: mt_count muss in den unteren 28 Bit die
Konstante MT_ST_WRITE_THRESHOLD bitweise ODER-verknüpft mit einer Blockzahl enthalten. Der
Blockzähler zählt 1024 Byte große Blöcke, nicht die physische Blockgröße auf dem Band. Der
Schwellwert kann die interne Puffergröße des Treibers nicht überschreiten (siehe BESCHREIBUNG).
Um die booleschen Optionen zu setzen oder zu löschen, muss der Wert in mt_count entweder eine der
Konstanten MT_ST_BOOLEANS, MT_ST_SETBOOLEANS, MT_ST_CLEARBOOLEANS oder MT_ST_DEFBOOLEANS bitweise
ODER-verknüpft mit einer beliebigen gewünschten Kombination der folgenden Optionen enthalten. Mit
MT_ST_BOOLEANS können die Optionen auf die Werte in den entsprechenden Bits gesetzt werden. Mit
MT_ST_SETBOOLEANS können die Optionen gezielt eingestellt und mit MT_ST_DEFBOOLEANS gelöscht
werden.
Die Standardoptionen für ein Bandgerät werden mit MT_ST_DEFBOOLEANS gesetzt. Ein nicht aktives
Bandgerät (z.B. ein Gerät mit den Minor-Nummern 32 oder 160) wird aktiviert, wenn seine
Standardoptionen das erste Mal definiert werden. Ein aktiviertes Gerät erbt von dem beim
Systemstart aktivierten Gerät alle nicht explizit gesetzten Optionen.
Die booleschen Aktionen sind:
MT_ST_BUFFER_WRITES (Vorgabewert: true)
puffert im Festblock-Modus alle Schreibaktionen. Hat diese Option den Wert false und das
Laufwerk verwendet eine feste Blockgröße, müssen alle Schreibaktionen mit einem Vielfachen
der Blockgröße durchgeführt werden. Diese Option muss auf false gesetzt werden, um
zuverlässig Archive über mehrere Bänder hinweg zu erstellen.
MT_ST_ASYNC_WRITES (Vorgabewert: true)
Ist diese Option auf true gesetzt, geben Schreibaktionen umgehend die Kontrolle an das
aufrufenden Programm zurück, ohne auf den Transfer der Daten zum Laufwerk zu warten, wenn
die Daten in den Puffer des Treibers passen. Der Schreibschwellwert bestimmt den
»Füllstand« des Puffers, ab dem ein neuer SCSI-»write«-Befehl erteilt wird. Alle
Fehlermeldungen des Laufwerks werden gesammelt und bei der nächsten Laufwerksaktion
ausgegeben. Diese Option muss auf false gesetzt werden, um zuverlässig Archive über mehrere
Bänder hinweg zu erstellen.
MT_ST_READ_AHEAD (Vorgabewert: true)
Diese Option veranlasst den Treiber, im Festblock-Modus Daten vorausschauend zu lesen
(read-ahead) und die gelesenen Daten zwischenzuspeichern (read buffering). Wird diese
Option auf false gesetzt und das Laufwerk arbeitet mit einer festen Blockgröße, müssen alle
Leseaktionen mit einem Vielfachen der Blockgröße durchgeführt werden.
MT_ST_TWO_FM (Vorgabewert: false)
Diese Option beeinflusst das Treiberverhalten beim Schließen einer Datei. Normalerweise
wird eine einzelne Dateimarke geschrieben. Wird diese Option auf »true« gesetzt, schreibt
der Treiber zwei Dateimarken und springt zum zweiten.
Achtung: Weil QIC-Bandlaufwerke nicht in der Lage sind, Dateimarken zu überschreiben,
sollte die Option für diese nicht auf true gesetzt werden. Diese Laufwerke erkennen das
Ende der geschriebenen Daten nicht an zwei aufeinanderfolgenden Dateimarken, sondern an
unbeschriebenen Bandbereichen. Die Mehrzahl der anderen aktuellen Laufwerke erkennen
ebenfalls das Ende des Datenbereichs und die Verwendung von zwei Dateimarken ist
normalerweise nur dann notwendig, wenn Bänder mit anderen Systemen ausgetauscht werden.
MT_ST_DEBUGGING (Vorgabewert: false)
Diese Option bewirkt, dass der Treiber diverse Debug-Meldungen ausgibt. (Sie wirkt sich nur
aus, wenn beim Kompilieren des Treibers DEBUG ungleich Null definiert war.)
MT_ST_FAST_EOM (Vorgabewert: false)
Diese Option bewirkt, dass die MTEOM-Anweisung direkt zum Laufwerk geschickt wird. Dadurch
wird die Aktion möglicherweise schneller, der Treiber kann aber die aktuelle Dateinummer,
die normalerweise von der MTIOCGET-Anfrage zurückgegeben wird, nicht mehr nachverfolgen.
Wenn MT_ST_FAST_EOM »false« ist, wird der Treiber auf eine MTEOM-Anfrage durch
Vorwärtsspringen über Dateien reagieren.
MT_ST_AUTO_LOCK (Vorgabewert: false)
Ist diese Option auf true gesetzt, wird das Laufwerk verriegelt, wenn die Gerätedatei
geöffnet und entsperrt, wenn sie geschlossen wird.
MT_ST_DEF_WRITES (Vorgabewert: false)
Die Bandoptionen (Blockgröße, Modus, Kompression, etc.) können sich beim Wechsel von einem
an ein Laufwerk angeschlossenen Gerät zu einem anderen an demselben Laufwerk
angeschlossenen Gerät ändern. Die Änderung der Optionen hängt von der Definition der Geräte
ab. Diese Option definiert, wann die Änderungen durch den Treiber mittels SCSI-Befehlen
durchgeführt werden und wann sich auf die Fähigkeiten der Laufwerke zur automatischen
Erkennung verlassen wird. Wenn diese Option false ist, sendet der Treiber die SCSI-Befehle
sofort, wenn das Gerät gewechselt wird. Wenn die Option true ist, werden die SCSI-Befehle
nicht gesendet, bis ein Schreiben beantragt wird. In diesem Fall darf die Firmware des
Laufwerks die Bandstruktur beim Lesen ermitteln und die SCSI-Befehle werden nur benutzt, um
sicherzustellen, dass ein Band nach der richtigen Spezifikation geschrieben wird.
MT_ST_CAN_BSR (Vorgabewert: false)
Wenn Read-Ahead verwendet wird, muss auf dem Band manchmal rückwärts zur richtigen Position
gesprungen werden, wenn das Gerät geschlossen und der SCSI-Befehl für das Rückwärtsspringen
über Datensätze für diesen Zweck verwandt wird. Einige ältere Laufwerke können diesen
Befehl nicht zuverlässig verarbeiten. Mit dieser Option kann der Treiber angewiesen werden,
diesen Befehl nicht zu verwenden. Das bedeutet also, dass mit Read-Ahead und
Festblock-Modus das Band möglicherweise nicht korrekt in einer Datei positioniert werden
kann, wenn das Gerät geschlossen wird. In Linux 2.6 ist die Standardeinstellung true für
Laufwerke, die SCSI-3 unterstützen.
MT_ST_NO_BLKLIMS (Vorgabewert: false)
Einige Laufwerke akzeptieren den SCSI-Befehl READ BLOCK LIMITS nicht. Wenn diese Option
verwendet wird, wird der Treiber den Befehl nicht verwenden. Der Nachteil ist, dass der
Treiber nicht vor dem Senden von Befehlen prüfen kann, ob die gewählte Blockgröße für das
Laufwerk zulässig ist.
MT_ST_CAN_PARTITIONS (Vorgabewert: false)
Diese Option aktiviert die Unterstützung für mehrere Partitionen auf einem Band. Die Option
gilt für alle mit dem Laufwerk verbundenen Geräte.
MT_ST_SCSI2LOGICAL (Vorgabewert: false)
Diese Option weist den Treiber an, die im SCSI-2-Standard festgelegten logischen
Block-Adressen zu verwenden, wenn er die Aktion »seek« und »tell« durchführt (sowohl mit
den Befehlen MTSEEK und MTIOCPOS als auch beim Wechsel der Band-Partition). Andernfalls
werden die gerätespezifischen Adressen verwendet. Es wird dringend empfohlen, diese Option
zu setzen, wenn das Laufwerk die logischen Adressen unterstützt, weil sie auch Dateimarken
zählen. Es gibt einige Laufwerke, die nur die logischen Block-Adressen unterstützen.
MT_ST_SYSV (Vorgabewert: false)
Wenn diese Option aktiviert ist, verwenden die Bandgeräte die System-V-Semantik.
Andernfalls wird die BSD-Semantik verwendet. Der wichtigste Unterschied zwischen den
Semantiken ist, was passiert, wenn ein zum Lesen verwendetes Gerät geschlossen wird: mit
der System-V-Semantik wird auf dem Band vorwärts über die nächste Dateimarke hinweg
gesprungen, wenn das nicht während der Verwendung des Gerätes geschah. Mit der BSD-Semantik
wird das Band nicht neu positioniert.
MT_NO_WAIT (Vorgabewert: false)
Aktiviert den »sofort«(immediate)-Modus für einige Befehle (z. B. zurückspulen). Es wird
also die Ausführung des Befehls nicht abgewartet.
Ein 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);
Die Standard-Blockgröße für ein Gerät kann mit MT_ST_DEF_BLKSIZE und der Code für die
Standarddichte mit MT_ST_DEFDENSITY eingestellt werden. Die Werte für die Parameter werden mit dem
Aktions-Code ODER-verknüpft.
Mit Linux 2.1.x und neuer können die Zeitüberschreitungswerte mit dem Unterbefehl
MT_ST_SET_TIMEOUT mit der Zeitüberschreitung in Sekunden oder-verknüpft werden. Die großen
Zeitüberschreitungswerte (für Zurückspulen und andere Befehle, die eine lange Zeit dauern können)
kann mit MT_ST_SET_LONG_TIMEOUT eingestellt werden. Die Kernel-Standardwerte sind sehr groß, um
sicherzustellen, dass ein erfolgreich ausgeführter Befehl nicht auf einem beliebigen Laufwerk
gestoppt wird. Aus diesem Grund kann der Treiber selbst als aufgehängt erscheinen, wenn er nur auf
die Zeitüberschreitung wartet. Diese Befehle können verwendet werden, um realistischere Werte für
ein bestimmtes Laufwerk zu setzen. Die für ein Gerät gesetzten Zeitüberschreitungen gelten für
alle an dasselbe Laufwerk angeschlossenen Geräte.
Seit den Linux-Versionen 2.4.19 und 2.5.43 unterstützt der Treiber ein Status-Bit, ob das Laufwerk
eine Reinigung anfordert. Die Methode, mit der das Laufwerk Reinigungsinformationen zurückgibt,
wird mit dem Unterbefehl MT_ST_SEL_CLN festgelegt. Ist der Wert gleich Null, ist das
Reinigungs-Bit immer Null. Wenn der Wert gleich eins ist, werden die im SCSI-3-Standard
festgelegten TapeAlert-Daten in der SCSI-3-Norm verwendet (noch nicht implementiert). Die Werte
von 2 bis 17 sind reserviert. Wenn die niedrigsten acht Bit >= 18 sind, werden Bits aus den
erweiterten Status-Daten verwendet. Die Bits 9-16 bestimmen eine Maske, mit der die betrachteten
Bits ausgewählt werden; die Bits 17-23 geben das Suchmuster an. Wenn das Bitmuster Null ist,
zeigen ein oder mehrere Bits unter der Maske die Reinigungsanfrage an. Wenn das Muster ungleich
Null ist, muss das Muster dem maskierten Sensor-Datenbyte entsprechen.
MTIOCGET — fragt den Status ab
Dieser Aufruf erfordert ein Argument des Typs (struct mtget *).
/* Struktur für den MTIOCGET-Befehl - »mag tape get status« */
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 verwendet. */
daddr_t mt_fileno;
daddr_t mt_blkno;
};
mt_type
Die Header-Datei definiert viele Werte für mt_type, aber der aktuelle Treiber berichtet nur die
generischen Typen MT_ISSCSI1 (Generic SCSI-1 tape) und MT_ISSCSI2 (Generic SCSI-2 tape).
mt_resid
enthält die Nummer der aktuellen Band-Partition.
mt_dsreg
gibt die aktuellen Laufwerkseinstellungen für die Blockgröße (in den unteren 24 Bit) und die
Schreibdichte (in den oberen 8 Bit) 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 allgemeine (laufwerksunabhängige) Statusinformationen aus. Die Header-Datei definiert Makros
für die Auswertung dieser Status-Bits:
GMT_EOF(x)
Die Bandposition ist direkt hinter einer Dateimarke positioniert (immer false nach einer
MTSEEK-Aktion).
GMT_BOT(x)
Das Band ist auf den Anfang der ersten Datei positioniert (immer false nach einer
MTSEEK-Aktion).
GMT_EOT(x)
Eine Bandaktion hat das physische Ende des Bandes erreicht (EOT).
GMT_SM(x)
Das Band ist aktuell auf ein »setmark« positioniert (immer false nach einer MTSEEK-Aktion).
GMT_EOD(x)
Das Band ist an das Ende der geschriebenen Daten positioniert.
GMT_WR_PROT(x)
Das Laufwerk ist schreibgeschützt. Bei manchen Laufwerken kann damit auch gemeint sein,
dass das Laufwerk kein Schreiben auf das aktuelle Medium unterstützt.
GMT_ONLINE(x)
Das letzte open(2) hat festgestellt, dass ein Medium eingelegt ist und das Laufwerk
betriebsbereit ist.
GMT_D_6250(x)
GMT_D_1600(x)
GMT_D_800(x)
Diese »allgemeine« Statusinformation gibt nur die aktuelle Schreibdichte für
9-Spur-½"-Laufwerke aus.
GMT_DR_OPEN(x)
Es ist kein Band eingelegt.
GMT_IM_REP_EN(x)
Sofortberichtmodus - Dieses Bit wird gesetzt, wenn nicht garantiert ist, dass die Daten
physisch auf das Band geschrieben wurden, wenn der Rücksprung aus dem Schreibaufruf
erfolgt. Es wird nur auf Null gesetzt, wenn der Treiber Daten nicht puffert und das
Laufwerk auch nicht puffern soll.
GMT_CLN(x)
Das Laufwerk hat eine Reinigung angefordert; implementiert in Linux seit 2.4.19 und 2.5.43.
mt_erreg
Das einzige definierte Feld in mt_erreg ist der »Fehlerzähler« (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. (Standardmäßig berichten die meisten Laufwerke keine weichen
Fehler, dies kann aber mit einem »SCSI MODE SELECT«-Befehl geändert werden.)
mt_fileno
Ausgabe der aktuellen Dateinummer (nullbasiert). Dieser Wert wird auf -1 gesetzt, wenn die
Dateinummer nicht bekannt ist (z. B. nach MTBSS oder MTSEEK).
mt_blkno
Ausgabe der Blocknummer innerhalb der aktuellen Datei (nullbasiert). Dieser Wert wird auf -1
gesetzt, wenn die Blocknummer nicht bekannt ist (z. B. nach MTBSF, MTBSS oder MTSEEK).
MTIOCPOS — fragt die Bandposition ab
Dieser Aufruf erfordert ein Argument vom Typ (struct mtpos *) und gibt die aktuelle Blocknummer auf dem
Band (aus Sicht des Laufwerks) aus. Diese ist nicht die gleiche wie mt_blkno, welche von MTIOCGET
zurückgegeben wird. Das Laufwerk muss ein SCSI-2-Laufwerk sein und den READ POSITION-Befehl unterstützen
(laufwerksabhängige Adresse) oder ein Tandberg-kompatibles SCSI-1-Laufwerk (Tandberg, Archive, Viper,
Wangtek, usw.).
/* Struktur für den MTIOCPOS-Befehl »get position« */
struct mtpos {
long mt_blkno; /* aktuelle Blocknummer */
};
RÜCKGABEWERT
EACCES Es wurde versucht, auf ein schreibgeschütztes Medium zu schreiben oder es zu löschen. (Dieser
Fehler wird nicht während einem open(2) erkannt.)
EBUSY Das Laufwerk wird schon benutzt oder der Treiber konnte keinen Puffer reservieren.
EFAULT Die Befehlsparameter zeigen auf Speicher, der nicht zum aufrufenden Prozess gehört.
EINVAL Einem ioctl(2)-Aufruf wurde ein ungültiges Argument übergeben oder die angeforderte Blockgröße ist
unzulässig.
EIO Die angeforderte Aktion konnte nicht abgeschlossen werden.
ENOMEM Die Byteanzahl von read(2) ist kleiner als der nächste physische Block auf dem Band. (Vor Linux
2.2.18 und 2.4.0 wurden die zusätzlichen Bytes stillschweigend ignoriert.)
ENOSPC Eine Schreibaktion konnte nicht beendet werden, da das Ende des Mediums (EOT) erreicht wurde.
ENOSYS unbekannter ioctl(2)-Aufruf
ENXIO Beim Öffnen wurde festgestellt, das das Laufwerk nicht vorhanden ist.
EOVERFLOW
Es wurde versucht, einen Block variabler Länge zu lesen oder zu schreiben. Der Block ist größer
als der interne Puffer des Treibers.
EROFS Es wurde versucht, das schreibgeschützte Laufwerk O_WRONLY oder O_RDWR zu öffnen.
DATEIEN
/dev/st*
SCSI-Bandlaufwerke, die automatisch zurückspulen
/dev/nst*
SCSI-Bandlaufwerke, die nicht zurückspulen
ANMERKUNGEN
• Beim Austausch von Daten zwischen Systemen müssen sich beide Systeme auf die physische Blockgröße der
Bänder einigen. Die Parameter eines Laufwerks nach dem Start sind oft nicht diejenigen, die die
meisten Betriebssysteme mit diesen Geräten verwenden. Die meisten Systeme nutzen die Laufwerke mit
variabler Blockgröße, wenn das Laufwerk diesen Modus unterstützt. Dies gilt für die meisten modernen
Laufwerke, einschließlich DAT, 8mm-Helical-Scan-Laufwerke, DLTs usw. Es kann ratsam sein, diese
Laufwerke auch unter Linux mit variabler Blockgröße (d. h. beim Systemstart mit MTSETBLK oder
MTSETDEFBLK diesen Modus festlegen) zu betreiben, zumindest für den Austausch von Daten mit einem
fremden System. Der Nachteil davon ist, dass eine ziemlich große Bandblockgröße verwendet werden muss,
um akzeptable Übertragungsraten auf dem SCSI-Bus zu erreichen.
• Viele Programme (beispielsweise tar(1)) ermöglichen dem Benutzer, die Blockgröße auf der Befehlszeile
anzugeben. Beachten Sie, dass sich das nur dann auf die physische Blockgröße auswirkt, wenn Blöcke
variabler Größe verwendet werden.
• Um SCSI-Bandlaufwerke zu verwenden, müssen der grundlegende SCSI-Treiber, ein SCSI-Adapter-Treiber und
der SCSI-Treiber für Bandlaufwerke entweder im Kernel konfiguriert sein oder als Module geladen
werden. Wenn der SCSI-Laufwerkstreiber nicht vorhanden ist, wird das Laufwerk erkannt, aber die in
dieser Seite beschriebene Bandunterstützung ist nicht verfügbar.
• Der Treiber schreibt Fehlermeldungen auf die Konsole/in die Protokolldatei. Die SENSE-Codes werden
automatisch in Text übersetzt, wenn bei der Kernel-Konfiguration ausführliche SCSI-Meldungen aktiviert
wurden.
• Die interne Pufferung des Treibers ermöglicht guten Durchsatz im Festblock-Modus auch mit kleinen
Bytezahlen für read(2) und write(2). Bei direkten Transfers ist das nicht möglich und kann eine
Überraschung bei der Umstellung auf den 2.6-Kernel verursachen. Die Lösung ist, die Software
anzuweisen, größere Übertragungen zu verwenden (oft werden größere Blöcke benutzt). Wenn das nicht
möglich ist, können direkte Transfers deaktiviert werden.
SIEHE AUCH
mt(1)
Die Datei drivers/scsi/README.st oder Documentation/scsi/st.txt (Kernel >= 2.6) im
Linux-Kernelquelltext-Verzeichnis enthält die aktuellsten Informationen über den Treiber und seine
Konfigurationsmöglichkeiten.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Christian Schmidt <c.schmidt@ius.gun.de>, Martin
Eberhard Schauer <Martin.E.Schauer@gmx.de>, Mario Blättermann <mario.blaettermann@gmail.com> und Helge
Kreutzmann <debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer
bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die
Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org.
Linux man-pages 6.9.1 2. Mai 2024 st(4)