Freigeben über


Problembehandlung von ClientOtherErrors in Azure Files

Gilt für: ✔️ SMB Azure-Dateifreigaben

In diesem Artikel werden die ClientOtherErrors aufgeführt, die bei verwendung von SMB Azure-Dateifreigaben auftreten können. Im Allgemeinen sind ClientOtherErrors meist harmlos und erwartet Fehler. Anforderungen schlagen fehl, das System verhält sich jedoch weiterhin wie erwartet. Es ist normal, dass eine erhebliche Menge dieser Fehler protokolliert wird.

Was sind ClientOtherErrors?

ClientOtherError bedeutet in der Regel erwartete clientseitige Fehler, z. B. "Nicht gefunden" und "Ressource ist bereits vorhanden". In den serverseitigen Speicherprotokolldateien werden diese Vorgänge mit einem Transaktionsstatus von ClientOtherErrors aufgezeichnet.

Beispielsweise kennt der Windows-SMB-Client, der mit Remotedateisystemen interagiert, nicht immer die Funktionen des Remotedateisystems. Es kann sich um Windows Server, Azure Files oder eine andere SMB-Serverimplementierung handeln. Daher führt der SMB-Client Aufrufe an den Remotedateiserver mit bestimmten APIs durch. Wenn diese APIs fehlschlagen, fällt sie auf die Verwendung einer anderen API zurück oder ignorieren sie einfach nur diese Fehler. Je nach Anforderungs-/Antwortprotokoll von SMB wird erwartet, dass eine große Anzahl von Anforderungen fehlschlägt, obwohl sich das System ordnungsgemäß verhält. Dies kann auf Autorisierungsfehler zurückzuführen sein, versuche, eine Datei mit einem Namen zu erstellen, der bereits vorhanden ist, oder versuche, eine Datei zu öffnen, die nicht vorhanden ist.

Protokollierung und Berichterstellung

Zur Problembehandlung von ClientOtherErrors können Sie eine Diagnoseeinstellung erstellen und Azure Monitor für die Berichterstellung verwenden. Sie können protokolle auch analysieren, um fehlgeschlagene Anforderungen anzuzeigen, einschließlich ClientOtherErrors, oder Kusto-Abfragen verwenden.

Sie können auch eine ProcMon-Ablaufverfolgung von einem Client sammeln, die der in den Protokollen angezeigten IP-Adresse entspricht. Fügen Sie einen Filter hinzu, um nur den Datenverkehr zu Azure Files anzuzeigen.

Abfrage ClientOtherErrors in Log Analytics

Nachdem Sie die Diagnoseprotokollierung für Ihr Speicherkonto aktiviert haben, können Sie mithilfe von Log Analytics bestimmte ClientOtherErrors abfragen. ClientOtherErrors werden mit einer StatusText protokolliert, die mit "ClientOtherError" beginnt und den spezifischen Fehlercode enthält.

Abfrage zur Ansicht von ClientOtherErrors

StorageFileLogs
| where StatusText startswith "ClientOtherError"
| project TimeGenerated, StatusText, StatusCode, OperationName, Uri, CallerIpAddress
| order by TimeGenerated desc

Abfrage zum Zählen von Fehlern nach Typ

StorageFileLogs
| where StatusText startswith "ClientOtherError"
| summarize Count = count() by StatusText, OperationName
| order by Count desc

Allgemeine ClientOtherError-Codes und Erläuterungen

Die folgende Tabelle ordnet spezifische Fehlercodes ihren Erklärungen zu. Diese Fehler werden im StatusText Feld als "ClientOtherError;[ErrorCode];[ErrorName]" (z. B. "ClientOtherError;492;STATUS_ACCESS_DENIED") angezeigt.

