Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: ✔️ общим папкам Azure SMB
В этой статье перечислены распространенные проблемы, которые могут возникнуть при использовании общих папок SMB Azure с клиентами Linux. Кроме того, здесь представлены возможные причины этих проблем и способы их устранения.
Внимание
Эта статья относится только к ресурсам SMB. Дополнительные сведения об общих папках NFS см. в статье Устранение проблем с общими папками NFS в Azure.
Выполнить диагностику
Средства диагностики помогают убедиться, что у клиентов выполнены необходимые предварительные условия, а также собирать отладочные данные о проблемах, возникающих в реальных условиях эксплуатации, которые бывает трудно воспроизвести.
Использование AzFileDiagnostics
Используйте AzFileDiagnostics , чтобы автоматизировать обнаружение симптомов и убедиться, что клиент Linux имеет правильные предварительные требования. Это средство помогает настроить среду для оптимальной производительности.
Используйте средство диагностики Always-On
Вы также можете использовать средство диагностики Always-On (AOD) для сбора журналов на клиентах Linux SMB и NFSv4. Управляющая программа выполняется в фоновом режиме в качестве системной службы и может быть настроена для обнаружения аномалий в различных источниках, таких как журналы dmesg, отладочные данные, метрики ошибок и метрики задержки. Он может записывать данные из tcpdump, nfsstat, mountstats и других источников, а также использования ЦП и памяти системы.
Средство диагностики Always-On в настоящее время совместимо с системами под управлением SUSE Linux Enterprise Server 15 (SLES 15) и Red Hat Enterprise Linux 8 (RHEL 8). Выполните действия по установке, соответствующие операционной системе:
В SLES 15 следуйте этим указаниям, чтобы установить средство постоянной диагностики:
Добавьте репозиторий Майкрософт. Возможно, потребуется добавить ключ репозитория Майкрософт в список доверенных ключей.
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo zypper addrepo --check --refresh --name 'Microsoft' https://packages.microsoft.com/sles/15/prod microsoftОбновите репозитории.
sudo zypper refreshПроверьте, добавляется ли репозиторий и
aodпакет доступен для установки.zypper search aodУстановите пакет .
sudo zypper install aod
Метки времени теряются при копировании файлов
На платформах Linux/Unix команда cp -p завершается ошибкой, если файл 1 и файл 2 принадлежат разным пользователям.
Причина
Флаг принудительного выполнения f в COPYFILE вызывает выполнение cp -p -f в Unix-системах. Этой команде также не удается сохранить метку времени файла, который вам не принадлежит.
Обходное решение
Используйте пользователя учетной записи хранения для копирования файлов:
str_acc_name=[storage account name]sudo useradd $str_acc_namesudo passwd $str_acc_namesu $str_acc_namecp -p filename.txt /share
ls: не удается получить доступ к "<path>": ошибка ввода-вывода
При попытке перечислить файлы в общей папке Azure с помощью ls команды команда зависает при перечислении файлов. Вы увидите следующую ошибку:
ls: не удается получить доступ к "<path>": ошибка ввода-вывода
Решение
Обновите ядро Linux до версии, которая включает исправление этой проблемы. Используйте одну из следующих версий:
- 4.4.87+
- 4.9.48+
- 4.12.11+
- Любая версия 4.13 или более поздняя
Не удается создать символьные ссылки — ln: не удалось создать символьную ссылку 't': операция не поддерживается
Причина
По умолчанию при подключении общих файловых ресурсов Azure в Linux с помощью SMB поддержка символических ссылок (symlinks) не включена. Может появиться сообщение об ошибке:
sudo ln -s linked -n t
ln: failed to create symbolic link 't': Operation not supported
Решение
Клиент SMB Linux не поддерживает создание символьных ссылок в стиле Windows по протоколу SMB 2 или 3. Сейчас клиент Linux поддерживает для операций создания и отслеживания символьные ссылки в другом стиле (Minshall/French). Пользователи, которым нужны символьные ссылки, могут использовать параметр монтирования mfsymlinks. Используйте mfsymlinks , так как это также формат, используемый Mac.
Чтобы использовать символические ссылки, добавьте следующий параметр в конец команды монтирования SMB:
,mfsymlinks
Поэтому команда выглядит следующим образом:
sudo mount -t cifs //<storage-account-name>.file.core.windows.net/<share-name> <mount-point> -o vers=<smb-version>,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino,mfsymlinks
Теперь вы сможете создавать символьные ссылки, как описано на вики-сайте.
Не удается получить доступ к папкам или файлам
Невозможно получить доступ к папкам или файлам из общей папки Azure во время подключения к Linux. Команды, такие как du и ls, и сторонние приложения могут завершаться с ошибкой «Нет такого файла или каталога» при доступе к общему ресурсу.
Причина 1
Папки или файлы имеют имена, содержащие символы, закодированные по-разному системой, которая отправляет их. Например, файлы, загруженные с клиента macOS, могут содержать символ 0xF028 или 0xF029 вместо 0x20 (пробела) или 0x2E (точки).
Решение 1
mapchars Используйте параметр при подключении общей папки в Linux.
Вместо:
sudo mount -t cifs $smbPath $mntPath -o vers=3.0,username=$storageAccountName,password=$storageAccountKey,serverino
Используйте:
sudo mount -t cifs $smbPath $mntPath -o vers=3.0,username=$storageAccountName,password=$storageAccountKey,serverino,mapchars
Причина 2
Если удалить файл, но оставить дескриптор открытым, сервер SMB сохраняет файл-зомби, пока не будет закрыт последний дескриптор этого файла. Любые попытки выполнить операции с этим зомби-файлом могут привести к ошибкам "Нет таких файлов или каталогов" в Linux.
Решение 2
При необходимости восстановите удаленный файл из последней резервной копии.
Проблемы DNS с динамической миграцией учетных записей хранения Azure
Операции ввода-вывода с файлами в смонтированной файловой системе начинают выдавать ошибки «Хост недоступен» или «Доступ запрещен». Журналы Dmesg Linux на клиенте показывают повторяющиеся ошибки, такие как:
Status code returned 0xc000006d STATUS_LOGON_FAILURE
cifs_setup_session: 2 callbacks suppressed
CIFS VFS: \\contoso.file.core.windows.net Send error in SessSetup = -13
Вы также видите, что FQDN сервера теперь разрешается в IP-адрес, отличный от того, к которому в данный момент установлено подключение. Эта проблема может возникнуть в любом случае, когда IP-адрес сервера может измениться, например миграция учетных записей. Другой известный сценарий — переключение при отказе учетной записи хранилища, так как сопоставление DNS может измениться.
Причина
Для балансировки ёмкости система иногда выполняет оперативную миграцию учётных записей хранилища из одного кластера хранилища в другой. Миграция учетных записей обновляет сопоставления DNS, указывающие на целевой кластер, который перенаправляет Файлы Azure трафик из исходного кластера в целевой кластер. Это обновление блокирует весь трафик исходного кластера из этой учетной записи. Ожидается, что клиент SMB будет получать обновления DNS и перенаправлять дальнейший трафик в целевой кластер. Однако из-за ошибки в SMB-клиенте ядра Linux это перенаправление не вступает в силу. В результате трафик данных продолжает переходить в исходный кластер, который перестает обслуживать эту учетную запись после миграции.
Обходное решение
Эту проблему можно устранить, перезагрузив клиентскую ОС, но вы можете снова столкнуться с проблемой, если вы не обновите клиентскую ОС до версии дистрибутива Linux с поддержкой миграции учетных записей.
Хотя отключение и повторное подключение общего ресурса может временно устранить проблему, это не является окончательным решением. При повторном подключении клиента к серверу может возникнуть проблема. Это временное решение обусловлено тем, что новая операция монтирования обходит кэш SMB в ядре и разрешает DNS-адрес в пользовательском пространстве. Однако кэш DNS ядра используется при любом восстановлении сетевого подключения после разрыва, из-за чего проблема может возникнуть снова. Это поведение сохраняется даже за пределами миграции учетных записей хранения.
Чтобы лучше обойти эту проблему, снимите кэш сопоставителя DNS ядра:
Отображение состояния модуля ядра
dns_resolver, выполнив следующую команду:grep '.dns_resolver' /proc/keysВы должны увидеть выходные данные команды, как показано в следующем примере:
132b6bbf I------ 1 perm 1f030000 0 0 keyring .dns_resolver: 1Снимите кэш сопоставителя DNS ядра, выполнив следующую команду:
sudo keyctl clear $((16#$(grep '.dns_resolver' /proc/keys | cut -f1 -d\ ) ))Снова отобразите состояние модуля ядра
dns_resolver:grep '.dns_resolver' /proc/keysВы должны увидеть результат выполнения команды, примерно как в следующем примере, что означает, что кэш теперь пуст:
132b6bbf I------ 1 perm 1f030000 0 0 keyring .dns_resolver: emptyРазмонтируйте и снова смонтируйте общий ресурс, чтобы устранить проблему.
Примечание.
В некоторых старых дистрибутивах Linux шаги по устранению рисков могут не работать. В таких случаях перезагрузка клиентской ОС временно решает проблему. Чтобы окончательно устранить проблему, добавьте частную конечную точку для вашей учетной записи хранения и подключитесь к файловому ресурсу с помощью частного канала.
Решение
Для окончательного исправления обновите клиентскую ОС до версии дистрибутива Linux с поддержкой переноса учетных записей. Несколько исправлений для клиента ядра SMB Linux отправляются в основное ядро Linux. Следующие дистрибутивы включают следующие исправления:
- Ubuntu: 20.04, 22.04, 24.04 и AKS 22.04 (исправления развертываются в ядре версии 5.15.0-1068)
- RHEL: 8.6+
- SLES: 15SP2, 15SP3, 15SP4 и 15SP5
- Azure Linux: 2.0 (исправления включены в версию ядра 5.15.159.1) и 3.0
Некоторые дистрибутивы поддерживают эти исправления. Проверьте, существуют ли следующие исправления в используемой версии дистрибутива:
CIFS: установка 120 с в качестве минимального времени для следующего разрешения DNS
CIFS: для сопоставления файловых серверов убедитесь, что имя узла сервера совпадает
CIFS: исправление утечки памяти в smb3_fs_context_dup::server_hostname
dns: применить TTL по умолчанию к записям, полученным через getaddrinfo()
ключи: исправлена перезапись срока действия ключа при инициализации
Не удается подключить общую папку SMB при включении FIPS
При включении федерального стандарта обработки информации (FIPS) на виртуальной машине Linux невозможно подключить общую папку SMB. Журналы dmesg Linux на клиенте отображают такие ошибки, как:
kernel: CIFS: VFS: Could not allocate crypto hmac(md5)
kernel: CIFS: VFS: Error -2 during NTLMSSP authentication
kernel: CIFS: VFS: \\contoso.file.core.windows.net Send error in SessSetup = -2
kernel: CIFS: VFS: cifs_mount failed w/return code = -2
Внимание
FIPS — это набор стандартов, которые правительство США использует для обеспечения безопасности и целостности компьютерных систем. Если система находится в режиме FIPS, она соответствует определенным требованиям шифрования, описанным в этих стандартах.
Причина
Клиент общей папки SMB использует проверку подлинности NTLMSSP, которая требует алгоритма хэширования MD5. Однако в режиме FIPS алгоритм MD5 ограничен, так как он не соответствует FIPS. MD5 — это широко используемая хэш-функция, которая создает 128-разрядное хэш-значение. Однако MD5 считается небезопасным для криптографических целей.
Как проверить, включен ли режим FIPS
Чтобы проверить, включен ли режим FIPS на клиенте, выполните следующую команду. Если значение установлено равным 1, то FIPS включён.
sudo cat /proc/sys/crypto/fips_enabled
Решение
Чтобы устранить эту проблему, включите проверку подлинности Kerberos для общей папки SMB. Если FIPS включен непреднамеренно, обратитесь к параметру 2 , чтобы отключить его.
Вариант 1. Включение проверки подлинности Kerberos для общей папки SMB
Чтобы подключить файловый ресурс SMB на виртуальной машине Linux с включенным FIPS, используйте аутентификацию на основе удостоверений. Дополнительные сведения см. в статье Включение проверки подлинности Active Directory через SMB для клиентов Linux, получающих доступ к Файлы Azure.
Вариант 2. Отключение FIPS для подключения общей папки Samba
Измените значение
crypto.fips_enabledsysctl на 0 в/etc/sysctl.conf.Измените
GRUB_CMDLINE_LINUX_DEFAULTв файле/etc/default/grubи удалите параметрfips=1.Перестройте файл конфигурации grub2 с помощью следующей команды:
sudo grub2-mkconfig -o /boot/grub2/grub.cfgПерестройте образ initramfs с помощью следующей команды:
sudo dracut -fvПерезагрузите виртуальную машину.
Дополнительные сведения см. в следующих документах от распространителей Linux:
- RedHat: Почему включение режима FIPS в ядре может нарушить монтирование CIFS-ресурсов
- SUSE: сбой подключения CIFS с ошибкой "Ошибка подключения(2): нет такого файла или каталога"
Нужна помощь?
Если вам все еще нужна помощь, обратитесь в службу поддержки, которая поможет быстро устранить проблему.
См. также
- Устранение неполадок файлов Azure
- Устранение проблем с производительностью Файлы Azure
- Устранение неполадок подключения к Файлы Azure (SMB)
- Устранение неполадок аутентификации и авторизации Файлы Azure (SMB)
- Устранение общих проблем NFS в Файлы Azure в Linux
- Устранение неполадок Синхронизация файлов Azure