scsidisk-SAM-Einheitentreiber

Zweck

Unterstützt die folgenden Einheiten: Fibre Channel Protocol for SCSI (FCP), Serial Attached SCSI (SAS) und SCSI Protocol over Internet (iSCSI), CD-ROM (Compact-Disk Read-Only Memory) und optische Einheiten (optischer Speicher) mit Schreib-/Lesezugriff.

Syntax

#include <sys/devinfo.h>
#include <sys/scsi.h>
#include <sys/scdisk.h>
#include <sys/pcm.h>
#include <sys/mpio.h>

Einheitenabhängige Subroutinen

Typische Operationen für Festplatten, CD-ROM-Laufwerke und optische Laufwerke mit Schreib-/Lesezugriff werden mit den Subroutinen Öffnen, Schließen, Lesen, Schreibenund ioctl implementiert. Der Einheitentreiber scsidisk bietet zusätzliche Unterstützung für MPIO-fähige Einheiten.

Subroutinen öffnen und schließen

Die Subroutine open wendet eine Reservierungsrichtlinie an, die auf dem Attribut ODM reserve_policy basiert. Zuvor hat die Subroutine open immer eine SCSI2 -Reserve angewendet. Die Subroutinen Öffnen und Schließen unterstützen die Arbeit mit mehreren Pfaden zu einer Einheit, wenn die Einheit eine MPIO-fähige Einheit ist.

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. Wenn versucht wird, den offen Subroutine ohne die entsprechende Berechtigung gibt die Subroutine einen Wert zurück von-1 und setzt den Fehler globale Variable auf einen Wert von EPERM .

Der an die Subroutine OpenX übergebene Parameter Ext wählt die Operation aus, die für die Zieleinheit verwendet werden soll. Die Datei /usr/include/sys/scsi.h definiert mögliche Werte für den Parameter ext .

Der Parameter Ext kann eine beliebige Kombination der folgenden Flagwerte enthalten, die logisch verknüpft sind:

Element Beschreibung
SC_DIAGNOSE Versetzt die ausgewählte Einheit in den Diagnosemodus. Dieser Modus ist singulär eintrittsfähig, d. h., nur jeweils ein Prozess kann ihn öffnen. Wenn sich eine Einheit im Diagnosemodus befindet, werden SCSI-Operationen während Öffnen -oder Schließen -Operationen ausgeführt und die Fehlerprotokollierung ist inaktiviert. Im Diagnosemodus werden nur die Subroutinenoperationen Schließen und ioctl akzeptiert. Alle anderen vom Gerät unterstützten Subroutinen geben einen Wert von zurück-1 und legen Sie die Fehler globale Variable auf einen Wert von EACCESS (Zugang) .

Eine Einheit kann nur im Diagnosemodus geöffnet werden, wenn die Zieleinheit derzeit nicht geöffnet ist. Wenn versucht wird, ein Gerät im Diagnosemodus zu öffnen und das Zielgerät bereits geöffnet ist, gibt die Subroutine einen Wert von-1 und setzt den Fehler globale Variable auf einen Wert von EACCESS (Zugang) .

SC_FORCED_OPEN_LUN Auf einer Einheit, die das Zurücksetzen auf Lun-Ebene unterstützt, wird die Einheit unabhängig von einer Reservierung zurückgesetzt, die von einem anderen Initiator vor dem Öffnen vorgenommen wird. Wenn die Einheit die Zurücksetzung auf Lun-Ebene nicht unterstützt und die Flags SC_FORCED_OPEN_LUN und SC_FORCE_OPEN gesetzt sind, erfolgt eine Zielzurücksetzung, bevor die Öffnungssequenz stattfindet.
SC_FORCED_OPEN Leitet während der Öffnen -Operation Aktionen ein, um alle Reservierungen zu unterbrechen, die möglicherweise auf dem Gerät vorhanden sind. Diese Aktion kann eine Zielzurücksetzung umfassen.
Anmerkung: Durch eine Zielzurücksetzung werden alle Luns auf der SCSI-ID zurückgesetzt.
SC_RETAIN_RESERVATION Behält die Reservierung der Einheit nach einer Schließen -Operation bei, indem das Release nicht ausgegeben wird. Dieses Flag verhindert, dass andere Initiatoren die Einheit verwenden, es sei denn, sie unterbrechen die Reservierung der Hostmaschine.
SC_NO_RESERVE Verhindert die Reservierung einer Einheit während eines OpenX -Subroutinenaufrufs an diese Einheit. Diese Operation wird bereitgestellt, damit eine Einheit von zwei Prozessoren gesteuert werden kann, die ihre Aktivität durch ihre eigene Software synchronisieren.
SC_EINFACH Versetzt die ausgewählte Einheit in den exklusiven Zugriffsmodus. Nur jeweils ein Prozess kann eine Einheit im exklusiven Zugriffsmodus öffnen.

Eine Einheit kann nur im Modus für exklusiven Zugriff geöffnet werden, wenn die Einheit momentan nicht geöffnet ist. Wenn versucht wird, ein Gerät im exklusiven Zugriffsmodus zu öffnen und das Gerät bereits geöffnet ist, gibt die Subroutine einen Wert von zurück-1 und setzt den Fehler globale Variable auf einen Wert von EBESCHÄFTIGT . Wenn das Flag SC_DIAGNOSE zusammen mit dem Flag SC_EINFACH angegeben wird, wird die Einheit in den Diagnosemodus versetzt.

SC_PR_GEMEINSAM_GENUTZTES_REGISTER In einer Umgebung mit gemeinsam genutzten Multiinitiatoreinheiten wird eine persistente Reserve mit Serviceaktion Register and Ignore Key als Teil der offenen Sequenz an das Gerät gesendet. Diese Funktion richtet sich an die Clusterumgebung, in der eine obere Management-Software einem Empfehlungssperrmechanismus folgen muss, um zu steuern, wann der Initiator Lese-oder Schreiboperationen ausführt. Die Einheit ist für die Unterstützung von Persistent Reserve erforderlich (siehe Beschreibung des primären SCSI-Befehls Version 2 von Persistent Reserve).

Optionen für die openx-Subroutine in Programmierkonzepte für Kernelerweiterungen und Einheitenunterstützung enthält spezifischere Informationen zu den Öffnen -Operationen.

readx-und writex-Subroutinen

Die Subroutinen Readx und Schreibmodus stellen zusätzliche Parameter bereit, die sich auf die Rohdatenübertragung auswirken. Diese Subroutinen übergeben den Parameter Ext , der Anforderungsoptionen angibt. Die Optionen werden durch logisches Verknüpfen von null oder mehr der folgenden Werte mit OR erstellt:

Element Beschreibung
HWRELOC Zeigt eine Anforderung für die Verlagerung von Hardware an (nur sichere Verlagerung)
UNSAFEREL Zeigt eine Anforderung für eine Verlagerung von nicht sicherer Hardware an.
WRITEV Gibt eine Schreibanforderung an.

ioctl, Subroutine

ioctl -Subroutinenoperationen, die für den scsidisk -Einheitentreiber verwendet werden, sind für die folgenden Kategorien spezifisch:

  • Nur Festplatte und optische Einheiten mit Schreib-/Lesezugriff
  • Nur CD-ROM-Einheiten
  • Festplatte, CD-ROM und optische Einheiten mit Schreib-/Lesezugriff

Festplatte und optische Einheiten mit Schreib-/Lesezugriff

Die folgende ioctl -Operation ist nur für Festplatten und optische Einheiten mit Schreib-/Lesezugriff verfügbar:

Element Beschreibung
DKIOLWRSE Bietet eine Möglichkeit, einen Schreiben -Befehl an die Einheit auszugeben und die Prüfdaten der Zieleinheit abzurufen, wenn ein Fehler auftritt. Wenn das DKIOLWRSE Operation gibt einen Wert zurück von-1 und dasstatus_validityFeld wird auf den Wert SC_SCSI_FEHLERgesetzt, gültige Prüfdaten werden zurückgegeben Andernfalls werden Zielprüfdaten übergangen.

Die Operation DKIOLWRSE wird für die Diagnosezwecke bereitgestellt. Sie ermöglicht die eingeschränkte Nutzung der Zieleinheit, wenn sie in einer aktiven Systemumgebung betrieben wird. Der Parameter Arg der Operation DKIOLWRSE enthält die Adresse einer scsi_rdwrt -Struktur. Diese Struktur ist in der Datei /usr/include/sys/scsi_buf.h definiert.

Die Struktur Devinfo definiert die maximale Übertragungsgröße für eine Schreiben -Operation. Wenn versucht wird, mehr als das Maximum zu übertragen, gibt das Unterprogramm einen Wert von-1 und setzt den Fehler globale Variable auf einen Wert von EINVAL . Informationen zum Format der Anforderungsprüfdaten für eine bestimmte Einheit finden Sie im SCSI-Spezifikation (Small Computer System Interface) .

Festplatte, CD-ROM und optische Einheiten mit Schreib-/Lesezugriff

Die folgenden ioctl -Operationen sind für Festplatten, CD-ROM und optische Einheiten mit Schreib-/Lesezugriff verfügbar:

