Provided by: manpages-de_4.27.0-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 oder neuer
       bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

       Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte  eine  E-Mail  an  die
       Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org.

Linux man-pages 6.9.1                              2. Mai 2024                                             st(4)