Поделиться через


Устранение неполадок ClientOtherErrors в Файлы Azure

Область применения: ✔️ файловые хранилища SMB Azure

В этой статье перечислены клиенты ClientOtherErrors, которые могут возникнуть при использовании общих папок SMB Azure. Как правило, ClientOtherErrors в основном являются безвредными и ожидаемыми ошибками. Запросы завершаются сбоем, но система продолжает вести себя должным образом. Это нормально, чтобы увидеть значительное количество этих ошибок, зарегистрированных.

Что такое ClientOtherErrors?

ClientOtherError обычно означает ожидаемые ошибки на стороне клиента, такие как "не найдено" и "ресурс уже существует". В файлах журнала хранилища на стороне сервера эти операции записываются с состоянием транзакции ClientOtherErrors.

Например, клиент Windows SMB, взаимодействующий с удаленными файловыми системами, не всегда знает возможности удаленной файловой системы. Это может быть Windows Server, Файлы Azure или другая реализация сервера SMB. Поэтому клиент SMB будет вызывать удаленный файловый сервер с определенными API. Если эти API не удается, он будет возвращаться к использованию другого API или даже просто игнорировать эти ошибки. В зависимости от протокола SMB запроса и ответа ожидается сбой большого количества запросов, даже если система работает правильно. Это может быть связано с ошибками авторизации, попытками создать файл с именем, который уже существует, или пытается открыть файл, который не существует.

Ведение журналов и создание отчетов

Чтобы устранить неполадки ClientOtherErrors, можно создать параметр диагностики и использовать Azure Monitor для создания отчетов. Вы также можете анализировать журналы для просмотра неудачных запросов, включая ClientOtherErrors, или использовать запросы Kusto.

Вы также можете собирать трассировку ProcMon из клиента, который соответствует IP-адресу, показанным в журналах. Добавьте фильтр, чтобы просмотреть только трафик к Файлы Azure.

Запрос ClientOtherErrors в Log Analytics

После того как вы включите ведение журнала диагностики для учетной записи хранилища, с помощью Log Analytics можно будет создать запрос на поиск определённых ошибок клиентских приложений (clientOtherErrors). ClientOtherErrors регистрируются в журнале с StatusText кодом, который начинается с ClientOtherError и содержит конкретный код ошибки.

Запрос для просмотра ClientOtherErrors

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

Запрос для подсчета ошибок по типу

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

Общие коды и объяснения ClientOtherError

