Нестабильное монтирование CIFS на CentOS 8

Вопрос или проблема

Недавно мы создали несколько серверов centOS 8 для запуска некоторых приложений springboot, которые монтируют несколько каталогов с
серверов Windows. Монтирование работает, но мы получаем много ошибок в случайное время дня.

пример вывода dmesg:

[Ср Окт 21 15:31:21 2020] CIFS VFS: Ошибка отправки в SessSetup = -11
[Ср Окт 21 18:59:56 2020] CIFS VFS: Ошибка отправки в SessSetup = -11
[Чт Окт 22 07:37:51 2020] CIFS VFS: Ошибка отправки в SessSetup = -11
[Чт Окт 22 08:28:37 2020] CIFS VFS: Ошибка отправки в SessSetup = -11
[Чт Окт 22 08:49:07 2020] CIFS VFS: Сервер XXXXXXX не ответил в течение 120 секунд. Повторное подключение...
[Чт Окт 22 11:07:38 2020] CIFS VFS: Ошибка отправки в SessSetup = -11
[Чт Окт 22 11:07:52 2020] CIFS VFS: Ошибка отправки в SessSetup = -11
[Чт Окт 22 14:20:52 2020] CIFS VFS: Ошибка отправки в SessSetup = -11
[Чт Окт 22 17:22:24 2020] CIFS VFS: Ошибка отправки в SessSetup = -11
[Пт Окт 23 06:33:03 2020] CIFS VFS: Ошибка отправки в SessSetup = -11
[Пт Окт 23 06:35:03 2020] CIFS VFS: Сервер XXXXXXX не ответил в течение 120 секунд. Повторное подключение...
[Пт Окт 23 08:27:45 2020] CIFS VFS: Ошибка отправки в SessSetup = -11
[Пт Окт 23 08:28:06 2020] CIFS VFS: Ошибка отправки в SessSetup = -11

Проблема не возникает, когда мы монтируем тот же каталог с centOS 7

Монтирование

centOS 7

//SERVER/DATA на /mnt/data типа cifs (rw,nosuid,noexec,relatime,vers=3.0,cache=strict,username=data_user,domain=xxx.xxx.xxx,uid=1000,forceuid,gid=1000,forcegid,addr=xxx.xx.x.xx,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,echo_interval=60,actimeo=1)

centOS 8

//SERVER/DATA на /mnt/data типа cifs (rw,nosuid,noexec,relatime,vers=3.0,cache=strict,username=data_user,domain=xxx.xxx.xxx,uid=1000,forceuid,gid=1000,forcegid,addr=xxx.xx.x.xx,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,bsize=65536,echo_interval=60,actimeo=1)

Версия ядра и пакетов

+-----------+-----------------------------+-----------------------------+
|   prop    |          CentOS 7           |          centOS 8           |
+-----------+-----------------------------+-----------------------------+
| kernel    | 3.10.0-1127.18.2.el7.x86_64 | 4.18.0-147.8.1.el8_1.x86_64 |
| cifs-util | 6.2-10.el7                  | 6.8-3.el8                   |
+-----------+-----------------------------+-----------------------------+

Вот точная последовательность, приводящая к ошибке на CentOS 8, с включенным отладочным режимом cifs:

[Чт Окт 22 10:04:58 2020] fs/cifs/dir.c: имя: \data
[Чт Окт 22 10:04:58 2020] fs/cifs/dir.c: имя: \data
[Чт Окт 22 10:04:58 2020] fs/cifs/inode.c: Обновление атрибутов: \data inode 0x00000000bc98fea9 count 1 dentry: 0x00000000bd47d1e0 d_time 15148690417 jiffies 15179170239
[Чт Окт 22 10:04:58 2020] fs/cifs/inode.c: Получение информации о \data
[Чт Окт 22 10:04:58 2020] fs/cifs/smb2ops.c: установить кредиты на 1 из-за smb2 повторного подключения
[Чт Окт 22 10:04:58 2020] fs/cifs/misc.c: Нулевой буфер передан в cifs_small_buf_release
[Чт Окт 22 10:04:58 2020] fs/cifs/smb2pdu.c: В запросе эха
[Чт Окт 22 10:04:58 2020] fs/cifs/smb2pdu.c: Нужно согласовать, повторное подключение tcons
[Чт Окт 22 10:04:58 2020] fs/cifs/smb2pdu.c: Протокол согласования
[Чт Окт 22 10:04:58 2020] fs/cifs/transport.c: Отправка smb: smb_len=106
[Чт Окт 22 10:04:58 2020] fs/cifs/smb2pdu.c: Протокол согласования
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: RFC1002 заголовок 0xf8
[Чт Окт 22 10:04:58 2020] fs/cifs/smb2misc.c: Длина данных SMB2 120 смещение 128
[Чт Окт 22 10:04:58 2020] fs/cifs/smb2misc.c: Длина SMB2 248
[Чт Окт 22 10:04:58 2020] fs/cifs/transport.c: cifs_sync_mid_result: cmd=0 mid=0 state=4
[Чт Окт 22 10:04:58 2020] fs/cifs/misc.c: Нулевой буфер передан в cifs_small_buf_release
[Чт Окт 22 10:04:58 2020] fs/cifs/smb2pdu.c: режим 0x1
[Чт Окт 22 10:04:58 2020] fs/cifs/smb2pdu.c: согласованный диалект smb3.0
[Чт Окт 22 10:04:58 2020] fs/cifs/asn1.c: OID длина = 10 oid = 0x1 0x3 0x6 0x1
[Чт Окт 22 10:04:58 2020] fs/cifs/asn1.c: OID длина = 7 oid = 0x1 0x2 0x348 0xbb92
[Чт Окт 22 10:04:58 2020] fs/cifs/asn1.c: OID длина = 7 oid = 0x1 0x2 0x348 0x1bb92
[Чт Окт 22 10:04:58 2020] fs/cifs/asn1.c: OID длина = 8 oid = 0x1 0x2 0x348 0x1bb92
[Чт Окт 22 10:04:58 2020] fs/cifs/asn1.c: OID длина = 10 oid = 0x1 0x3 0x6 0x1
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: Режим безопасности: 0x1 Возможности: 0x300067 ВремяРегулировка: 0
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: Освободить предыдущий auth_key.response = 00000000a46e9e42
[Чт Окт 22 10:04:58 2020] fs/cifs/smb2pdu.c: Настройка сеанса
[Чт Окт 22 10:04:58 2020] fs/cifs/smb2pdu.c: тип настройки sess 4
[Чт Окт 22 10:04:58 2020] fs/cifs/transport.c: Отправка smb: smb_len=124
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: Полученные данные или ошибка отсутствуют: -104
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: cifs_reconnect: будет повторная попытка 0 целевых
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: Пометить tcp сессию как нуждающуюся в повторном подключении
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: cifs_reconnect: пометить сеансы и tcons для повторного подключения
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: cifs_reconnect: разрушение сокета
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: Состояние: 0x3 Флаги: 0x0
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: Постфиксированные состояние: 0x3 Флаги: 0x0
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: cifs_reconnect: перенос mids в частный список
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: cifs_reconnect: выдача обратных вызовов mid
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: Сокет создан
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: sndbuf 16384 rcvbuf 87380 rcvtimeo 0x1b58
[Чт Окт 22 10:04:58 2020] fs/cifs/transport.c: cifs_sync_mid_result: cmd=1 mid=0 state=8
[Чт Окт 22 10:04:58 2020] fs/cifs/misc.c: Нулевой буфер передан в cifs_small_buf_release
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: Сокет создан
[Чт Окт 22 10:04:58 2020] fs/cifs/connect.c: sndbuf 16384 rcvbuf 87380 rcvtimeo 0x1b58
[Чт Окт 22 10:04:58 2020] fs/cifs/misc.c: Нулевой буфер передан в cifs_small_buf_release
[Чт Окт 22 10:04:58 2020] fs/cifs/inode.c: CIFS VFS: выходим из cifs_revalidate_dentry_attr (xid = 35385880) rc = -112
[Чт Окт 22 10:04:58 2020] fs/cifs/inode.c: CIFS VFS: в cifs_revalidate_dentry_attr как Xid: 35385881 с uid: 1004

Windows сервер – это Windows 2016 сервер. Единственные журналы, которые появляются на этом сервере в то же время, это:

<Событие xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
   <Система>
      <Провайдер Имя="Service Control Manager" Guid="{555908d1-a6d7-4695-8e1e-26931d2012f4}" EventSourceName="Service Control Manager" />
      <EventID Qualifiers="16384">7036</EventID>
      <Версия>0</Версия>
      <Уровень>4</Уровень>
      <Задание>0</Задание>
      <Opcode>0</Opcode>
      <Ключевые слова>0x8080000000000000</Ключевые слова>
      <TimeCreated SystemTime="2020-10-16T10:42:59.636088900Z" />
      <Канал>Система</Канал>
      <Компьютер>XXX.xxx.xxx</Компьютер>
   </Система>
   <Данные события>
      <Data Name="param1">Помощник подключения с учетной записью Microsoft</Data>
      <Data Name="param2">остановлен</Data>
      <Binary>77006C00690064007300760063002F0031000000</Binary>
   </Данные события>
</Событие>