Vorgang Statuscode Statusname Erläuterung des Fehlers
QueryFullEaInformation 0xC00000BB STATUS_NOT_IMPLEMENTED Dieser Fehler wird zurückgegeben, da Azure Files diese API nicht implementiert. Azure Files unterstützt derzeit keine erweiterten Attribute.
UnknownFileClass=48 0xC00000BB STATUS_NOT_SUPPORTED Dies ist der FileNormalizedNameInformation API-Aufruf. Dies ist neue Unterstützung für Windows Server, und derzeit unterstützt Azure Files diese API nicht.
FileOpen 0xC0000022 (492) STATUS_ACCESS_DENIED Der Aufrufer verfügt nicht über die erforderlichen Berechtigungen zum Öffnen der Datei. Im Falle des Kerberos-Zugriffs verweigert die ACL den Zugriff des Anrufers.
FileOpen 0xC0000033 (257) STATUS_OBJECT_NAME_INVALID Der Pfad für die offene Anforderung ist ungültig (z. B. ist der Pfad zu lang oder zu tief).
FileOpen 0xC00000BA (12) STATUS_FILE_IS_ADIRECTORY Der Aufrufer öffnet ein Verzeichnis, ohne die richtigen CreateFile Parameter zu verwenden (z. B. Sicherungsabsicht).
FileOpen 0xC0000043 (8) STATUS_SHARING_VIOLATION (Teilungsverletzung) Der Aufrufer öffnet eine Datei, die bereits mit Einschränkungen geöffnet ist (z. B. exklusiv oder andere können nur gelesen werden).
FileOpen 0xC0000034 (6) STATUS_OBJECT_NAME_NOT_FOUND Der Aufrufer öffnet eine Datei, die nicht vorhanden ist.
FSCTL_QUERY_NETWORK_INTERFACE_INFO (IOCTL) 0xC0000010 STATUS_INVALID_DEVICE_REQUEST Dies wird nur für Azure Files verwendet, wenn Kunden das Multichannel-Feature aktiviert haben. In anderen Fällen ist sie nicht erforderlich, und wir geben eine ungültige Geräteanforderung zurück, wenn sie vom Client abgefragt wird.
QueryStreamInformation 0xC00000BB STATUS_NOT_IMPLEMENTED Einige Dateisysteme haben das Konzept alternativer Datenströme oder anderer Datenströme , z. B. Analysepunktdatenstrom. Azure Files hat dieses Konzept nicht, daher wird die API nicht unterstützt.
Unerwartet (IOCTL) 0xC0000010 STATUS_INVALID_DEVICE_REQUEST Dies ist ein FSCTL_QUERY_FILE_REGIONS, das für NTFS/Refs spezifisch ist und in Bezug auf Azure Files nicht sinnvoll ist. Aus diesem Grund implementieren wir diesen FSCTL-Code nicht.
ChangeNotify 0xC0000120 STATUS_CANCELLED Anwendungen wie Windows Shell-Explorer abonnieren Änderungsbenachrichtigungen für Dateien. Auf diese Weise wird der Windows Shell-Explorer automatisch in der Ansicht aktualisiert, wenn eigenschaften in einer Datei geändert werden. Der Client kann sich entscheiden, dieses Abonnement zu kündigen (z. B. wenn der Benutzer Ansichten im Explorer geändert hat und es nicht mehr benötigt). In diesem Fall senden STATUS_CANCELLED wir an den Kunden zurück, um zu bestätigen, dass das Abonnement storniert wurde.
FSCTL_DFS_GET_REFERRALS (IOCTL) 0xC000019C STATUS_FS_DRIVER_REQUIRED Dies ist eine DFS-Empfehlungsanforderung. Azure Files unterstützt DFS nicht, und dies ist der richtige Status, der zurückgegeben werden soll, wenn das System DFS nicht unterstützt.
FileSupersede 0xC0000022 STATUS_ACCESS_DENIED Die Datei übergeordnet ist ein Vorgang, bei dem eine vorhandene Datei gelöscht wird und eine neue Datei an deren Stelle platziert wird. Wenn der Aufrufer nicht über die Berechtigung zum Löschen der vorhandenen Datei verfügt, schlägt der Aufruf fehl.
FileCreate 0xC0000033 (7) STATUS_OBJECT_NAME_INVALID Dies geschieht, wenn eine Anforderung zum Erstellen einer neuen Datei einen ungültigen angeforderten Namen hat (z. B. mit nicht unterstützten Zeichen).
FileCreate 0xC0000035 (3) STATUS_OBJEKTNAMENKOLLISION Dies geschieht, wenn eine Anforderung zum Erstellen einer neuen Datei über einen angeforderten Namen verfügt, der einer vorhandenen Datei entspricht.
Lesen Sie 0xC0000022 STATUS_ACCESS_DENIED Dies geschieht, wenn eine Leseanforderung für eine Datei mit einem Handle erfolgt, das nicht über den gewährten Lesezugriff verfügt (z. B. wurde die Datei mit dem gewünschten Schreibzugriff geöffnet).
TreeConnect 0xC0000022 STATUS_ACCESS_DENIED Im Kontext der Kerberos-Authentifizierung verfügt der Aufrufer nicht über Berechtigungen auf Freigabeebene, die über RBAC oder eine Standardberechtigung auf Freigabeebene zugewiesen sind. Computer-Identitäten erhalten konsequent diesen Zugriffsfehler auf der Freigabe, wenn keine Berechtigung auf der Freigabeebene festgelegt wurde.

Abfragebeispiele für allgemeine Szenarien

Im Folgenden finden Sie einige Beispiele für allgemeine Kusto-Abfragen, die hilfreich sein können.

Authentifizierungs- und Berechtigungsfehler

StorageFileLogs
| where StatusText has "STATUS_ACCESS_DENIED"
| where OperationName in ("FileOpen", "TreeConnect", "Read", "FileSupersede")
| project TimeGenerated, OperationName, Uri, CallerIpAddress, AuthenticationType, RequesterUpn
| order by TimeGenerated desc

Datei-nicht-gefunden-Fehler

StorageFileLogs
| where StatusText has "STATUS_OBJECT_NAME_NOT_FOUND"
| project TimeGenerated, Uri, CallerIpAddress, OperationName
| order by TimeGenerated desc

Ungültige Dateivorgänge wie Dateinamen, Dateipfade und Freigabeverletzungen

StorageFileLogs
| where StatusText has_any ("STATUS_OBJECT_NAME_INVALID", "STATUS_SHARING_VIOLATION", "STATUS_OBJECT_NAME_COLLISION")
| project TimeGenerated, StatusText, OperationName, Uri, CallerIpAddress
| order by TimeGenerated desc

Top-Clients, die ClientOtherErrors generieren

StorageFileLogs
| where StatusText startswith "ClientOtherError"
| summarize ErrorCount = count() by CallerIpAddress, bin(TimeGenerated, 1h)
| order by ErrorCount desc

Siehe auch