В следующей таблице приведены конкретные коды ошибок с их объяснениями. Эти ошибки отображаются в StatusText поле "ClientOtherError;[ ErrorCode]; [ErrorName]" (например, ClientOtherError; 492; STATUS_ACCESS_DENIED").

Операция Код состояния Имя состояния Объяснение ошибки
QueryFullEaInformation 0xC00000BB STATUS_NOT_IMPLEMENTED Этот сбой возвращается, так как Файлы Azure не реализует этот API. Файлы Azure сейчас не поддерживает расширенные атрибуты.
UnknownFileClass=48 0xC00000BB STATUS_NOT_SUPPORTED Это FileNormalizedNameInformation вызов API. Это новая поддержка Windows Server, и в настоящее время Файлы Azure не поддерживает этот API.
FileOpen 0xC0000022 (492) STATUS_ACCESS_DENIED Вызывающий объект не имеет необходимых разрешений для открытия файла. В случае доступа Kerberos ACL запрещает вызывающий доступ.
FileOpen 0xC0000033 (257) STATUS_OBJECT_NAME_INVALID Путь для открытого запроса недопустим (например, путь слишком длинный или слишком глубокий).
FileOpen 0xC00000BA (12) ФАЙЛ_ЯВЛЯЕТСЯ_ДИРЕКТОРИЕЙ Вызывающий объект открывает каталог без использования правильных CreateFile параметров (например, намерение резервного копирования).
FileOpen 0xC0000043 (8) НАРУШЕНИЕ_ДОСТУПА_К_СОВМЕСТНОМУ_ИСПОЛЬЗОВАНИЮ Вызывающий объект открывает файл, который уже открыт с ограничениями (например, эксклюзивные или другие могут читать только).
FileOpen 0xC0000034 (6) STATUS_OBJECT_NAME_NOT_FOUND Вызывающий объект открывает файл, который не существует.
Запрос информации о сетевом интерфейсе FSCTL (IOCTL) 0xC0000010 STATUS_INVALID_DEVICE_REQUEST Это используется только для Файлы Azure, если клиенты включили функцию многоканального канала. В других случаях это не требуется, и мы возвращаем недопустимый запрос устройства при запросе от клиента.
QueryStreamInformation 0xC00000BB STATUS_NOT_IMPLEMENTED Некоторые файловые системы имеют концепцию альтернативных потоков данных или других потоков , таких как поток точки повторного анализа. Файлы Azure не имеет этой концепции, поэтому мы не поддерживаем API.
Непредвиденное (IOCTL) 0xC0000010 STATUS_INVALID_DEVICE_REQUEST FSCTL_QUERY_FILE_REGIONSЭто понятие региона, относящееся к NTFS/refs и не имеет смысла в отношении Файлы Azure. По этой причине мы не реализуем этот код FSCTL.
ChangeNotify 0xC0000120 STATUS_CANCELLED Приложения, такие как обозреватель оболочки Windows, подписываются на уведомления об изменениях файлов. Таким образом, когда свойства изменяются в файле, обозреватель оболочки Windows автоматически обновляется в представлении. Клиент может отменить эту подписку (например, если пользователь изменил представления в обозревателе и больше не нуждается в ней). В этом случае мы отправим STATUS_CANCELLED клиенту обратно, чтобы подтвердить, что подписка отменена.
FSCTL_DFS_GET_REFERRALS (IOCTL) 0xC000019C STATUS_FS_DRIVER_REQUIRED Это запрос на рефералов DFS. Файлы Azure не поддерживает DFS, и это правильное состояние для возврата, когда система не поддерживает DFS.
FileSupersede 0xC0000022 STATUS_ACCESS_DENIED Замена файла — это операция удаления существующего файла, а новый файл помещается в его место. Если вызывающий объект не имеет разрешения на удаление существующего файла, вызов завершится ошибкой.
FileCreate 0xC0000033 (7) STATUS_OBJECT_NAME_INVALID Это происходит, когда запрос на создание нового файла имеет недопустимое запрошенное имя (например, при использовании неподдерживаемых символов).
FileCreate 0xC0000035 (3) СТАТУС_КОЛЛИЗИЯ_ИМЕНИ_ОБЪЕКТА Это происходит, когда запрос на создание нового файла имеет запрошенное имя, соответствующее существующему файлу.
Читать 0xC0000022 STATUS_ACCESS_DENIED Это происходит, когда запрос на чтение выполняется в файле с дескриптором, который не имеет предоставленного доступа на чтение (например, файл был открыт с требуемым доступом на запись).
TreeConnect 0xC0000022 STATUS_ACCESS_DENIED В контексте проверки подлинности Kerberos вызывающий объект не имеет разрешений на уровне общего доступа, назначенных через RBAC или разрешение уровня общего доступа по умолчанию. Идентификаторы компьютеров постоянно будут сталкиваться с этим сбоем доступа к общему ресурсу, если не установлено разрешение на уровне доступа к ресурсу.

Примеры запросов для распространенных сценариев

Ниже приведены некоторые примеры распространенных запросов Kusto, которые могут быть полезны.

Сбои проверки подлинности и разрешений

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

Ошибки «файл не найден»

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

Недопустимые операции с файлами, такие как именование, пути и нарушения общего доступа

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

Лучшие клиенты, создающие ClientOtherErrors

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

См. также