<Событие xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
   <Система>
      <Провайдер Имя="Service Control Manager" Guid="{555908d1-a6d7-4695-8e1e-26931d2012f4}" EventSourceName="Service Control Manager" />
      <EventID Qualifiers="16384">7036</EventID>
      <Версия>0</Версия>
      <Уровень>4</Уровень>
      <Задание>0</Задание>
      <Opcode>0</Opcode>
      <Ключевые слова>0x8080000000000000</Ключевые слова>
      <TimeCreated SystemTime="2020-10-16T10:42:20.692575900Z" />
      <Канал>Система</Канал>
      <Компьютер>XXX.xxx.xxx</Компьютер>
   </Система>
   <Данные события>
      <Data Name="param1">Служба лицензирования клиентов (ClipSVC)</Data>
      <Data Name="param2">остановлена</Data>
      <Binary>43006C00690070005300560043002F0031000000</Binary>
   </Данные события>
</Событие>

После того как мы посмотрели открытые сеансы на сервере Windows, мы заметили, что сеансы пользователей с centOS 8 автоматически отключаются каждые 30 минут, в то время как сеансы пользователей с centOS 7 не отключаются.

Ответ или решение

Нестабильное соединение CIFS на CentOS 8: подробный анализ и решения

Недавно вы создали несколько серверов на базе CentOS 8 для запуска приложений Spring Boot, которые подключаются к директориям с сервера Windows через CIFS. Однако, несмотря на успешное подключение, вы сталкиваетесь с частыми ошибками подключения. Распишем симптомы, проблемы и предложим возможные решения.

Симптоматика проблемы

Предоставленные вами сообщения об ошибках из вывода dmesg показывают, что происходит регулярное разъединение CIFS:

CIFS VFS: Send error in SessSetup = -11
CIFS VFS: Server XXXXXXX has not responded in 120 seconds. Reconnecting...

Эти сообщении указывают на проблемы с настройками или совместимостью CIFS между CentOS 8 и Windows 2016. Вы также заметили, что с CentOS 7 таких симптомов не наблюдается.

Технический анализ

  1. Версия ядра и утилиты CIFS: Вы используете разные версии ядра и утилит CIFS на CentOS 7 и CentOS 8:

    Параметр CentOS 7 CentOS 8
    Ядро 3.10.0 4.18.0
    cifs-util 6.2-10.el7 6.8-3.el8

    Обратите внимание, что CentOS 8 использует более новую версию программного обеспечения, что может привести к несовместимостям с определенными параметрами настройки.

  2. Сессия Windows: Обратите внимание на то, что соединения CentOS 8 отключаются каждые 30 минут, в то время как CentOS 7 остается активными. Это поведение может быть связано с настройками сеансов на сервере Windows, которые могут различаться для различных версий клиентов.

Возможные решения

  1. Настройки монтирования CIFS:
    Параметры, используемые для монтирования на CentOS 8, имеют некоторые различия. Попробуйте изменить настройки монтирования CIFS следующим образом:

    //SERVER/DATA on /mnt/data type cifs (rw,nosuid,noexec,relatime,vers=2.1,cache=strict,username=data_user,domain=xxx.xxx.xxx,uid=1000,forceuid,gid=1000,forcegid,addr=xxx.xx.x.xx,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,bsize=65536,echo_interval=60,actimeo=1,sec=ntlm)

    Попробуйте версию протокола (например, vers=2.1 вместо 3.0).

  2. Увеличение тайм-аутов:
    Вы можете попробовать добавить следующие параметры, чтобы увеличить надежность соединения:

    connect_timeout=30
    timeout=60

    Эти параметры могут помочь избежать разрывов соединения, увеличивая время ожидания.

  3. Настройте сеансы Windows:
    Проверьте настройки безопасности и управления соединениями на вашем сервере Windows. В частности, обратите внимание на параметры, связанные с временем ожидания и отключением неактивных сессий.

  4. Обновление системы:
    Проверьте наличие обновлений пакетов CIFS и ядра на CentOS 8. Возможно, с выходом новых версий были устранены существующие несоответствия.

  5. Логи Windows:
    Ознакомьтесь с журналами событий Windows на наличие ошибок или предупреждений во время разъединений. Это поможет диагностировать, связано ли это с настройками безопасности или сетевыми политиками.

Заключение

Решение проблем с нестабильным соединением CIFS между CentOS 8 и сервером Windows требует внимательного подхода к настройкам монтирования и анализу системных логов. Применив предложенные изменения, вы должны значительно улучшить стабильность соединения. Обязательно проведите тестирование после каждой корректировки, чтобы удостовериться в результатах. Если проблема сохраняется, возможно, потребуется дополнительный анализ сетевой инфраструктуры или консолидация с IT-специалистами для более глубокого изучения проблемы.

Оцените материал
Добавить комментарий

Капча загружается...