Element Beschreibung
IOCINFO Gibt die devinfo -Struktur zurück, die in der Datei/usr/include/sys/devinfo.h definiert ist. Die Operation IOCINFO ist die einzige Operation, die für alle Einheitentreiber definiert ist, die die Subroutine ioctl verwenden. Die übrigen Operationen beziehen sich auf Festplatte, CD-ROM und optische Einheiten mit Schreib-/Lesezugriff.
DKIOLRDSE Bietet eine Möglichkeit, einen Lesen -Befehl an die Einheit auszugeben und die Prüfdaten der Zieleinheit abzurufen, wenn ein Fehler auftritt. Wenn das DKIOLRDSE Operation gibt einen Wert zurück von-1 und dasstatus_validityFeld wird auf den Wert SC_SCSI_FEHLERgesetzt, gültige Prüfdaten werden zurückgegeben Andernfalls werden Zielprüfdaten übergangen.

Die Operation DKIOLRDSE wird für die Diagnosezwecke bereitgestellt. Sie ermöglicht die eingeschränkte Nutzung der Zieleinheit, wenn sie in einer aktiven Systemumgebung betrieben wird. Der Parameter Arg der Operation DKIOLRDSE enthält die Adresse einer scsi_rdwrt -Struktur. Diese Struktur ist in der Datei /usr/include/sys/scsi_buf.h definiert.

Die Struktur Devinfo definiert die maximale Übertragungsgröße für eine Lesen -Operation. Wenn versucht wird, mehr als das Maximum zu übertragen, gibt das Unterprogramm einen Wert von-1 und setzt den Fehler globale Variable auf einen Wert von EINVAL . Informationen zum Format der Anforderungsprüfdaten für eine bestimmte Einheit finden Sie im SCSI-Spezifikation (Small Computer System Interface) .

Befehl DKIOLCMD Wenn die Einheit erfolgreich im Diagnosemodus geöffnet wurde, bietet die Operation Befehl DKIOLCMD die Möglichkeit, einen SCSI-Befehl für die angegebene Einheit auszugeben. Wenn das DKIOLCMD Der Vorgang wird ausgeführt, wenn sich das Gerät nicht im Diagnosemodus befindet. Die Subroutine gibt einen Wert von zurück-1 und setzt den Fehler globale Variable auf einen Wert von EACCESS (Zugang) . Der Einheitentreiber führt keine Fehlerbehebung oder Protokollierung bei Fehlern dieser Operation durch.

Das SCSI-Statusbyte und die Adapterstatusbyte werden über den Parameter arg zurückgegeben, der die Adresse einer scsi_iocmd -Struktur (definiert in der Datei /usr/include/sys/scsi_buf.h ) enthält. Wenn das DKIOLCMD Operation schlägt fehl, die Subroutine gibt einen Wert zurück von-1 und setzt den Fehler globale Variable auf einen Wert ungleich Null. In diesem Fall muss der Aufrufende die zurückgegebenen Statusbyte auswerten, um festzustellen, warum die Operation nicht erfolgreich war und welche Wiederherstellungsaktionen ausgeführt werden müssen.

 
Das Versionsfeld der Struktur scsi_iocmd kann auf den Wert von SCSI_VERSION_2gesetzt werden und der Benutzer kann die folgenden Felder angeben:
  • variable_cdb_ptr ist ein Zeiger auf einen Puffer, der die Variable SCSI cdb enthält.
  • variable_cdb_länge bestimmt die Länge der Variablen CDB , auf die das Feld variable_cdb_ptr verweist.
Nach Beendigung der Befehl DKIOLCMD ioctl-Anforderung gibt das Residuum -Feld an, dass die übrig gebliebenen Daten, die die Einheit für diese Anforderung nicht vollständig erfüllt hat. Nach einem erfolgreichen Abschluss gibt das Feld Residuum an, dass die Einheit nicht über alle angeforderten Daten verfügt oder dass die Einheit weniger Daten enthält als angefordert wurden. Bei einem Fehler muss der Benutzer das Feld Statusgültigkeit überprüfen, um festzustellen, ob ein gültiger SCSI-Busfehler vorliegt. In diesem Fall gibt das Feld Residuum die Anzahl Byte an, die die Einheit für diese Anforderung nicht ausführen konnte.

Die Struktur Devinfo definiert die maximale Übertragungsgröße für den Befehl. Wenn versucht wird, mehr als das Maximum zu übertragen, gibt das Unterprogramm einen Wert von-1 und setzt den Fehler globale Variable auf einen Wert von EINVAL . Informationen zum Format der Anforderungsprüfdaten für eine bestimmte Einheit finden Sie im SCSI-Spezifikation (Small Computer System Interface) .

DKPMR Gibt den Befehl SCSI prevent media removal aus, wenn die Einheit erfolgreich geöffnet wurde. Dieser Befehl verhindert, dass Datenträger ausgegeben werden, bis die Einheit geschlossen, aus-und wieder eingeschaltet oder eine DKAMR -Operation ausgegeben wird. Der Parameter Arg für die Operation DKPMR ist null. Wenn die DKPMR -Operation erfolgreich ist, gibt die Subroutine den Wert 0 zurück. Handelt es sich bei dem Gerät um eine SCSI-Festplatte, DKPMR Operation schlägt fehl und die Subroutine gibt einen Wert von zurück-1 und setzt den Fehler globale Variable auf einen Wert von EINVAL . Wenn das DKPMR Wenn die Operation aus irgendeinem anderen Grund fehlschlägt, gibt die Subroutine einen Wert von zurück-1 und setzt den Fehler globale Variable auf einen Wert von EIO .
DKAMR Gibt den Befehl "allow media removal" aus, wenn die Einheit erfolgreich geöffnet wurde. Daher kann der Datenträger entweder mit der Entnahmetaste des Laufwerks oder mit der Operation DKEJECT-NAME ausgegeben werden. Der Parameter Arg für diese ioctl ist null. Wenn die DKAMR -Operation erfolgreich ist, gibt die Subroutine den Wert 0 zurück. Handelt es sich bei dem Gerät um eine SCSI-Festplatte, DKAMR Operation schlägt fehl und die Subroutine gibt einen Wert zurück von-1 und setzt den Fehler globale Variable auf einen Wert von EINVAL . Bei jedem anderen Fehlschlag dieser Operation gibt die Subroutine einen Wert zurück von-1 und setzt den Fehler globale Variable auf einen Wert von EIO .
DKEJECT-NAME Gibt einen Befehl zum Ausgeben von Kassetten an das Laufwerk aus, wenn die Einheit erfolgreich geöffnet wurde. Der Parameter Arg für diese Operation ist null. Wenn die DKEJECT-NAME -Operation erfolgreich ist, gibt die Subroutine den Wert 0 zurück. Handelt es sich bei dem Gerät um eine SCSI-Festplatte, DKEJECT Operation schlägt fehl und die Subroutine gibt einen Wert von zurück-1 und setzt den Fehler globale Variable auf einen Wert von EINVAL . Bei jedem anderen Fehlschlag dieser Operation gibt die Subroutine einen Wert zurück von-1 und setzt den Fehler Variable auf einen Wert von EIO .
DKFORMAT Gibt einen Befehl zum Formatieren einer Einheit an die angegebene Einheit aus, wenn die Einheit erfolgreich geöffnet wurde.

Ist der Parameter Arg für diese Operation null, setzt die Formateinheit das gültige Bit für Formatoptionen (FOV) auf 0 (d. h., sie verwendet die Standardeinstellung für Laufwerke). Wenn der Parameter Arg für die Operation DKFORMAT nicht null ist, wird das erste Byte des Headers der Fehlerliste auf den Wert gesetzt, der im ersten Byte angegeben ist, das durch den Parameter Arg adressiert wird. Es ermöglicht die Erstellung von Anwendungen, um einen bestimmten Typ von optischen Datenträgern mit Schreib-/Lesezugriff eindeutig zu formatieren.

Der Treiber versucht anfänglich, die Bits FmtData und CmpLst auf 0 zu setzen. Wenn das fehlschlägt, versucht der Treiber die verbleibenden drei Permutationen dieser Bits. Wenn alle vier Permutationen fehlschlagen, schlägt diese Operation fehl und die Subroutine setzt die Variable Fehlernummer auf den Wert E/A.

Wenn das DKFORMAT Wenn die Operation für eine Festplatte angegeben wird, gibt die Subroutine einen Wert von-1 und setzt den Fehler globale Variable auf einen Wert von EINVAL . Wenn das DKFORMAT Wenn der Vorgang versucht wird, wenn sich das Gerät nicht im exklusiven Zugriffsmodus befindet, gibt die Subroutine einen Wert von zurück-1 und setzt den Fehler globale Variable auf einen Wert von EACCESS (Zugang) . Wenn das Medium schreibgeschützt ist, gibt die Subroutine einen Wert von-1 und setzt den Fehler globale Variable auf einen Wert von EWRPROTECT . Wenn die Formateinheit ihren Timeout-Wert überschreitet, gibt die Subroutine einen Wert von-1 und setzt den Fehler globale Variable auf einen Wert von EZEITAUS . Bei jedem anderen Fehlschlag dieser Operation gibt die Subroutine einen Wert zurück von-1 und setzt den Fehler globale Variable auf einen Wert von EIO .

