Provided by: manpages-de_4.13-4_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ü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  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 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 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 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. 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 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  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 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): 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. (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 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

       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
           anzugeben. 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  5.10  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>, 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.

Linux                                            11. April 2020                                            ST(4)