rmt Special File

Zweck

Bietet Zugriff auf den Einheitentreiber für Massenspeichermedien mit sequenziellem Zugriff.

Beschreibung

Magnetbänder werden hauptsächlich für Sicherung, Dateiarchivierungen und anderen Offlinespeicher verwendet. Der Zugriff auf Bänder erfolgt über die Gerätedateien /dev/rmt0, ..., /dev/rmt255 . Die R im Gerätedateinamen gibt den Unformatiert -Zugriff über die zeichenorientierte Gerätedateischnittstelle an. Eine Bandeinheit eignet sich nicht gut für die Kategorie einer Blockeinheit. Daher werden nur Zeichenschnittstellengerätedateien bereitgestellt.

Gerätedateien , die den einzelnen Bandeinheiten zugeordnet sind, legen fest, welche Aktion beim Öffnen oder Schließen ausgeführt wird. Diese Dateien geben auch für anwendbare Einheiten vor, mit welcher Dichte Daten auf Band geschrieben werden sollen. Die folgende Tabelle enthält die Namen dieser Gerätedateien und ihre entsprechenden Merkmale:

Tabelle 1 Merkmale der Gerätedatei des Bandlaufwerks
Name der Gerätedatei Merkmale
/dev/rmt*
Rewind-on-Close (Zurückspulen beim Schließen)
Ja
Nachspannen-auf-Öffnen
Nein
Byte pro Zoll
Dichteeinstellung #1
/dev/rmt*.1
Rewind-on-Close (Zurückspulen beim Schließen)
Nein
Nachspannen-auf-Öffnen
Nein
Byte pro Zoll
Dichteeinstellung #1
/dev/rmt*.2
Rewind-on-Close (Zurückspulen beim Schließen)
Ja
Nachspannen-auf-Öffnen
Ja
Byte pro Zoll
Dichteeinstellung #1
/dev/rmt*.3
Rewind-on-Close (Zurückspulen beim Schließen)
Nein
Nachspannen-auf-Öffnen
Ja
Byte pro Zoll
Dichteeinstellung #1
/dev/rmt*.4
Rewind-on-Close (Zurückspulen beim Schließen)
Ja
Nachspannen-auf-Öffnen
Nein
Byte pro Zoll
Dichteeinstellung #2
/dev/rmt*.5
Rewind-on-Close (Zurückspulen beim Schließen)
Nein
Nachspannen-auf-Öffnen
Nein
Byte pro Zoll
Dichteeinstellung #2
/dev/rmt*.6
Rewind-on-Close (Zurückspulen beim Schließen)
Ja
Nachspannen-auf-Öffnen
Ja
Byte pro Zoll
Dichteeinstellung #2
/dev/rmt*.7
Rewind-on-Close (Zurückspulen beim Schließen)
Nein
Nachspannen-auf-Öffnen
Ja
Byte pro Zoll
Dichteeinstellung #2
  1. Die Werte für die Dichteeinstellung #1 und die Dichteeinstellung #2 stammen aus Bandlaufwerkattributen, die mit SMIT festgelegt werden können. Normalerweise wird die Dichteeinstellung #1 auf die höchstmögliche Dichte für das Bandlaufwerk gesetzt, während die Dichteeinstellung #2 auf eine niedrigere Dichte gesetzt ist. Zur Einhaltung dieses Musters sind jedoch keine Dichteeinstellungen erforderlich.
  2. Der Dichtewert (Byte pro Zoll) wird ignoriert, wenn eine Magnetbandeinheit verwendet wird, die keine Mehrfachdichten unterstützt. Bei Bandlaufwerken, die mehrere Dichtewerte unterstützen, gilt der Dichtewert nur beim Schreiben auf das Band. Beim Lesen nimmt das Laufwerk standardmäßig die Dichte an, mit der das Band beschrieben wird.
  3. Die meisten Bandlaufwerke verwenden eine Blockgröße von 512 Byte. Das Bandlaufwerk 8mm verwendet eine Mindestblockgröße von 1024 Byte. Wenn Sie SMIT verwenden, um die Blockgröße zu verringern, wird Speicherplatz verschwendet.