DKAUDIODATEI Gibt Audiowiedergabebefehle für die angegebene Einheit aus und steuert die Lautstärke an den Ausgabeports der Einheit. Zu den Wiedergabeaudiobefehlen gehören: Abspielen, Anhalten, Fortsetzen, Stoppen, Bestimmen der Anzahl von Spuren und Bestimmen des Status einer aktuellen Audiooperation. Die Operation DKAUDIODATEI gibt Audiodaten nur über die Ausgabeports des CD-ROM-Laufwerks wieder. Der Parameter arg dieser Operation ist die Adresse einer Struktur cd_audio_cmds , die in der Datei /usr/include/sys/scdisk.h definiert ist. Exklusiver Zugriffsmodus ist erforderlich

Wenn DKAUDIO Wenn die Operation versucht wird, wenn das Attribut „audio-supported“ des Geräts auf „No“ gesetzt ist, gibt die Subroutine einen Wert von-1 und setzt den Fehler globale Variable auf einen Wert von EINVAL . Wenn das DKAUDIO Operation schlägt fehl, die Subroutine gibt einen Wert zurück von-1 und setzt den Fehler globale Variable auf einen Wert ungleich Null. In diesem Fall muss der Aufrufende die zurückgegebenen Statusbyte auswerten, um festzustellen, warum die Operation fehlgeschlagen ist und welche Wiederherstellungsaktionen ausgeführt werden müssen.

DK_CD_MODE Bestimmt oder ändert den CD-ROM-Datenmodus für die angegebene Einheit. Der CD-ROM-Datenmodus gibt an, welche Blockgröße und welche Gerätedatei für Daten verwendet werden, die über den SCSI-Bus von der Einheit gelesen werden. Die Operation DK_CD_MODE unterstützt die folgenden CD-ROM-Datenmodi:
CD-ROM-Datenmodus 1
512-Byte-Blockgröße durch unformatierte (dev/rcd*) und blockspezifische (/dev/cd*) Dateien
CD-ROM-Datenmodus 2 Formular 1
2048-Byte-Blockgröße über unformatierte (dev/rcd*) und blockspezifische (/dev/cd*) Dateien
CD-ROM-Datenmodus 2 Formular 2
2336-Byte Blockgröße nur über die unformatierte Gerätedatei (Dev/RCD*)
CD-DA (Compact Disc Digital Audio)
2352 -Byteblockgröße nur über die unformatierte Gerätedatei (Dev/RCD*)
DVD-ROM
2048-Byte-Blockgröße durch unformatierte (/dev/rcd *) und blockspezifische (/dev/cd *) Dateien
DVD-RAM
2048-Byte-Blockgröße durch unformatierte (/dev/rcd *) und blockspezifische (/dev/cd *) Dateien
DVD-RW
2048-Byte-Blockgröße durch unformatierte (/dev/rcd *) und blockspezifische (/dev/cd *) Dateien

Der Parameter DK_CD_MODE arg enthält die Adresse der Struktur mode_form_op , die in der Datei /usr/include/sys/scdisk.h definiert ist. Damit die DK_CD_MODE -Operation den CD-ROM-Datenmodus bestimmt oder ändert, legen SieactionFeld der Struktur Änderungsmodusformat auf einen der folgenden Werte:

 
CD_GET_MODE (MODUS)
Gibt den aktuellen CD-ROM-Datenmodus imcd_mode_formFeld der Modusform_Op -Struktur, wenn die Einheit erfolgreich geöffnet wurde
CD_CHG_MODE
Ändert den CD-ROM-Datenmodus in den Modus, der in dercd_mode_formFeld der Modusform_Op -Struktur, wenn die Einheit erfolgreich im Modus für exklusiven Zugriff geöffnet wurde.

Wenn eine CD-ROM nicht für verschiedene Datenmodi konfiguriert ist (durch Modusauswahldichtecodes) und versucht wird, den CD-ROM-Datenmodus zu ändern (durch Festlegen desactionFeld der change_mode_form Struktur eingestellt auf CD_CHG_MODE ) gibt die Subroutine einen Wert von-1 und setzt den Fehler globale Variable auf einen Wert von EINVAL . Versuche, den CD-ROM-Modus in einen der DVD-Modi zu ändern, führen ebenfalls zu einem Rückgabewert von-1 und das Fehler globale Variable gesetzt auf EINVAL .

Wenn das DK_CD_MODE Betrieb für CD_CHG_MODE versucht wird, wenn sich das Gerät nicht im exklusiven Zugriffsmodus befindet, gibt die Subroutine einen Wert von-1 und setzt den Fehler globale Variable auf einen Wert von EACCESS (Zugang) . Bei jedem anderen Fehlschlag dieser Operation gibt die Subroutine einen Wert zurück von-1 und setzt den Fehler globale Variable auf einen Wert von EIO .

DK_PASSTHRU Wenn die Einheit erfolgreich geöffnet wurde, stellt DK_PASSTHRU die Mittel zum Absetzen eines SCSI-Befehls an die angegebene Einheit bereit. Der Einheitentreiber führt eine eingeschränkte Fehlerbehebung durch, wenn diese Operation fehlschlägt. Die Operation DK_PASSTHRU unterscheidet sich von der Operation DKIOCMD-Befehl dadurch, dass sie keinen Befehl OpenX mit dem Argument Ext von SC_DIAGNOSEerfordert. Daher kann DK_PASSTHRU für Einheiten ausgegeben werden, die von anderen Operationen verwendet werden.

Das SCSI-Statusbyte und die Adapterstatusbyte werden über den Parameter arg zurückgegeben, der die Adresse einer sc_passthru -Struktur enthält (in der Datei /usr/include/sys/scsi.h definiert). Wenn das DK_PASSTHRU Operation schlägt fehl, die Subroutine gibt einen Wert zurück von-1 und setzt die globale Variable errno auf einen Wert ungleich Null. In diesem Fall muss der Aufrufende die zurückgegebenen Statusbyte auswerten, um festzustellen, warum die Operation nicht erfolgreich war und welche Wiederherstellungsaktionen ausgeführt werden müssen.

Wenn ein DK_PASSTHRU Der Vorgang schlägt fehl, weil ein Feld im sc_passthru Struktur hat einen ungültigen Wert, die Subroutine gibt einen Wert zurück von-1 und setzt die globale Variable errno auf EINVAL . Das Feld Einval_Argument wird auf die Feldnummer (beginnend mit 1 für das Versionsfeld) des Felds mit einem ungültigen Wert gesetzt. Der Wert 0 für das Feld Einval_Argument gibt an, dass keine weiteren Informationen zum Fehler verfügbar sind.

DK_PASSTHRU -Operationen werden weiter unterteilt in Anforderungen, die andere Ein-/Ausgabe in den Quiescemodus versetzen, bevor die Anforderung ausgegeben wird, und Anforderungen, die keine Ein-/Ausgabe in den Quiescemodus versetzen. Diese Teilbereiche basieren auf dem Feld DevFlags der Struktur sc_passthru (Durchgriff) . Wenn das Feld DevFlags der Struktur sc_passthru (Durchgriff) den Wert SC_MIX_IOhat, wird die Operation DK_PASSTHRU mit anderen E/A-Anforderungen gemischt. SC_MIX_IO -Anforderungen, die Daten auf Einheiten schreiben, sind unzulässig und schlagen fehl. Wenn es passiert,-1 wird zurückgegeben und die globale Variable errno wird gesetzt auf EINVAL . Wenn das Feld DevFlags der Struktur sc_passthru (Durchgriff) den Wert SC_QUIESCE_E/Ahat, werden alle anderen E/A-Anforderungen in den Quiescemodus versetzt, bevor die Anforderung DK_PASSTHRU an die Einheit ausgegeben wird. Wenn ein SC_QUIESCE_IO Anfrage hat seine Zeitüberschreitungswert auf 0 gesetzt, das DK_PASSTHRU Anfrage schlägt fehl mit dem Rückgabecode-1 wird die globale Variable errno auf EINVAL , und das einval_arg ist auf den Wert gesetzt SC_PASSTHRU_INV_TO (definiert in der/usr/include/sys/scsi.h Datei). Wenn ein SC_QUIESCE_IO Anforderung hat einen Timeout-Wert ungleich Null, der zu groß für das Gerät ist, DK_PASSTHRU Anfrage schlägt fehl mit dem Rückgabecode-1 wird die globale Variable errno auf EINVAL , Die einval_arg ist auf den Wert gesetzt SC_PASSTHRU_INV_TO (definiert in der/usr/include/sys/scsi.h Datei) und die Zeitüberschreitungswert wird auf den größten zulässigen Wert eingestellt.

 
Das Versionsfeld der Struktur sc_passthru (Durchgriff) kann auf den Wert von SCSI_VERSION_2gesetzt werden und der Benutzer kann die folgenden Felder angeben:
  • variable_cdb_ptr ist ein Zeiger auf einen Puffer, der die Variable SCSI cdb enthält.
  • variable_cdb_länge bestimmt die Länge der Variablen CDB , auf die das Feld variable_cdb_ptr verweist.
Nach Beendigung der DK_PASSTHRU ioctl-Anforderung gibt das Residuum -Feld an, dass die übrig gebliebenen Daten, die die Einheit für diese Anforderung nicht vollständig erfüllt hat. Nach einer erfolgreichen Beendigung gibt das Feld Residuum an, dass die Einheit nicht über alle angeforderten Daten verfügt oder dass die Einheit weniger Daten enthält, als angefordert wurden. Bei einem Fehler muss der Benutzer das Feld Statusgültigkeit überprüfen, um festzustellen, ob ein gültiger SCSI-Busfehler vorliegt. In diesem Fall gibt das Feld Residuum die Anzahl der Byte an, die die Einheit für diese Anforderung nicht ausführen konnte.

