Provided by: manpages-de_4.18.1-1_all bug

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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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⟩.