Hinweise zur Verwendung

Die meisten Bandoperationen werden mit den Subroutinen Öffnen, Lesen, Schreibenund Schließen implementiert. Für Diagnosezwecke ist jedoch die Subroutine OpenX erforderlich.

Subroutinen öffnen und schließen

Beim Schließen einer Datei nach dem Schreiben ist Vorsicht geboten. Wenn die Anwendung die gerade geschriebenen Daten umkehrt, werden keine Dateimarkierungen geschrieben. Bei Bandeinheiten, die eine Blockaktualisierung ermöglichen, werden jedoch eine oder zwei Dateimarkierungen beim Schließen der Einheit geschrieben, es sei denn, die Anwendungsspeicherbereiche werden in die umgekehrte Richtung verschoben oder die Bandposition wird an den Bandanfang (BOT) zurückgegeben. (Die Anzahl der Dateimarkierungen hängt vom speziellen Dateityp ab.)

Bei Jobs mit mehreren Bändern muss die Gerätedatei für jedes Band geöffnet und geschlossen werden. Der Benutzer darf nicht fortfahren, wenn die Gerätedatei geöffnet und das Band geändert wurde.

Die Subroutine OpenX ist hauptsächlich für die Verwendung durch die Diagnosebefehle und -dienstprogramme vorgesehen. Für die Ausführung ist die entsprechende Berechtigung erforderlich. Die Ausführung dieser Subroutine ohne die erforderliche Berechtigung führt zu einem Rückgabewert von -1, wobei die globale Variable errno auf EPERM gesetzt wird.

Lese-und Schreibsubroutinen

Beim Öffnen zum Lesen oder Schreiben wird davon ausgegangen, dass das Band wie gewünscht positioniert ist. Wenn das Band ohne Zurückspulen beim Schließen geöffnet wird (/dev/rmt*.1) und eine Datei geschrieben wird, wird beim Schließen des Bands eine einzelne Dateimarkierung geschrieben. Wenn das Band als "rewind-on-close" (/dev/rmt *) geöffnet und eine Datei geschrieben wird, wird beim Schließen des Bands eine doppelte Dateimarkierung geschrieben. Wenn das Band ohne Zurückspulen beim Schließen geöffnet und aus einer Datei gelesen wird, wird das Band beim Schließen nach der Dateiendemarkierung positioniert, die auf die gerade gelesenen Daten folgt.

Durch die spezielle Auswahl der Datei RMT können mehrere Dateibänder erstellt werden.

Obwohl auf Bänder über Zeichenschnittstellen-Gerätedateien zugegriffen wird, muss die Anzahl Byte, die für eine Lese-oder Schreiboperation erforderlich ist, ein Vielfaches der für die Magnetbandeinheit definierten Blockgröße sein. Wenn sich das Bandlaufwerk im variablen Blockmodus befindet, geben Leseanforderungen für weniger als die Blockgröße des Bands die Anzahl der angeforderten Byte zurück und setzen die globale Variable Fehlernummer auf den Wert 0. In diesem Fall muss der Parameter Erweiterung der Subroutine Readx auf TAPE_SHORT_LESENgesetzt werden.

Während eines Lesevorgangs wird die Satzgröße als Anzahl der gelesenen Byte bis zur angegebenen Puffergröße zurückgegeben. Wenn eine EOF-Bedingung auftritt, wird ein Lesevorgang mit einer Länge von null zurückgegeben, wobei das Band nach dem EOF positioniert wird.

Eine EOM-Bedingung (End-of-Media), die während einer Lese-oder Schreiboperation festgestellt wurde, führt zur Rückgabe der Anzahl Byte, die erfolgreich bereit oder geschrieben wurden. Wenn nach Erreichen des EOM ein Schreibversuch unternommen wird, wird ein Wert -1 von zurückgegeben, wobei die globale Variable errno auf den Wert ENXIO gesetzt wird. Wenn ein Lesevorgang versucht wird, nachdem die Einheit das EOM erreicht hat, wird ein Lesevorgang mit einer Länge von null zurückgegeben. Aufeinanderfolgende Lesevorgänge geben weiterhin eine Leseoperation mit der Länge null zurück.