Die Struktur Devinfo definiert die maximale Übertragungsgröße für den Befehl. Wenn versucht wird, mehr als die maximale Übertragungsgröße zu übertragen, gibt die Subroutine einen Wert von zurück-1 setzt die globale Variable errno auf einen Wert von EINVAL und legt den einval_arg Feld auf einen Wert von SC_PASSTHRU_INV_D_LEN (definiert in der/usr/include/sys/scsi.h Datei). Informationen zum Format der Anforderungsprüfdaten für eine bestimmte Einheit finden Sie im SCSI-Spezifikation (Small Computer System Interface) .

Anmerkung: Aufruf von DK_PASSTHRU ioctl als Benutzer ohne Rootberechtigung schlägt mit EACCES statt EPERMfehl.
DKPRES_READKEYS

Nach dem erfolgreichen Öffnen des Geräts stellt die Operation DKPRES_READKEYS eine Möglichkeit zum Lesen der Registrierungsschlüssel für persistente Reserve auf dem Gerät bereit. Der Parameter Arg für DKPRES_READKEYS enthält die Adresse der dk_pres_in -Struktur. Diese Struktur wird in /usr/include/sys/scdisk.hdefiniert. Der Benutzer muss einen Pufferbereich und eine Größe angeben, damit die registrierten Schlüssel zurückgegeben werden. Die Variable Zurückgegebene_Länge legt die Anzahl der zurückgegebenen Bytes fest.

In einer Umgebung mit gemeinsamem Zugriff oder einer Clusterumgebung identifiziert diese Operation alle registrierten Schlüssel für eine bestimmte LUN.

Anmerkung: Für die Operation DKPRES_READKEYS und die folgende Operation im Zusammenhang mit der persistenten Reserve wird der zurückgegebene Wert und der SCSI-Status wie folgt interpretiert:
  • Bei einem erfolgreichen Versuch des Aufrufs wird 0 zurückgegeben.
  • Nach einem fehlgeschlagenen Anruf wird ein-1 wird zurückgegeben und die Fehler globale Variable ist gesetzt. Für eine spezifische Beschreibung der Fehler Wert, siehe/usr/include/erno.h . Außerdem wird der SCSI-Status zusammen mit dem Prüfcode (ASC und ASCQ) festgelegt, um weitere Informationen darüber bereitzustellen, warum der Befehl fehlgeschlagen ist. Informationen zur Interpretation des SCSI-Statusfehlercodes enthält die SCSI-Spezifikation.
DKPRES_READRES

Wenn die Einheit erfolgreich geöffnet wurde, bietet die Operation DKPRES_READRES eine Möglichkeit zum Lesen der Reservierungsschlüssel für persistente Reserve auf der Einheit. Der Parameter Arg für DKPRES_READKEYS enthält die Adresse der dk_pres_in -Struktur. Diese Struktur wird in /usr/include/sys/scdisk.hdefiniert. Der Benutzer muss einen Pufferbereich und eine Größe angeben, damit die Reservierungsinformationen zurückgegeben werden. Die Variable Zurückgegebene_Länge legt die Anzahl der zurückgegebenen Bytes fest. In einer Umgebung mit gemeinsamem Zugriff oder einer Clusterumgebung gibt diese Operation den primären Initiator an, der die Reservierung enthält.

DKPRES_CLEAR (LÖSCHEN)

Wenn das Gerät erfolgreich geöffnet wurde, bietet die Operation DKPRES_CLEAR (LÖSCHEN) die Möglichkeit, alle persistenten Reservierungsschlüssel und Registrierungsschlüssel auf dem Gerät zu löschen. Der Parameter Arg für DKPRES_CLEAR (LÖSCHEN) enthält die Adresse der dk_pres_clear -Struktur. Diese Struktur wird in /usr/include/sys/scdisk.hdefiniert.

Achtung: Gehen Sie beim Absetzen der Operation DKPRES_CLEAR (LÖSCHEN) vorsichtig vor. Bei dieser Operation bleibt die Einheit nicht reserviert, sodass ein fremder Initiator auf die Einheit zugreifen kann.
DKPRES_PRÄMPT

Wenn die Einheit erfolgreich geöffnet wurde, bietet die Operation DKPRES_PRÄMPT die Möglichkeit, einen Reservierungsschlüssel für persistente Reservierung oder einen Registrierungsschlüssel für die Einheit zu präemptieren. Der Parameter Arg für DKPRES_PRÄMPT enthält die Adresse der dk_pres_preempt -Struktur. Diese Struktur wird in /usr/include/sys/scdisk.hdefiniert. Der Benutzer muss den Initiatorschlüssel der zweiten Partei auf der Einheit angeben, die zurückgestellt werden soll. Wenn der Initiator der zweiten Partei die Reservierung für die Einheit hält, wird der Initiator, der die Zurückstellung ausgibt, zum Eigner der Reservierung. Andernfalls wird der Zugriff des Initiators der zweiten Partei widerrufen.

Damit diese Operation erfolgreich ist, muss der Initiator zuerst bei der Einheit registriert werden, bevor eine Zurückstellung erfolgen kann. In einer Umgebung mit gemeinsamem Zugriff oder einer Clusterumgebung wird diese Operation verwendet, um einen funktionsfähigen oder funktionsunfähigen Initiator oder einen Initiator, der nicht als Teil der gemeinsam genutzten Gruppe erkannt wird, zu präemptieren.

DKPRES_PREEMPT_ABORT

Diese Operation ist mit der Operation DKPRES_PRÄMPTidentisch, mit der Ausnahme, dass die Einheit die primäre SCSI-Befehlsspezifikation beim Abbrechen von Tasks befolgt, die zum präemptierten Initiator gehören.

DKPRES_REGISTER

Wenn die Einheit erfolgreich geöffnet wurde, bietet die Operation DKPRES_REGISTER eine Möglichkeit, einen Schlüssel bei der Einheit zu registrieren. Der Schlüssel wird aus dem Anpassungsattribut ODM extrahiert und während der Konfiguration an den Einheitentreiber übergeben. Der Parameter Arg für DKPRES_REGISTER enthält die Adresse der dk_vor_registrieren -Struktur. Diese Struktur wird in /usr/include/sys/scdisk.hdefiniert.

In einer Umgebung mit gemeinsamem Zugriff oder einer Clusterumgebung versucht diese Operation, eine Registrierung bei der Einheit durchzuführen. Anschließend folgt eine Lesereservierung, um festzustellen, ob die Einheit reserviert ist. Ist die Einheit nicht reserviert, wird eine Reservierung mit der Einheit vorgenommen.

DK_RWBUFFER Wenn die Einheit erfolgreich geöffnet wurde, bietet die Operation DK_RWBUFFER die Möglichkeit, einen oder mehrere SCSI-Schreibpufferbefehle an die angegebene Einheit auszugeben. Der Einheitentreiber führt bei Fehlern dieser Operation eine vollständige Fehlerbehebung durch. Die Operation DK_RWBUFFER unterscheidet sich von der Operation DKIOCMD-Befehl dadurch, dass sie kein exklusives Öffnen der Einheit erfordert (z. B. OpenX mit dem Argument Ext von SC_DIAGNOSE). Daher kann eine DK_RWBUFFER -Operation an Einheiten ausgegeben werden, die von anderen Einheiten verwendet werden. Sie kann mit DK_PASSTHRU ioctl verwendet werden, das (wie DK_RWBUFFER) kein exklusives Öffnen der Einheit erfordert.

Der Parameter arg enthält die Adresse einer sc_rwbuffer -Struktur (definiert in der Datei /usr/include/sys/scsi.h ). Bevor DK_RWBUFFER ioctl aufgerufen wird, müssen die Felder dieser Struktur entsprechend dem erforderlichen Verhalten festgelegt werden. Das Feld Modus entspricht dem Feld Modus des SCSI Command Descriptor Block (CDB), wie in Spezifikation SCSI Primary Commands (SPC)definiert. Unterstützte Modi werden in der Headerdatei /usr/include/sys/scsi.haufgelistet.

Der Einheitentreiber versetzt alle anderen Ein-/Ausgaben des Initiators in den Wartemodus, indem er den Schreibpuffer ioctl ausgibt, bis die gesamte Operation abgeschlossen ist. Sobald der Schreibpuffer ioctl abgeschlossen ist, wird die gesamte Ein-/Ausgabe im Quiescemodus fortgesetzt.

Das SCSI-Statusbyte und die Adapterstatusbyte werden über den Parameter arg zurückgegeben, der die Adresse einer Struktur sc_rwbuffer (definiert in der Datei /usr/include/sys/scsi.h ) enthält. Wenn das DK_RWBUFFER Operation schlägt fehl, die Subroutine gibt einen Wert zurück von-1 und setzt den Fehler globale Variable auf einen Wert ungleich Null. In diesem Fall muss der Aufrufende die zurückgegebenen Statusbyte auswerten, um festzustellen, warum die Operation nicht erfolgreich war und welche Wiederherstellungsaktionen ausgeführt werden müssen.

