Provided by: manpages-de_2.5-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. In Kerneln vor 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  mit Kerneln 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 Kernel 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.  Kernel  vor  2.1.121  ermöglichen  Schreibvorgänge  mit  beliebiger  Byteanzahl  bei
       aktivierter Pufferung. In allen anderen  Fällen  (Kernel  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.

       Mit 2.6-Kerneln 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ücksetzen

       MTBSFM        um  mt_count  Dateimarken zurücksetzen; Medium auf die EOT-Seite der letzten
                     Dateimarke positionieren

       MTBSR         um mt_count Datensätze (Bandblöcke) zurücksetzen

       MTBSS         um mt_count »Setmarks« zurücksetzen

       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 einem 2.6er Kernel wird »kurz  gelöscht«  (short
                     erase),  wenn das Argument gleich Null ist. Anderenfalls wird alles gelöscht
                     (erase all).

       MTFSF         um mt_count Dateimarken nach vorn positionieren

       MTFSFM        um  mt_count  Dateimarken  nach  vorn  positionieren;  das  Medium  auf  die
                     BOT-Seite der letzten Dateimarke setzen

       MTFSR         um mt_count Datensätze (Bandblöcke) nach vorn positionieren

       MTFSS         um mt_count »Setmarks« nach vorn positionieren

       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  Kernel Version 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, nur für  Kernel
               2.1  und  neuer).  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 positioniert
                      das Band anschließend an den Anfang der zweiten (backspace over the  second
                      one).

                      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)
                      This  option  causes  the MTEOM operation to be sent directly to the drive,
                      potentially speeding up the operation but causing the driver to lose  track
                      of  the  current  file number normally returned by the MTIOCGET request. If
                      MT_ST_FAST_EOM is false, the driver will respond to  an  MTEOM  request  by
                      forward spacing over files.

               MT_ST_AUTO_LOCK (Vorgabewert: false)
                      Ist  diese  Option auf true gesetzt, wird das Laufwerk verriegelt, wenn das
                      Gerät geöffnet und entsperrt, wenn es 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 das Band manchmal  rückwärts  auf  die
                      richtige  Position gesetzt werden, wenn das Gerät geschlossen und dafür der
                      SCSI-Befehl für das Zurücksetzen über  Datensätze  hinweg  verwendet  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.  Mit  Kernel  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  das  Band vorwärts über die nächste Dateimarke positioniert, 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 den Kerneln 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  Kernel-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
                  unterstützt 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): 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
                      Kerneln 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.

       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  2.2.18  und  2.4.0-test6  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

       1.  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.

       2.  Viele Programme (beispielsweise tar(1)) ermöglichen dem Benutzer, die  Blockgröße  auf
           der  Befehlszeile  festzulegen. Beachten Sie, dass sich das nur dann auf die physische
           Blockgröße auswirkt, wenn Blöcke variabler Größe verwendet werden.

       3.  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.

       4.  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.

       5.  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.

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  4.15  des  Projekts  Linux-man-pages. Eine
       Beschreibung des Projekts, Informationen, wie Fehler  gemeldet  werden  können  sowie  die
       aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die    deutsche   Übersetzung   dieser   Handbuchseite   wurde   von   Christian   Schmidt
       <c.schmidt@ius.gun.de>,  Martin  Eberhard  Schauer  <Martin.E.Schauer@gmx.de>  und   Mario
       Blättermann <mario.blaettermann@gmail.com> 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 <debian-l10n-german@lists.debian.org>.