Datenpufferung mit einer Bandeinheit: Einige Bandeinheiten enthalten einen Datenpuffer, um die Datenübertragungsgeschwindigkeit beim Schreiben auf Band zu maximieren. Eine an das Band gesendete Schreiboperation wird als abgeschlossen zurückgegeben, wenn die Daten an den Datenpuffer der Bandeinheit übertragen werden. Die Daten im Puffer werden dann asynchron auf Band geschrieben. Infolgedessen erhöht sich die Datenübertragungsgeschwindigkeit, da der Host nicht auf den Abschluss der Ein-/Ausgabe warten muss.

Der Bandeinheitentreiber stellt zwei Modi bereit, um die Verwendung dieser Datenpuffer zu erleichtern. Der nicht gepufferte Modus bewirkt, dass Schreibvorgänge auf Band den Datenpuffer umgehen und direkt auf Band gehen. Im gepufferten Modus werden alle Schreibsubroutinen als abgeschlossen zurückgegeben, wenn die Übertragungsdaten erfolgreich in den Bandeinheitenpuffer geschrieben wurden. Der Einheitentreiber führt keine Flushoperation für den Datenpuffer aus, bis die Gerätedatei geschlossen wird oder eine EOM-Bedingung auftritt.

Wenn während der Ausführung im gepufferten Modus eine EOM-Bedingung auftritt, versucht die Einheit, den Einheitendatenpuffer zu leeren. Die Residuenzahl kann die Schreibübertragungslänge im gepufferten Modus überschreiten. In einigen Fällen kann das Spülen von Restdaten das Band von der Spule ausführen. Beide Fälle gelten als Fehler und führen zu einem Rückgabewert von -1, wobei die globale Variable errno auf EIO gesetzt wird. Diese Fehler können erfordern, dass der Benutzer im nicht gepufferten Modus ausgeführt wird.

rmt Spezielle Hinweise zu Dateien: Fehler, die beim Lesen oder Schreiben auf Band zu einem Zurücksetzen der Einheit führen, erfordern das Schließen der Gerätedatei und den Neustart des Jobs. Alle Befehle, die nach Auftreten dieser Bedingung und bis zum Schließen der speziellen Datei ausgegeben werden, führen zu einem Rückgabewert von -1, wobei die globale Variable errno auf EIO gesetzt wird. Fehler vom Typ "Nicht zurückgesetzt" (d. h. Datenträger-oder Hardwarefehler) führen dazu, dass das Band an der Stelle positioniert bleibt, an der der Fehler aufgetreten ist.

Bei Jobs mit mehreren Bändern muss die Gerätedatei für jedes Band geöffnet und geschlossen werden. Der Benutzer darf nicht fortfahren, wenn die Gerätedatei geöffnet und das Band geändert wurde.

Ein vom Bandeinheitentreiber empfangenes Signal führt dazu, dass der aktuelle Befehl abgebrochen wird. Infolgedessen stoppt die Anwendung zeitaufwendige Befehle (z. B. eine Löschoperation), ohne die Stromversorgung des Laufwerks zu stoppen oder auf eine Zeitlimitüberschreitung zu warten.

Die Verwendung von Null (0) als Blockgrößenparameter gibt an, dass die Blockgröße eine variable Länge hat.

ioctl, Subroutine

Eine einzelne ioctl -Operation, IOCINFO, ist für alle Einheitentreiber definiert, die die Subroutine ioctl verwenden. Für die Gerätedatei RMT wurde auch die Operation STIOKTOP definiert.

IOCINFO ioctl: Die ioctl-Operation IOCINFO gibt eine Struktur zurück, die in der Datei /usr/include/sys/devinfo.h definiert ist.

Die Operation STIOCTOP ioctl: Die STIOKTOP -Operation 'ioctl' stellt Befehlsausführungsoperationen wie Löschen und Nachspannen bereit. Der Parameter für die Subroutine ioctl unter Verwendung der Operation STIOCTOP gibt die Adresse einer stop -Struktur an, wie in der Datei /usr/include/sys/tape.h definiert.