Wenn ein DK_RWBUFFER Der Vorgang schlägt fehl, weil ein Feld im sc_rwbuffer Struktur hat einen ungültigen Wert, die Subroutine gibt einen Wert zurück von-1 und setzt den Fehler globale Variable zu EINVAL .

Mit DK_RWBUFFER ioctl kann der Benutzer mehrere SCSI-Schreibpufferbefehle (CDBs) über einen einzigen ioctl-Aufruf an die Einheit absetzen. Es ist nützlich für Anwendungen wie den Mikrocode-Download, bei dem der Benutzer einen Zeiger auf das gesamte Mikrocode-Image bereitstellt, aber aufgrund von Größenbeschränkungen der Einheitenpuffer wünscht, dass die Images in Fragmenten gesendet werden, bis der gesamte Download abgeschlossen ist.

Wenn DK_RWBUFFER ioctl mit dem Member Fragmentgröße der Struktur sc_rwpuffer gleich Datenlängeaufgerufen wird, wird ein einzelner Schreibpufferbefehl an die Einheit ausgegeben, wobei buffer_offset und Puffer-ID der SCSI-CDB auf die in der Struktur sc_rwpuffer angegebenen Werte gesetzt sind.

Wenn Datenlänge größer als Fragmentgröße ist und Fragmentgröße ein Wert ungleich null ist, werden mehrere Schreibpufferbefehle an die Einheit ausgegeben. Die Anzahl der ausgegebenen Befehle zum Schreiben von Puffern (SCSI CDBs) wird berechnet, indem Datenlänge durch die erforderliche Fragmentgrößedividiert wird. Dieser Wert wird um 1 erhöht, wenn Datenlänge kein geradzahliges Vielfaches von Fragmentgrößeist und die endgültige Datenübertragung die Größe dieser Restmenge ist.

DK_RWBUFFER Fortsetzung Für jeden Befehl zum Schreiben von Puffern, der abgesetzt wird, wird buffer_offset auf den Wert gesetzt, der in der Struktur sc_rwpuffer bereitgestellt wird (Mikrocode-Downloads auf SCSD-Einheiten erfordern, dass dieser Wert auf 0 gesetzt wird). Für den ersten ausgegebenen Befehl wird Puffer-ID auf den Wert gesetzt, der in der Struktur sc_rwpuffer angegeben ist. Für jeden nachfolgenden Befehl Write Buffer, der abgesetzt wird, wird der Wert für Puffer-ID um 1 erhöht, bis alle Fragmente gesendet wurden. Das Schreiben in nicht zusammenhängende Puffer-IDs über eine einzelne DK_RWBUFFER ioctl wird nicht unterstützt. Wenn diese Funktionalität gewünscht wird, müssen mehrere DK_RWBUFFER -ioctls mit der entsprechenden Einstellung für Puffer-ID für jeden Aufruf ausgegeben werden.
Anmerkung: Zwischen ioctl-Aufrufen wird keine E/A-Anforderung in den Quiescemodus versetzt.
DK_RWBUFFER Fortsetzung

Wenn Fragmentgröße auf null gesetzt ist, wird Fehlernummer von EINVAL zurückgegeben. Soll der gesamte Puffer mit einem SCSI-Schreibpufferbefehl gesendet werden, muss dieses Feld auf Datenlängegesetzt werden. Der Fehler EINVAL wird auch zurückgegeben, wenn der Wert für Fragmentgröße größer als der Wert für Datenlängeist.

Die Parameterlistenlänge (Fragmentgröße) plus Pufferoffset dürfen die Kapazität des angegebenen Puffers der Einheit nicht überschreiten. Es liegt in der Verantwortung des Aufrufenden des Schreibpuffers ioctl, sicherzustellen, dass die Einstellung Fragmentgröße diese Anforderung erfüllt. Ein Fragmentgröße , der größer als die Einheit ist, kann zu einem SCSI-Fehler an der Einheit führen, und das ioctl des Schreibpuffers führt zu diesem Fehler, aber es werden keine Maßnahmen zur Wiederherstellung ergriffen.

Die Struktur Devinfo definiert die maximale Übertragungsgröße für den Befehl. Wenn versucht wird, mehr als die maximale Übertragungsgröße zu übertragen, gibt die Subroutine einen Wert von zurück-1 und setzt den Fehler globale Variable auf einen Wert von EINVAL . Informationen zum Format der Anforderungsprüfdaten für eine bestimmte Einheit finden Sie im SCSI-Spezifikation (Small Computer System Interface) .

DKPATHIOLCMD Dieser Befehl ist nur für MPIO-fähige Einheiten verfügbar. Der Befehl DKPATHIOLCMD verwendet als Eingabe ein Zeigerargument, das auf eine einzelne scsidisk_pathiocmd -Struktur verweist. Der Befehl DKPATHIOLCMD verhält sich genau wie der BefehlBefehl DKIOLCMD , außer dass der Eingabepfad anstelle der normalen Pfadauswahl verwendet wird. Der Pfad DKPATHIOLCMD wird für den Befehl Befehl DKIOLCMD verwendet, unabhängig davon, welcher Pfad durch einen DKPFADKRAFT -Befehl ioctl angegeben wird. Ein Pfad kann nicht dekonfiguriert werden, während er erzwungen wird.
DKPFADKRAFT Dieser Befehl ist nur für MPIO-fähige Einheiten verfügbar. Der Befehl DKPFADKRAFT verwendet als Eingabe die Pfad-ID 'ushort'. Die Pfad-ID muss mit einer der Pfad-IDs in CuPath ODMübereinstimmen. Die Pfad-ID gibt einen Pfad an, der für alle nachfolgenden E/A-Befehle verwendet werden soll, wobei alle vorherigen DKPFADKRAFT -Pfade überschrieben werden. Ein Nullargument gibt an, dass die Pfaderzwingung beendet und die normale MPIO-Pfadauswahl wiederaufgenommen werden soll. Der PCM KE verfolgt die erzwungene Ein-/Ausgabe auf einem Pfad. Der Einheitentreiber kennt diesen Status nicht, außer E/A-Befehle, die mit dem Befehl DKPATHIOLCMD gesendet werden, überschreiben die Option DKPFADKRAFT und senden die Ein-/Ausgabe über den Pfad, der in der Struktur scsidisk_pathiocmd angegeben ist.
DKPFADRWPUFFER Dieser Befehl ist nur für MPIO-fähige Einheiten verfügbar. Der Befehl DKPFADRWPUFFER verwendet als Eingabe ein Zeigerargument, das auf eine einzelne scsidisk_pathiocmd -Struktur verweist. Der Befehl DKPFADRWPUFFER verhält sich genau wie der Befehl DKRWBUFFER , außer dass der Eingabepfad anstelle der normalen Pfadauswahl verwendet wird. Der Pfad DKPFADRWPUFFER wird für den Befehl DKRWBUFFER verwendet, unabhängig davon, welcher Pfad durch einen DKPFADKRAFT -Befehl ioctl angegeben wird.
DKPFADDURCHGRIFF Dieser Befehl ist nur für MPIO-fähige Einheiten verfügbar. Der Befehl DKPFADDURCHGRIFF verwendet als Eingabe ein Zeigerargument, das auf eine einzelne scsidisk_pathiocmd -Struktur verweist. Der Befehl DKPFADDURCHGRIFF verhält sich genau wie der Befehl DKDURCHGRIFF , außer dass der Eingabepfad anstelle der normalen Pfadauswahl verwendet wird. Der Pfad DKPFADDURCHGRIFF wird für den Befehl DKDURCHGRIFF verwendet, unabhängig davon, welcher Pfad durch einen DKPFADKRAFT -Befehl ioctl angegeben wird.
DKPCMPASSTHRU Dieser Befehl ist nur für MPIO-fähige Einheiten verfügbar. Der Befehl DKPCMPASSTHRU nimmt als Eingabe eine Struktur, die PCM-spezifisch ist, sie ist nicht von AIX® definiert. Die PCM-spezifische Struktur wird direkt an das PCM übergeben. Diese Struktur kann verwendet werden, um Informationen in ein oder aus einem PCM zu verschieben.

Einheitenvoraussetzungen

