Вопрос или проблема
Недавно мы создали несколько серверов 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 таких симптомов не наблюдается.
Технический анализ
-
Версия ядра и утилиты 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 использует более новую версию программного обеспечения, что может привести к несовместимостям с определенными параметрами настройки.
-
Сессия Windows: Обратите внимание на то, что соединения CentOS 8 отключаются каждые 30 минут, в то время как CentOS 7 остается активными. Это поведение может быть связано с настройками сеансов на сервере Windows, которые могут различаться для различных версий клиентов.
Возможные решения
-
Настройки монтирования 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
). -
Увеличение тайм-аутов:
Вы можете попробовать добавить следующие параметры, чтобы увеличить надежность соединения:connect_timeout=30 timeout=60
Эти параметры могут помочь избежать разрывов соединения, увеличивая время ожидания.
-
Настройте сеансы Windows:
Проверьте настройки безопасности и управления соединениями на вашем сервере Windows. В частности, обратите внимание на параметры, связанные с временем ожидания и отключением неактивных сессий. -
Обновление системы:
Проверьте наличие обновлений пакетов CIFS и ядра на CentOS 8. Возможно, с выходом новых версий были устранены существующие несоответствия. -
Логи Windows:
Ознакомьтесь с журналами событий Windows на наличие ошибок или предупреждений во время разъединений. Это поможет диагностировать, связано ли это с настройками безопасности или сетевыми политиками.
Заключение
Решение проблем с нестабильным соединением CIFS между CentOS 8 и сервером Windows требует внимательного подхода к настройкам монтирования и анализу системных логов. Применив предложенные изменения, вы должны значительно улучшить стабильность соединения. Обязательно проведите тестирование после каждой корректировки, чтобы удостовериться в результатах. Если проблема сохраняется, возможно, потребуется дополнительный анализ сетевой инфраструктуры или консолидация с IT-специалистами для более глубокого изучения проблемы.