Provided by: manpages-de_0.5-4.1ubuntu1_all bug

BEZEICHNUNG

       st - SCSI tape device (Bandlaufwerke, Streamer)

Ü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 die Benutzung
       der  diversen   SCSI-Bandlaufwerke   zur   Verfügung.    Im   aktuellen
       Entwicklungsstand   übernimmt  der  Treiber  die  Kontrolle  über  alle
       erkannten Laufwerke, auf die nur sequentiell zugegriffen  werden  kann.
       Der  st-Treiber  benutzt  die  dabei  die grundsätzliche (major device)
       Gerätenummer 9.

       Zusätzlich  werden  generell   zwei   nebensächliche   (minor   device)
       Gerätenummern   benutzt.   Eine  grundsätzliche  Gerätenummer,  n,  die
       sequentiell beim Erkennen der Laufwerke vergeben wird, und eine  Nummer
       für  ein  nicht-zurückspulendes Gerät, (n+ 128).  Wenn eine Bandeinheit
       über die grundsätzliche Gerätenummer, n, geöffnet wird,  so  wird  nach
       dem Schließen ein REWIND-Kommando an die Bandeinheit geschickt; Bei der
       Benutzung  der  Bandeinheit  über  die  Gerätedatei  für   das   nicht-
       zurückspulende Gerät, (n+ 128).  halt nicht ;-)

       Optionen  wie  die  Schreibdichte  oder  Blockgröße  sind  nicht in den
       Gerätenummern  implementiert.   Diese   Optionen   müssen   durch   die
       Verwendung  von  ioctl()-Aufrufen  gesetzt  werden Sie werden erst nach
       Schließen und einem darauffolgenden  erneuten  Öffnen  der  Gerätedatei
       aktiv.

       Gerätedateien werden üblicherweise mit dem Programm mknod eingetragen

              mknod -m 660 /dev/st0 c 9 0
              mknod -m 660 /dev/st1 c 9 1
              mknod -m 660 /dev/nst0 c 9 128
              mknod -m 660 /dev/nst1 c 9 129

       Es  gibt  hier  keine  vergleichbare block-orientiert Gerätedatei.  Die
       zeichenorientierte     Gerätedatei     bietet     standardmäßig     das
       Zwischenspeichern   von   Zeichen   (buffering)   und   das  Merkmal  “
       weiterlesen” (read-ahead) an.  Ferner unterstützt es  wahlfreies  Lesen
       und  Schreiben,  welches nur durch den internen Treiber-Puffer begrenzt
       ist.  (Standard: 32768 bytes)

       Die  Puffergröße  kann  sowohl  als  Kernelparameter,  sowie  auch   im
       Quelltext “fest” vergeben werden.

       Üblicherweise wird ein Soft-Link /dev/tape eingerichtet, der auf das im
       System vorhandene und zu benutzende Gerät zeigt.