Die Operation, die in derst_opFeld in der Stoppen -Struktur wird ausgeführtst_countZeiten, mit Ausnahme von Operationen zum Zurückspulen, Löschen und Nachspannen. Folgende Operationen sind verfügbar:

Element Beschreibung
DATENSTROM Zurückspulen.
STOFFL (LAGER) Spulen Sie das Band zurück und entladen Sie es. Ein Band muss eingelegt werden, damit die Einheit erneut verwendet werden kann.
STERASE (BEGRIFF) Band löschen; am Ladepunkt verlassen.
STRASSE Band nachspannen; am Ladepunkt belassen.
STWEOF Schreiben und Dateiendemarkierung.
STFSF Vorwärtsbereichsdatei.
STFSR Vorwärts-Speicherbereichsdatensatz.
STRF Umgekehrte Speicherbereichsdatei.
STRSR Umkehrspeicherbereichsdatensatz.
STDEOF Inaktivieren Sie die Dateiendeprüfung.
Anmerkung: Die Verwendung des Befehls STDEOF ermöglicht es einer Anwendung, über das Bandende hinaus zu schreiben. Wenn Sie die Dateiendeprüfung mit dem Befehl STDEOF inaktivieren, liegt es in der Verantwortung der Anwendung, sich vor Fehlerbedingungen zu schützen, die bei Verwendung dieses Befehls auftreten können.
Anmerkung: Die Ausführung der vorherigen Befehle hängt von der jeweiligen Bandeinheit ab und von den unterstützten Befehlen. Wenn der Befehl auf einem bestimmten Gerät nicht unterstützt wird, wird der Wert -1 zurückgegeben, wobei die globale Variable errno auf EINVAL gesetzt wird.

Fehlercodes

Neben den allgemeinen Fehlercodes, die für ioctl-, Öffnen-, Lesen-und Schreiben -Subroutinen aufgelistet sind, können auch die folgenden spezifischen Fehlercodes auftreten:

Element Beschreibung
EAGAIN Es wurde versucht, eine Einheit zu öffnen, die bereits geöffnet ist.
EBUSY Die Zieleinheit ist von einem anderen Initiator reserviert.
EINVAL O_ANWENDE wird als Modus zum Öffnen bereitgestellt.
EINVAL Ein NByte -Parameter für eine Lesen -oder Schreiben -Subroutine ist kein ebenes Vielfaches der Blockgröße.
EINVAL Ein Parameter für die Subroutine ioctl ist ungültig.
EINVAL Die angeforderte ioctl-Operation wird auf der aktuellen Einheit nicht unterstützt.
EIO Leerzeichen vorwärts oder rückwärts nicht möglichst_countDatensätze, bevor eine EOM-Bedingung oder Dateimarkierung auftritt.
EIO Leerzeichen vorwärts oder rückwärts nicht möglichst_countDateimarkierungen, bevor eine EOM-Bedingung auftritt.
EMEDIEN Die Bandeinheit hat einen nicht behebbaren Datenträgerfehler festgestellt.
ENOMEM Die Anzahl der Byte, die für einen Lesevorgang eines Satzes variabler Länge auf Band angefordert wurden, ist kleiner als die tatsächliche Größe (in Byte) des Satzes variabler Länge.
ENOTREADY (BEREIT) Das Laufwerk enthält kein Band oder das Laufwerk ist nicht bereit.
ENXIO Es wurde versucht, eine Schreiboperation auszuführen, während sich das Band am Bandende befand.
EPERM Die angeforderte Subroutine erfordert entsprechende Berechtigung.
EZEITDOUT Ein Befehl hat das zulässige Zeitlimit überschritten.
EWRPROTECT Es wurde versucht, eine Operation zum Lesen/Schreiben auf einem schreibgeschützten Band zu öffnen.
EWRPROTECT Eine ioctl-Operation, die sich auf Datenträger auswirkt, wurde auf einem schreibgeschützten Band versucht.