Für das SCSI-Architekturmodell für Festplatte, CD-ROM und optische Laufwerke mit Lese-/Schreibberechtigung gelten die folgenden Hardwarevoraussetzungen:

  • SAM-Festplatten und optische Laufwerke mit Lese-/Schreibberechtigung müssen eine Blockgröße von 512 Byte pro Block unterstützen.
  • Wenn die Modusprüffunktion unterstützt wird, muss auch das Schreibschutzbit (WP) für SAM-Festplatten und optische Laufwerke mit Schreib-/Lesezugriff unterstützt werden.
  • SAM-Festplatten und optische Laufwerke mit Lese-/Schreibberechtigung müssen den Hardwarewiederholungszähler in Byte 16 und 17 der Anforderungprüfdaten für behobene Fehler melden. Wenn die Festplatte oder das Laufwerk für optisches Lesen/Schreiben diese Funktion nicht unterstützt, kann das Systemfehlerprotokoll auf einen vorzeitigen Laufwerkfehler hinweisen.
  • SAM-CD-ROM-Laufwerke und optische Laufwerke mit Schreib-/Lesezugriff müssen den 10-Byte-SCSI-Lesebefehl unterstützen.
  • SAM-Festplatten und optische Laufwerke mit Lese-/Schreibberechtigung müssen den SCSI-Befehl write and verify und den 6-Byte-SCSI-Schreibbefehl unterstützen.
  • Um die Format -Befehlsoperation auf optischen Datenträgern mit Lese-/Schreibberechtigung verwenden zu können, muss das Laufwerk die Einstellung des gültigen FOV-Bits (Formatoptionen) für den Header der Fehlerliste des SCSI-Formateinheitenbefehls auf 0 unterstützen. Wenn das Laufwerk diese Funktion nicht unterstützt, kann der Benutzer eine Anwendung für das Laufwerk schreiben, damit Datenträger mit der Operation DKFORMAT formatiert werden.
  • Wenn ein SAM-CD-ROM-Laufwerk CD-ROM-Datenmodus 1verwendet, muss es eine Blockgröße von 512 Byte pro Block unterstützen.
  • Wenn ein SAM-CD-ROM-Laufwerk CD_ROM Daten Modus 2 Form 1verwendet, muss es eine Blockgröße von 2048 Byte pro Block unterstützen.
  • Wenn ein SAM-CD-ROM-Laufwerk CD_ROM data Modus 2 Form 2verwendet, muss es eine Blockgröße von 2336 Byte pro Block unterstützen.
  • Wenn ein SAM CD-ROM-Laufwerk den Modus CD_DA verwendet, muss es eine Blockgröße von 2352 Byte pro Block unterstützen.
  • Um die Lautstärke mithilfe der DKAUDIODATEI -Operation (Audiowiedergabe) zu steuern, muss das Gerät die SCSI-2 Modusdatenseite 0xEunterstützen.
  • Damit die DKAUDIODATEI -Operation (Audiowiedergabe) verwendet werden kann, muss die Einheit die folgenden optionalen SCSI-2 -Befehle unterstützen:
    • Unterkanal lesen
    • Wiederaufnahme anhalten
    • Audio-MSF wiedergeben
    • Audiospur-Index wiedergeben
    • Inhaltsverzeichnis lesen

Fehlerbedingungen

Mögliche Fehlernummer -Werte für ioctl-, Öffnen-,Lesen-und Schreiben -Subroutinen bei Verwendung des scsidisk -Einheitentreibers sind:

Element Beschreibung
EACCES Gibt einen der folgenden Umstände an:
  • Es wurde versucht, eine Einheit zu öffnen, die derzeit im Diagnosemodus oder im Modus für exklusiven Zugriff geöffnet ist.
  • Es wurde versucht, eine Diagnosemodussitzung auf einer bereits geöffneten Einheit zu öffnen.
  • Der Benutzer hat versucht, eine andere Subroutine als eine ioctl -oder Schließen -Subroutine im Diagnosemodus auszuführen.
  • Eine Befehl DKIOLCMD -Operation wurde auf einer Einheit versucht, die sich nicht im Diagnosemodus befindet.
  • Eine DK_CD_MODE ioctl -Subroutinenoperation wurde auf einer Einheit versucht, die sich nicht im exklusiven Zugriffsmodus befindet.
  • Eine DKFORMAT -Operation wurde auf einer Einheit versucht, die sich nicht im exklusiven Zugriffsmodus befindet.
EBUSY Gibt einen der folgenden Umstände an:
  • Es wurde versucht, eine Sitzung im Modus für exklusiven Zugriff auf einer bereits geöffneten Einheit zu öffnen.
  • Die Zieleinheit ist von einem anderen Initiator reserviert.
EFAULT Zeigt eine ungültige Benutzeradresse an.
EFORMAT Gibt an, dass die Zieleinheit unformatierte Datenträger oder Datenträger in einem inkompatiblen Format hat.
EINFORTSCHRITT Zeigt an, dass für ein CD-ROM-Laufwerk eine Wiedergabe-Audio-Operation in Bearbeitung ist.
EINVAL Gibt einen der folgenden Umstände an:
  • Eine DKAUDIODATEI -Operation (Play-Audio) wurde für eine Einheit versucht, die nicht für die Verwendung der SCSI-2 -Wiedergabeaudiobefehle konfiguriert ist.
  • Die Subroutine Lesen oder Schreiben hat einen Parameter NByte angegeben, der kein geradzahliges Vielfaches der Blockgröße ist.
  • Eine Prüfdatenpufferlänge von mehr als 255 Byte ist für eine DKIOLWRSE-oder DKIOLRDSE ioctl -Subroutinenoperation nicht gültig.
  • Die Datenpufferlänge hat den in der Devinfo -Struktur für eine DKIOLRDSE-, DKIOLWRSE-oder DKIOLCMD ioktl -Subroutinenoperation definierten Maximalwert überschritten.
  • Es wurde eine nicht unterstützte ioctl -Subroutinenoperation versucht.
  • Es wurde versucht, eine noch offene Einheit zu konfigurieren.
  • Es wurde ein falscher Konfigurationsbefehl angegeben.
  • Ein Befehl DKPMR (Entfernen von Datenträgern verhindern), DKAMR (Entfernen von Datenträgern zulassen) oder DKEJECT-NAME (Datenträger ausgeben) wurde an eine Einheit gesendet, die austauschbare Datenträger nicht unterstützt.
  • Ein DKEJECT-NAME -Befehl (Eject Media) wurde an eine Einheit gesendet, deren Datenträger im Laufwerk gesperrt ist.
  • Die Datenpufferlänge hat das für eine Strategie -Operation definierte Maximum überschritten.
EIO Gibt einen der folgenden Umstände an:
  • Die Zieleinheit wurde nicht gefunden oder antwortet nicht.
  • Die Zieleinheit weist auf einen nicht behebbaren Hardwarefehler hin.
EMEDIEN Gibt einen der folgenden Umstände an:
  • Die Zieleinheit weist auf einen nicht behebbaren Datenträgerfehler hin.
  • Der Datenträger wurde geändert.
EMDATEI Zeigt an, dass eine Öffnen -Operation für einen Adapter versucht wurde, der bereits über die maximal zulässige Anzahl geöffneter Einheiten verfügt.
ENODEW Gibt einen der folgenden Umstände an:
  • Es wurde versucht, auf eine nicht definierte Einheit zuzugreifen.
  • Es wurde versucht, eine nicht definierte Einheit zu schließen.
ENOTREADY (BEREIT) Gibt an, dass sich kein Datenträger im Laufwerk befindet
ENXIO

Gibt einen der folgenden Umstände an:

  • Die Subroutine ioctl hat einen ungültigen Parameter angegeben.
  • Eine Lesen -oder Schreiben -Operation wurde über das Ende der Festplatte hinaus versucht.
EPERM Gibt an, dass die versuchte Subroutine die entsprechende Berechtigung erfordert.
ESTALE Zeigt an, dass eine schreibgeschützte optische Platte ausgegeben wurde (ohne zuerst vom Benutzer geschlossen zu werden) und dann entweder wieder eingesetzt oder durch eine zweite optische Platte ersetzt wurde.
EZEITDOUT Zeigt an, dass eine E/A-Operation den angegebenen Zeitgeberwert überschritten hat.
EWRPROTECT Gibt einen der folgenden Umstände an:
  • Eine Öffnen -Operation, die den Modus Schreib-/Lesezugriff anfordert, wurde auf schreibgeschützten Datenträgern versucht.
  • Es wurde versucht, eine Schreiben -Operation für schreibgeschützte Datenträger auszuführen.

Informationen zur Zuverlässigkeit und Wartungsfreundlichkeit

SCSI-Festplatteneinheiten, CD-ROM-Laufwerke und optische Laufwerke mit Schreib-/Lesezugriff geben die folgenden Fehler zurück:

Element Beschreibung
ABGEBROCHENER BEFEHL Gibt an, dass die Einheit den Befehl beendet hat.
Adapterfehler Gibt an, dass der Adapter einen Fehler zurückgegeben hat.
GUTE FERTIGSTELLUNG Zeigt an, dass der Befehl erfolgreich ausgeführt wurde.
Hardwarefehler Zeigt einen nicht behebbaren Hardwarefehler während der Befehlsausführung oder während eines Selbsttests an.
Ungültige Anforderung Gibt an, dass ein falscher Befehl oder Befehlsparameter angegeben wurde.
Datenträgerfehler Gibt an, dass der Befehl mit einem nicht behebbaren Datenträgerfehler beendet wurde.
Nicht bereit Gibt an, dass die logische Einheit offline ist oder Datenträger fehlen.
Behobener Fehler Gibt an, dass der Befehl erfolgreich war, nachdem eine Wiederherstellung angewendet wurde.
Einheit muss überprüft werden. Gibt an, dass die Einheit zurückgesetzt oder eingeschaltet wurde.

Fehlersatzwerte für Datenträgerfehler

Die Felder, die in der Fehlerdatensatzschablone für Festplatten-, CD-ROM- und Schreib-/Lesefehler für optische Datenträger definiert sind, sind:

Element Beschreibung
Comment Zeigt einen Fehler auf der Festplatte, auf der CD-ROM oder auf einem optischen Datenträger mit Lese-/Schreibberechtigung an
Class Entspricht dem Wert H, der auf einen Hardwarefehler hinweist.
Report Entspricht dem Wert 'True', der angibt, dass dieser Fehler eingeschlossen werden muss, wenn ein Fehlerbericht generiert wird.
Log Entspricht dem Wert 'True', der angibt, dass ein Fehlerprotokolleintrag erstellt werden muss, wenn dieser Fehler auftritt.
Alert Entspricht dem Wert False, der angibt, dass dieser Fehler nicht alertfähig ist.
Err_Type Entspricht dem Wert Perm, der auf einen permanenten Fehler hinweist.
Err_Desc Entspricht dem Wert 1312, der auf einen Plattenbetriebsfehler hinweist.
Prob_Causes Entspricht dem Wert 5000, der Datenträger angibt.
User_Causes Entspricht dem Wert 5100, der angibt, dass der Datenträger fehlerhaft ist.
User_Actions Entspricht den folgenden Werten:
  • 1601: Gibt an, dass der austauschbare Datenträger ausgetauscht und erneut versucht werden muss.
  • 00E1 Fehlerbestimmungsprozeduren ausführen
Inst_Causes Ohne
Inst_Actions Ohne
Fail_Causes Entspricht den folgenden Werten:
  • 5000: Gibt einen Datenträgerfehler an.
  • 6310: Gibt einen Plattenlaufwerkfehler an.
Fail_Actions Entspricht den folgenden Werten:
  • 1601: Gibt an, dass der austauschbare Datenträger ausgetauscht und erneut versucht werden muss.
  • 00E1 Fehlerbestimmungsprozeduren ausführen
Detail_Data Entspricht dem Wert 156, 11, HEX. Dieser Wert gibt das Hexadezimalformat an.
Anmerkung: DieDetail_DataFeld in der Struktur Fehler_rec enthält die Struktur scsi_error_log_df . Die Struktur err_recist in der Datei /usr/include/sys/errids.h definiert. Die Struktur scsi_error_log_df ist in der Datei /usr/include/sys/scsi_buf.h definiert.

Die Struktur scsi_error_log_df enthält die folgenden Felder:

req_sense_data
Enthält die Anforderungsprüfdaten von der betreffenden Einheit, bei der der Fehler aufgetreten ist, sofern sie gültig sind.
dd1
Enthält die Anzahl der Segmente, d. h. die Anzahl der Megabyte, die von der Einheit gelesen wurden, als der Fehler auftrat.
dd2
Enthält die Anzahl der Byte, die seit der letzten Erhöhung der Segmentanzahl gelesen wurden
dd3
Enthält die Anzahl der Öffnungsvorgänge seit der Konfiguration des Geräts.

Informationen zum Format der Anforderungsprüfdaten für eine bestimmte Einheit finden Sie im SCSI-Spezifikation (Small Computer System Interface) .

Fehlerdatensatzwerte für Hardwarefehler

Die Felder, die in der Fehlerdatensatzschablone für Festplatten-, CD-ROM- und Schreib-/Lesefehler für optische Hardware definiert sind, sowie die folgenden Fehler für fest abgebrochene Befehle sind:

Element Beschreibung
Comment Zeigt einen Hardwarefehler bei Festplatte, CD-ROM oder optischer Schreib-/Leseeinheit an.
Class Entspricht dem Wert H, der auf einen Hardwarefehler hinweist.
Report Entspricht dem Wert 'True', der angibt, dass dieser Fehler eingeschlossen werden muss, wenn ein Fehlerbericht generiert wird.
Log Entspricht dem Wert 'True', der angibt, dass ein Fehlerprotokolleintrag erstellt werden muss, wenn dieser Fehler auftritt.
Alert Entspricht dem Wert FALSE, der angibt, dass dieser Fehler nicht alertfähig ist.
Err_Type Entspricht dem Wert Perm, der auf einen permanenten Fehler hinweist.
Err_Desc Entspricht dem Wert 1312, der auf einen Plattenbetriebsfehler hinweist.
Prob_Causes Entspricht dem Wert 6310, der das Plattenlaufwerk angibt.
User_Causes Ohne
User_Actions Ohne
Inst_Causes Ohne
Inst_Actions Ohne
Fail_Causes Entspricht den folgenden Werten:
  • 6310: Gibt einen Plattenlaufwerkfehler an.
  • 6330: Gibt einen Elektronikfehler des Plattenlaufwerks an.
Fail_Actions Entspricht dem Wert 00E1, der angibt, dass Fehlerbestimmungsprozeduren ausgeführt werden müssen
Detail_Data Entspricht dem Wert 156, 11, HEX. Dieser Wert gibt das Hexadezimalformat an.
Anmerkung: DieDetail_DataFeld in der Struktur Fehler_rec enthält die Struktur scsi_error_log_df . Die Struktur err_recist in der Datei /usr/include/sys/errids.h definiert. Die Struktur scsi_error_log_df ist in der Datei /usr/include/sys/scsi_buf.h definiert.

Die Struktur scsi_error_log_df enthält die folgenden Felder:

req_sense_data
Enthält die Anforderungsprüfdaten von der betreffenden Einheit, bei der der Fehler aufgetreten ist, sofern sie gültig sind.
dd1
Enthält die Anzahl der Segmente, d. h. die Anzahl der Megabyte, die von der Einheit gelesen wurden, als der Fehler auftrat.
dd2
Enthält die Anzahl der Byte, die seit der letzten Erhöhung der Segmentanzahl gelesen wurden
dd3
Enthält die Anzahl der Öffnungsvorgänge seit der Konfiguration des Geräts.

Informationen zum Format der Anforderungsprüfdaten für eine bestimmte Einheit finden Sie im SCSI-Spezifikation (Small Computer System Interface) .

Fehlerdatensatzwerte für vom Adapter erkannte Hardwarefehler

Die Felder, die in der Fehlerdatensatzschablone für Festplatten-, CD-ROM- und Schreib-/Lesefehler für optische Datenträger definiert sind, sind vom Adapter erkannte Hardwarefehler:

Element Beschreibung
Comment Zeigt an, dass vom Adapter eine Festplatte, eine CD-ROM oder ein optischer Hardwarefehler beim Lesen/Schreiben festgestellt wurde.
Class Entspricht dem Wert H, der auf einen Hardwarefehler hinweist.
Report Entspricht dem Wert 'True', der angibt, dass dieser Fehler eingeschlossen werden muss, wenn ein Fehlerbericht generiert wird.
Log Entspricht dem Wert 'True', der angibt, dass ein Fehlerprotokolleintrag erstellt werden muss, wenn dieser Fehler auftritt.
Alert Entspricht dem Wert FALSE, der angibt, dass dieser Fehler nicht alertfähig ist.
Err_Type Entspricht dem Wert Perm, der auf einen permanenten Fehler hinweist.
Err_Desc Entspricht dem Wert 1312, der auf einen Plattenbetriebsfehler hinweist.
Prob_Causes Entspricht den folgenden Werten:
  • 3452: Gibt einen Fehler des Einheitenkabels an
  • 6310: Gibt einen Plattenlaufwerkfehler an.
User_Causes Ohne
User_Actions Ohne
Inst_Causes Ohne
Inst_Actions Ohne
Fail_Causes Entspricht den folgenden Werten:
  • 3452: Gibt einen Kabelfehler der Speichereinheit an.
  • 6310: Gibt einen Plattenlaufwerkfehler an.
  • 6330, gibt einen Elektronikfehler des Plattenlaufwerks an
Fail_Actions Der Wert 0000 bedeutet, dass Fehlerbestimmungsprozeduren ausgeführt werden müssen.
Detail_Data Entspricht dem Wert 156, 11, HEX. Dieser Wert gibt das Hexadezimalformat an.
Anmerkung: DieDetail_DataFeld in der Struktur Fehler_rec enthält die Struktur scsi_error_log_df . Die Struktur err_recist in der Datei /usr/include/sys/errids.h definiert. Die Struktur scsi_error_log_df ist in der Datei /usr/include/sys/scsi_buf.h definiert.

Die Struktur scsi_error_log_df enthält die folgenden Felder:

req_sense_data
Enthält die Anforderungsprüfdaten von der betreffenden Einheit, bei der der Fehler aufgetreten ist, sofern sie gültig sind.
dd1
Enthält die Anzahl der Segmente, d. h. die Anzahl der Megabyte, die von der Einheit gelesen wurden, als der Fehler auftrat.
dd2
Enthält die Anzahl der Byte, die seit der letzten Erhöhung der Segmentanzahl gelesen wurden
dd3
Enthält die Anzahl der Öffnungsvorgänge seit der Konfiguration des Geräts.

Informationen zum Format der Anforderungsprüfdaten für eine bestimmte Einheit finden Sie im SCSI-Spezifikation (Small Computer System Interface) .

Fehlerdatensatzwerte für behobene Fehler

Die Felder, die in der Fehlerdatensatzschablone für Festplatte, CD-ROM und wiederhergestellte Fehler beim Lesen/Schreiben optischer Datenträger definiert sind, sind:

Element Beschreibung
Comment Zeigt einen Fehler auf der Festplatte, auf der CD-ROM oder beim Lesen/Schreiben des optischen Datenträgers an.
Class Entspricht dem Wert H, der auf einen Hardwarefehler hinweist.
Report Entspricht dem Wert 'True', der angibt, dass dieser Fehler eingeschlossen werden muss, wenn ein Fehlerbericht generiert wird.
Log Entspricht dem Wert 'True', der angibt, dass ein Fehlerprotokolleintrag erstellt werden muss, wenn dieser Fehler auftritt.
Alert Entspricht dem Wert FALSE, der angibt, dass dieser Fehler nicht alertfähig ist.
Err_Type Entspricht dem Wert Temp, der auf einen temporären Fehler hinweist.
Err_Desc Entspricht dem Wert 1312, der auf einen Fehler beim Betrieb eines physischen Datenträgers hinweist.
Prob_Causes Entspricht den folgenden Werten:
  • 5000: Gibt einen Datenträgerfehler an.
  • 6310: Gibt einen Plattenlaufwerkfehler an.
User_Causes Entspricht dem Wert 5100, der auf einen fehlerhaften Datenträger hinweist.
User_Actions Entspricht den folgenden Werten:
  • 0000 gibt an, dass Problembestimmungsprozeduren ausgeführt werden müssen.
  • 1601: Gibt an, dass der austauschbare Datenträger ausgetauscht und erneut versucht werden muss.
Inst_Causes Ohne
Inst_Actions Ohne
Fail_Causes Entspricht den folgenden Werten:
  • 5000: Gibt einen Datenträgerfehler an.
  • 6310: Gibt einen Plattenlaufwerkfehler an.
Fail_Actions Entspricht den folgenden Werten:
  • 1601: Gibt an, dass der austauschbare Datenträger ausgetauscht und erneut versucht werden muss.
  • 00E1 Fehlerbestimmungsprozeduren ausführen
Detail_Data Entspricht dem Wert 156, 11, HEX. Dieser Wert gibt das Hexadezimalformat an.
Anmerkung: DieDetail_DataFeld in der Struktur Fehler_rec enthält die Struktur scsi_error_log_df . Die Struktur err_rec ist in der Datei /usr/include/sys/errids.h definiert. Die Struktur scsi_error_log_df ist in der Datei /usr/include/sys/scsi_buf.h definiert.

Die Struktur scsi_error_log_df enthält die folgenden Felder:

req_sense_data
Enthält die Anforderungsprüfdaten von der betreffenden Einheit, bei der der Fehler aufgetreten ist, sofern sie gültig sind.
dd1
Enthält die Anzahl der Segmente, d. h. die Anzahl der Megabyte, die von der Einheit gelesen wurden, als der Fehler auftrat.
dd2
Enthält die Anzahl der Byte, die seit der letzten Erhöhung der Segmentanzahl gelesen wurden
dd3
Enthält die Anzahl der Öffnungsvorgänge seit der Konfiguration des Geräts.

Informationen zum Format der Anforderungsprüfdaten für eine bestimmte Einheit finden Sie im SCSI-Spezifikation (Small Computer System Interface) .

Fehlerdatensatzwerte für unbekannte Fehler

Die Felder, die in der Fehlerdatensatzschablone für unbekannte Fehler auf Festplatte, CD-ROM und optischen Datenträgern mit Lese-/Schreibberechtigung definiert sind, sind:

Element Beschreibung
Comment Gibt einen unbekannten Fehler auf der Festplatte, auf der CD-ROM oder beim Lesen/Schreiben an.
Class Entspricht dem Wert H, der auf einen Hardwarefehler hinweist.
Report Entspricht dem Wert 'True', der angibt, dass dieser Fehler eingeschlossen werden muss, wenn ein Fehlerbericht generiert wird.
Log Entspricht dem Wert 'True', der angibt, dass ein Fehlerprotokolleintrag erstellt werden muss, wenn dieser Fehler auftritt.
Alert Entspricht dem Wert FALSE, der angibt, dass dieser Fehler nicht alertfähig ist.
Err_Type Entspricht dem Wert Unkn, der angibt, dass der Fehlertyp unbekannt ist.
Err_Desc Entspricht dem Wert FE00, der auf einen unbestimmten Fehler hinweist.
Prob_Causes Entspricht den folgenden Werten:
  • 3300: Gibt einen Adapterfehler an.
  • 5000: Gibt einen Datenträgerfehler an.
  • 6310: Gibt einen Plattenlaufwerkfehler an.
User_Causes Ohne
User_Actions Ohne
Inst_Causes Ohne
Inst_Actions Ohne
Fail_Causes Entspricht dem Wert FFFF, der angibt, dass die Fehlerursachen unbekannt sind.
Fail_Actions Entspricht den folgenden Werten:
  • 00E1 Fehlerbestimmungsprozeduren ausführen
  • 1601: Gibt an, dass der austauschbare Datenträger wieder ausgetauscht und wieder müde werden muss.
Detail_Data Entspricht dem Wert 156, 11, HEX. Dieser Wert gibt das Hexadezimalformat an.
Anmerkung: DieDetail_DataFeld in der Struktur Fehler_rec enthält die Struktur scsi_error_log_df . Die Struktur err_recist in der Datei /usr/include/sys/errids.h definiert. Die Struktur scsi_error_log_df ist in der Datei /usr/include/sys/scsi_buf.h definiert.

Die Struktur scsi_error_log_df enthält die folgenden Felder:

req_sense_data
Enthält die Anforderungsprüfdaten von der betreffenden Einheit, bei der der Fehler aufgetreten ist, sofern sie gültig sind.
dd1
Enthält die Anzahl der Segmente, d. h. die Anzahl der Megabyte, die von der Einheit gelesen wurden, als der Fehler auftrat.
dd2
Enthält die Anzahl der Byte, die seit der letzten Erhöhung der Segmentanzahl gelesen wurden
dd3
Enthält die Anzahl der Öffnungsvorgänge seit der Konfiguration des Geräts.

Informationen zum Format der Anforderungsprüfdaten für eine bestimmte Einheit finden Sie im SCSI-Spezifikation (Small Computer System Interface) .

Gerätedateien

Der scsidisk SCSI-Einheitentreiber verwendet unformatierte und blockorientierte Gerätedateien für die Ausführung seiner Funktionen.

Achtung: Datenverlust, Datenverlust oder Verlust der Systemintegrität (Systemabsturz) tritt auf, wenn Einheiten, die Paging, logische Datenträger oder angehängte Dateisysteme unterstützen, über blockorientierte Gerätedateien aufgerufen werden. Blockorientierte Gerätedateien werden für logische Datenträger und Platteneinheiten bereitgestellt und sind ausschließlich für die Systemverwendung bei der Verwaltung von Dateisystemen, Paging-Einheiten und logischen Datenträgern vorgesehen. Diese Dateien dürfen nicht für andere Zwecke verwendet werden.

Die Gerätedateien, die vom scsidisk -Einheitentreiber verwendet werden, umfassen Folgendes (nach Einheitentyp aufgelistet):

  • Festplatteneinheiten:
    Element Beschreibung
    /dev/rhdisk0, /dev/rhdisk1,..., /dev/rhdiskn Stellen Sie eine Schnittstelle bereit, um den Zeichenzugriff von SCSI-Einheitentreibern (unformatierte E/A-Zugriffs-und Steuerfunktionen) auf SCSI-Festplatten zu ermöglichen.
    /dev/hdisk0, /dev/hdisk1,..., /dev/hdiskn Stellen Sie eine Schnittstelle bereit, damit SCSI-Einheitentreiber den E/A-Zugriff auf SCSI-Festplatten blockieren können.
  • CD-ROM-Einheiten:
    Element Beschreibung
    /dev/rcd0, /dev/rcd1,..., /dev/rcdn Stellen Sie eine Schnittstelle bereit, um den Zeichenzugriff von SCSI-Einheitentreibern (unformatierte E/A-Zugriffs-und Steuerfunktionen) auf SCSI-CD-ROM-Platten zuzulassen.
    /dev/cd0, /dev/cd1,..., /dev/cdn Stellen Sie eine Schnittstelle bereit, damit SCSI-Einheitentreiber den E/A-Zugriff auf SCSI-CD-ROM-Platten blockieren können.
  • Optische Einheiten mit Schreib-/Lesezugriff:
    Element Beschreibung
    /dev/romd0, /dev/romd1,..., /dev/romdn Stellen Sie eine Schnittstelle bereit, um SCSI-Einheitentreibern den Zeichenzugriff (unformatierte Ein-/Ausgabezugriffs-und Steuerfunktionen) auf optische SCSI-Einheiten mit Schreib-/Lesezugriff zu ermöglichen.
    /dev/omd0, /dev/omd1,..., /dev/omdn Stellen Sie eine Schnittstelle bereit, über die SCSI-Einheitentreiber den E/A-Zugriff auf optische SCSI-Einheiten mit Schreib-/Lesezugriff blockieren können.
    • Anmerkung: Das Präfix R für einen Gerätedateinamen gibt an, dass auf das Laufwerk als Roheinheit und nicht als Blockeinheit zugegriffen wird. Für die Ausführung einer unformatierten Ein-/Ausgabe mit einer Festplatte, einer CD-ROM oder einem optischen Laufwerk mit Schreib-/Lesezugriff müssen alle Datenübertragungen ein Vielfaches der Blockgröße der Einheit sein. Außerdem müssen alle Lseek -Subroutinen, die für den Roheinheitentreiber ausgeführt werden, einen Dateizeigerwert ergeben, der ein Vielfaches der Einheitenblockgröße ist.