IOCTLS

       Der Treiber unterstützt drei ioctl()-Aufrufe.
        Alle dem st-Treiber unbekannten Aufrufe  werden  an  den  SCSI-Treiber
       übergeben.  Die folgenden Definitionen stammen aus <linux/mtio.h>:

   MTIOCTOP - Ausführen einer Band Anweisung
       Diese Operation benötigt 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.

       Anm. des Übersetzers

       Das  Folgende ist nur sehr schwer 100%ig ins Deutsche zu übersetzen, da
       so mancher  Begriff  aus  dem  Englischen  geläufiger  ist,  als  seine
       deutsche  Übersetzung.   Da  ich nicht in der “IBM Übersetzerabteilung”
       arbeite, habe ich hier und dort das englische Original  stehen  lassen.
       (Hauptsächlich bei sehr kurzen Beschreibungen)

       Bei  “Unverständlichkeit” des Folgenden bitte ich auf die ursprüngliche
       (englischsprachige) man-page zu st(4)  zurückzugreifen.   Speziell  für
       diesen  Abschnitt  würde  der  Übersetzer  sich  über Rückmeldungen der
       “praktischen Anwender” freuen. ;-)

       Für eine gesunde Kritik einfach eine Mail an c.schmidt@ius.gun.de

       /* Struktur für MTIOCTOP - Anweisungen an das Bandlaufwerk  */

       struct mtop {
           short  mt_op;    /* Welche Anweisung (Auflistung folgt) */
           int    mt_count; /* Wie oft diese Anweisung ausführen */
       };

       Bandlaufwerk; mögliche Anweisungen:
       MTBSF         Zurückspulen über mt_count Filemarks.
       MTBSFM        Zurückspulen über mt_count Filemarks.  Positionieren  des
                     Mediums(Schreibkopf?)  auf  die  EOT  Seite  des  letzten
                     Filemarks.
       MTBSR         Zurückspulen über mt_count records (tape blocks)  BLOCKS.
       MTBSS         Zurückspulen über mt_count setmarks.
       MTEOM         “Geh  an  das  Ende  der  aufgezeichenten  Daten ...” Zum
                     Anhängen von Dateien/Archiven.
       MTERASE       Band löschen.
       MTFSF         Vorspulen über mt_count Filemarks.
       MTFSFM        Vorspulen über  mt_count  Filemarks.   Positionieren  des
                     Mediums(Schreibkopfes?)  auf  die  BOT  Seite des letzten
                     Filemarks.
       MTFSR         Vorspulen über mt_count records (tape blocks) BLOCKS.
       MTFSS         Vorspulen über mt_count Setmarks.
       MTNOP         Nichts machen - Als Seiteneffekt wird  der  Treiberpuffer
                     gelöscht.  Kann möglicherweise in Verbindung mit MTIOCGET
                     benutzt werden.
       MTOFFL        Zurückspulen und Bandlaufwerk stoppen.
       MTRESET       Reset drive.
       MTRETEN       Retension tape.  (Medium nicht auswerfen?)
       MTREW         Zurückspulen.
       MTSEEK        Suche nach dem BLOCK  mit  der  Nummer  mt_count.   Diese
                     Anweisung  erfordert ein SCSI-2 Bandlaufwerk, welches das
                     LOCATE   Kommando    unterstützt    (laufwerksspezifische
                     Adresse),  oder ein Tandberg-kompatibles SCSI-1 Laufwerk.
                     (Tandberg, Archive,  Viper,  Wangtek,  ...).   Die  BLOCK
                     NUMMER   ist   dabei   Laufwerk   spezifisch   und   kann
                     möglicherweise  über  den   Rückgabewert   von   MTIOCPOS
                     herausgefunden werden.
       MTSETBLK      Setzen  der  BLOCK  Größe  auf  den Wert, der in mt_count
                     angegeben ist.  Ein BLOCK Größe von 0 setzt das  Laufwerk
                     auf variable BLOCK Größe.
       MTSETDENSITY  Setzen  der  Schreibdichte (tape density) auf den Wert in
                     mt_count.  Übliche Werte für die Schreibdichte sind:
                         0x00 Implicit       0x11 QIC-525
                         0x04 QIC-11         0x12 QIC-1350
                         0x05 QIC-24         0x13 DDS
                         0x0F QIC-120        0x14 Exabyte EXB-8200
                         0x10 QIC-150        0x15 Exabyte EXB-8500
       MTWEOF        Schreibe mt_count Filemarks.
       MTWSM         Schreibe mt_count Setmarks.
       MTSETDRVBUFFER
               Setzt verschiedene Laufwerks- und Treiber-spezifische Optionen,
               gemäß der in mt_count kodierten Bits.
               Setzen der Laufwerk- und Treiber-Optionen.
               Diese  bestehen  aus  dem Setzen des Laufwerk-“buffer”-Modus, 6
               Treiber-Optionen vom Typ Boolean  und  dem  “Schreibschwellwert
               des  Treiberpuffers.”  (buffer  write  threshold);  d.h. ab dem
               Erreichen des Schreibschwellwertes wird das  Band  physikalisch
               beschrieben.   Diese  Parameter  können  nur vor vor dem ersten
               Schreiben auf Laufwerkes benutzt werden, und bleiben auch  beim
               Schließen  und  Öffnen  des  Devices  bestehen.   Eine einzelne
               Anweisung kann dabei (a) nur den “buffer”  Modi,  und/oder  (b)
               die    Schalter    von    Typ   Boolean,   und/oder   (c)   den
               Schreibschwellwert des Treiberbuffers betreffen.

               Ein Wert von 0 in den “high-order 4 Bits” muss zum  Setzen  des
               Laufwerk  “buffer”  Modi  benutzt  werden.   Folgende Modi sind
               möglich:

                   0   Das Laufwerk gibt erst einen GOOD Status  zurück,  wenn
                       die Datenblöcke auf das Medium geschrieben wurden.
                   1   Mit  großer  Wahrscheinlichkeit  wird das Laufwerk nach
                       einer WRITE Anweisung einen  GOOD  Status  zurückgeben,
                       wenn   alle   Daten  in  den  internen  Laufwerksbuffer
                       übertragen sind.
                   2   Mit großer Wahrscheinlichkeit wird  das  Laufwerk  nach
                       einer  WRITE  Anweisung  einen GOOD Status zurückgeben,
                       wenn (a) alle Daten  in  den  internen  Laufwerkspuffer
                       übertragen  sind,  und  (b) alle in dem Laufwerkspuffer
                       zwischengespeicherten Daten auf das Medium  geschrieben
                       wurden.

               Der   Schwellwert   für   das   Schreiben  wird  über  mt_count
               kontrolliert.

       mt_count kann wie folgende Werte beinhalten:

       MT_ST_WRITE_THRESHOLD

       Logisch -ODER- Verknüpft mit einem BLOCK Zähler in den unteren 28 Bits.
       (logically  ORed  with  a  block count in the low 28 bits.)  Der Block-
       Zähler wird mit  1024-Byte  großen  Blöcken  bewertet,  nicht  mit  der
       wirklichen  physikalischen  Größe auf dem Medium.  Die Schwellwertgröße
       darf, wie vorher  beschrieben,  die  interne  Treiberbuffergröße  nicht
       überschreiten.

              Setzen der Boolean'schen Operatoren:

       false=falscher Aussagewert, true=wahrer Aussagewert

       mt_count kann dabei folgende Werte annehmen.

       Die  KONSTANTE  MT_ST_BOOLEANS  logisch  ODER  verknüpft  mit einer der
       folgenden Kombinationen.   Jede  nicht  benutzte  Option  wird  “false”
       gesetzt.

              MT_ST_BUFFER_WRITES  (Default: true)
                     Buffer  all  write  operations.   Wird  diese  Option auf
                     “false” gesetzt  und  das  Laufwerk  arbeitet  mit  einer
                     festen  Blockgröße,  dann  müssen alle Schreiboperationen
                     mit einem vielfachen der Blockgröße durchgeführt  werden.
                     Diese  Option muss “false” gesetzt werden um ein sicheres
                     Schreiben auf “Multi-Volumes” zu ermöglichen.
              MT_ST_ASYNC_WRITES  (Default: true)
                     Wird  diese  Option  auf  “true”   gesetzt,   wird   eine
                     Schreiboperation  direkt  beendet, ohne auf das “wirklich
                     physikalische” Schreiben auf das Medium zu  warten.   Ein
                     wirkliches SCSI “WRITE” Kommando wird erst nach erreichen
                     der Schreibschwellwertgröße des Treiberbuffers abgesetzt.
                     Eine  mögliche  Fehlermeldung wird erst nach der nächsten
                     Anweisung  zurückgegeben.   Diese  Option  muss   “false”
                     gesetzt  werden  um  ein  sicheres  Schreiben auf “Multi-
                     Volumes” zu ermöglichen.
              MT_ST_READ_AHEAD  (Default: true)
                     Diese Option wird benutzt um die Zwischenspeicherung  von
                     Daten  (buffering)  und  das  “Weiterlesen”  (read-ahead)
                     Merkmal des Treibers zu setzen.  Wird  diese  Option  auf
                     “false”  gesetzt  und  das  Laufwerk  arbeitet  mit einer
                     festen BLOCK Größe, dann müssen  alle  Schreiboperationen
                     mit einem vielfachen der BLOCK Größe durchgeführt werden.
              MT_ST_TWO_FM  (Default: false)
                     Diese  Option  beeinflusst  das   Treiberverhalten   beim
                     Schließen  einer Datei.  Normalerweise wird ein einzelnes
                     “Filemark” geschrieben,  wenn  diese  Option  auf  “true”
                     gesetzt  wird  werden  zwei  “Filemarks”  geschrieben und
                     danach  an  den   Anfang   des   Zweiten   zurückgesetzt.
                     (backspace over the second one)

                     Achtung:  Seit  QIC  Bandlaufwerke nicht mehr in der Lage
                     sind “FILEMARKS”  zu  überschreiben,  sollte  die  Option
                     “true”  gesetzt  werden.   Diese  Art  von Bandlaufwerken
                     versucht das “Ende der  geschrieben  Daten”  durch  einen
                     Test  auf freie Stellen auf dem Medium zu finden, anstatt
                     nach zwei aufeinanderfolgende “FILEMARKS” zu suchen.

              MT_ST_DEBUGGING  (Default: false)
                     Diese Option wird benutzt um die  “Debug  Meldungen”  des
                     Treibers  einzuschalten.   (Unterstützung  nur, wenn beim
                     Treiberübersetzen DEBUG gesetzt war.)
              MT_ST_FAST_EOM  (Default: false)
                     Diese Option führt dazu, das die MTEOM  Anweisung  direkt
                     zum   Laufwerk   geschickt   wird;   Möglicherweise   ein
                     Geschwindigkeitsvorteil der aber dazu  führen  kann,  das
                     der  Treiber  die aktuelle Dateinummer (die normalerweise
                     durch die MTIOCGET Abfrage  herausgefunden  werden  kann)
                     “vergißt”.   Wenn  MT_ST_FAST_EOM den Status “false” hat,
                     wird der Treiber eine MTEOM Anfrage mit “forward  spacing
                     over files” beantworten.
              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);

   MTIOCGET - Get status
       Diese  Abfrage  benötigt  ein  Argument  von Typ (struct mtget *).  Der
       Treiber gibt eine EIO  Fehlermeldung  zurück,  wenn  das  Laufwerk  die
       Operation nicht ausführt.

       /* Aufbau von MTIOCGET - “Besorge dir den Bandlaufwerk Status”
       Anweisung
       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 benutzt */
           daddr_t          mt_fileno;
           daddr_t          mt_blkno;
       };

       mt_type 11
              Es  gibt  viele  “Header”  Definitionen  für  mt_type,  aber der
              aktuelle Treiber unterstützt generell nur die  Typen  MT_ISSCSI1
              (Generic SCSI-1 tape) und MT_ISSCSI2 (Generic SCSI-2 tape).
       mt_resid
              ist immer Null.  (Nicht implementiert für SCSI Bandlaufwerke.)
       mt_dsreg
              Gibt die aktuellen Laufwerk-Einstellungen für die Blockgröße (in
              den unteren 24 Bits) und der Schreibdichte (in den hohen 8 Bits)
              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   generelle   (laufwerksunabhängige)   Status-Informationen
              zurück.  Das “Header  File”  definiert  die  Makros  zum  Testen
              dieser Status Bits.
              GMT_EOF(x):  Das  Bandposition ist direkt nach einem “FILEMARK”.
                  (Immer “false” nach einer MTSEEK Anweisung.
              GMT_BOT(x): Die Bandposition  ist  :  Anfang  des  ersten  Datei
                  (Immer “false” nach einer MTSEEK Anweisung.
              GMT_EOT(x):  Eine  Bandanweisung  hat das physikalische Ende des
                  Bandes erreicht (EOT).
              GMT_SM(x):  Die  Bandposition  ist:  Am  Ende  eines  “SETMARK.”
                  (Immer “false” nach einer MTSEEK Anweisung.
              GMT_EOD(x):   Die   Bandposition   ist:   Am  Ende  der  letzten
                  geschriebenen Datei.
              GMT_WR_PROT(x):  Das  Laufwerk(Medium??)  ist  schreibgeschützt.
                  Bei manchen Laufwerken kann damit auch gemeint sein, das das
                  Laufwerk kein Schreiben auf das aktuelle Medium unterstützt.
              GMT_ONLINE(x):  Das  letzte  open()  hat  festgestellt,  das ein
                  Medium  eingelegt  ist  und  das  Laufwerk  für  Anweisungen
                  “empfänglich” ist.
              GMT_D_6250(x),  GMT_D_1600(x),  GMT_D_800(x):  Diese “generelle”
                  Status  Information  gibt  die  aktuelle  Schreibdichte  für
                  9-Spuren (nur ½" Laufwerke) aus
              GMT_DR_OPEN(x): Kein Band eingelegt
              GMT_IM_REP_EN(x): Unverzüglicher Report Mode (nicht unterstützt)
                  Immediate report mode (not supported).
       mt_erreg
              Das  einzigste  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    und
              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 Datei/Archiv Nummer (zero-based).  Dieser
              Wert wird auf -1 gesetzt, wenn er nicht bekannt ist.  (Z.B. nach
              einer MTBSS oder MTSEEK Anweisung).
       mt_blkno
              Ausgabe  der  Blocknummer  der/des aktuellen Datei/Archiv (zero-
              based).  Dieser Wert wird auf -1 gesetzt, wenn er nicht  bekannt
              ist.  (Z.B. nach einer MTBSF, MTBSS oder MTSEEK Anweisung).

   MTIOCPOS - Get tape position
       Diese  Anfrage  benutzt  ein Argument vom Typ (struct mtpos *) und gibt
       die aktuelle Band-Blocknummer aus.   Diese  ist  Laufwerksabhängig  und
       nicht  die  gleiche  wie mt_blkno welche durch Verwendung von MTIOCGET.
       zurückgegeben wird.   Das  Laufwerk  muss  ein  SCSI-2  Laufwerk  sein,
       welches  die  READ  POSITION  Anweisung unterstützt (Laufwerksabhängige
       Adresse), oder  ein  Tandberg-kompatibles  SCSI-1  Laufwerk  (Tandberg,
       Archive, Viper, Wangtek, ... ).

       /* structure for MTIOCPOS - mag tape get position command */
       struct     mtpos {
           long   mt_blkno; /* aktielle Block Nummer */
       };

RÜCKGABEWERT

       EIO           Die Anweisung wurde nicht zu Ende geführt.

       ENOSPC        Eine Schreiboperation konnte nicht beendet werden, da das
                     Ende des Mediums (EOT) erreicht wurde.

       EACCES        Es  wurde  Versucht  ein  schreibgeschütztes  Medium   zu
                     beschreiben.   (Dieser  Fehler  wird noch nicht bei einem
                     open().)  erkannt!)

       ENXIO         Beim Öffen wurde festgestellt,  das  das  Laufwerk  nicht
                     vorhanden ist.

       EBUSY         Das  Laufwerk wird schon benutzt, oder der Treiber konnte
                     keine Daten “Puffern”.  (or  the  driver  was  unable  to
                     allocate a buffer)

       EOVERFLOW     Es  wurde  versucht einen Block mit einer variablen Länge
                     zu lesen, der größer als  der  interne  Treiber  “Puffer”
                     war.

       EINVAL        Einem  ioctl()  Aufruf  wurde  ein  unzulässiges Argument
                     übergeben,   oder   die   angeforderte   Blockgröße   ist
                     unzulässig.

       ENOSYS        Unbekannter ioctl()-Aufruf.

COPYRIGHT

       Copyright  ©  1995  Robert K. Nichols - englisches Original Copyright ©
       1996 Christian Schmidt - deutsche Übersetzung

       Dieses Manual darf sowohl in der Original, als auch  in  der  deutschen
       Version   mit   folgender  Einschränkung  benutzt,  Vervielfältigt  und
       Vertrieben werden.  Dieser Copyright-Abschnitt und  der  “Header”  muss
       unverändert  in  allen  Kopien  beibehalten  werden.   Ferner  sind die
       zusätzlichen Vereinbarungen im “Header” dieses Manuals zu beachten.

SIEHE AUCH:

       mt(1).