CIFS случайно теряет соединение с общим ресурсом Windows

CIFS случайно теряет соединение с общим ресурсом Windows

В течение нескольких месяцев у меня было несколько каталогов, смонтированных удаленно из Debian Jessie в общем ресурсе Windows.

В последние недели я постоянно получаю жалобы на случайные отключения от точки монтирования, и мне пришлось сделать

sudo mount -a

для восстановления подключения к монтированию, пару раз (сервер используется один или два раза в неделю).

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

Администратор Windows также сообщил мне, что сервер Windows уже некоторое время не перезагружался.

Сегодня, по совпадению, при mount -aповторной попытке, сработало только со второй попытки, в то время как первая попытка выдала следующую ошибку:

sudo mount -a
mount error(104): Connection reset by peer
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
mount error(112): Host is down
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

Каталоги монтируются /etc/fstabследующим образом:

//10.2.1.2/XX/ZZ/YY /mnt/mount_point cifs credentials=/root/.smbcredentials,iocharset=utf8,file_mode=0770,dir_mode=0770,uid=1001,gid=1001 0 0

При выполнении команды монтирования вы также можете увидеть, что эта опция echo_intervalактивируется по умолчанию через 60 секунд.

$mount //10.2.1.2/XX/ZZ/YY on /mnt/mount_point type cifs (rw,relatime,vers=1.0,cache=strict,username=someusername,domain=XXX,uid=1001,forceuid,gid=1001,forcegid,addr=10.2.1.2,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,echo_interval=60,actimeo=1)

Что делать?

решение1

Я нашел интересный пост по теме здесьСмонтированная папка cifs постоянно отключается (сервер Ubuntu), говоря о похожей проблеме (та же ошибка, делится Samba).

Важным моментом здесь, для понимания остальной части ответа, является то, что монтирования CIFS по умолчанию используют протокол SMBv1.0, в чем можно убедиться, выполнив команду mountи обратив внимание на vers=1.0поле.

$mount //10.2.1.2/XX/ZZ/YY on /mnt/mount_point type cifs (rw,relatime,vers=1.0,cache=strict,username=someusername,domain=XXX,uid=1001,forceuid,gid=1001,forcegid,addr=10.2.1.2,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,echo_interval=60,actimeo=1)

Я также нашел в Stack Overflow постХост монтирования CIFS не работает

Это также может быть из-за несоответствия протоколов. В 2017 году Microsoft исправила ошибки в Windows Servers и рекомендовала отключить протокол SMB1.

С этого момента у mount.cifs могут возникнуть проблемы с согласованием протокола.

Отображается ошибка «Хост не работает». Но при отладке с помощью:

smbclient -L <server_ip> -U <username> -d 256

вы получите ошибку:

protocol negotiation failed: NT_STATUS_CONNECTION_RESET

В сообщении упоминается, что исправления Windows для протокола Wannacry и других портят или, точнее, некоторые люди отключают функциональность запросов CIFS v1; похожие проблемы возникают и на фронте Windows, и, учитывая время, это заставляет меня подозревать, что проблема должна быть связана с этим.

Насколько нам известно, мы не отключали v1 CIFS на этом конкретном сервере (и тестирование это подтверждает), однако в бюллетенях MS указывается, что поведение SMBv1 по умолчанию было (слегка) изменено.

В итоге я последовал общей идее, предложенной в упомянутом вопросе о Samba.мужчинаmounts.cifs:

vers=

    Версия протокола SMB. Допустимые значения:

    • 1.0 - Классический протокол CIFS/SMBv1. Используется по умолчанию.

    • 2.0 — протокол SMBv2.002. Первоначально он был представлен в Windows Vista Service Pack 1 и Windows Server 2008. Обратите внимание, что первоначальная версия Windows Vista говорила на немного другом диалекте (2.000), который не поддерживается.

    • 2.1 — протокол SMBv2.1, представленный в Microsoft Windows 7 и Windows Server 2008R2.

    • 3.0 — протокол SMBv3.0, представленный в Microsoft Windows 8 и Windows Server 2012.

    Обратите внимание, что хотя эта опция определяет используемую версию протокола, не все функции каждой версии доступны.

--verbose

    Вывести дополнительную отладочную информацию для монтирования. Обратите внимание, что этот параметр должен быть указан перед -o. Например:

     mount -t cifs //server/share /mnt --verbose -o user=username
    

Как видно из руководства, в последних версиях Windows после Windows 8 использование по крайней мере vers=2.0может иметь больше смысла; альтернативный синтаксис в командной строке с --verboseупомянутой опцией также может быть полезен для дальнейшей отладки любых осложнений, которые могут возникнуть.

Таким образом, поскольку сервер Windows, с которого я монтирую материалы по этому вопросу, является сервером Windows 2008 R2, я ввожу /etc/fstab:

//10.2.1.2/XX/ZZ/YY /mnt/mount_point cifs credentials=/root/.smbcredentials,iocharset=utf8,file_mode=0770,dir_mode=0770,uid=1001,gid=1001,vers=2.1 0 0

Затем перемонтировал его, чтобы опция вступила в силу:

sudo mount -o remount /mnt/mount_point

Теперь мы mountснова проверяем, чтобы подтвердить согласованный протокол:

$mount //10.2.1.2/XX/ZZ/YY on /mnt/mount_point type cifs (rw,relatime,vers=2.1,cache=strict,username=someusername,domain=XXX,uid=1001,forceuid,gid=1001,forcegid,addr=10.2.1.2,file_mode=0770,dir_mode=0770,nounix,serverino,mapposix,rsize=61440,wsize=65536,echo_interval=60,actimeo=1)

И мы действительно можем подтвердить, что нам удалось успешно модифицировать используемый протокол SMB.

Смотрите такжеСеть разработчиков MS - [MS-SMB2]: Версии и согласование возможностей - 1.7 Версии и согласование возможностей

Следует также отметить, что CIFS v1.0, помимо того, что устарел, крайне неэффективен и небезопасен по сравнению с более новыми версиями протокола.

ОтБлоги MS - Прекратите использовать SMB1

SMB1 не является современным и эффективным
При использовании SMB1 вы теряете ключевые возможности оптимизации производительности и продуктивности для конечных пользователей.

  • Большие чтения и записи (2.02+) — более эффективное использование более быстрых сетей или WAN с большей задержкой. Поддержка больших MTU.
  • Кэширование свойств папок и файлов (2.02+) — клиенты сохраняют локальные копии папок и файлов через BranchCache
  • Прочные дескрипторы (2.02, 2.1) — позволяют прозрачно переподключаться к серверу в случае временного отключения.
  • Модель аренды клиентских oplock-блокировок (2.02+) — ограничивает объем данных, передаваемых между клиентом и сервером, повышая производительность в сетях с высокой задержкой и увеличивая масштабируемость SMB-сервера.
  • Multichannel & SMB Direct (3.0+) — агрегация пропускной способности сети и отказоустойчивость при наличии нескольких путей между клиентом и сервером, а также использование современной сверхвысокой пропускной способности во всей инфраструктуре RDMA
  • Directory Leasing (3.0+) – сокращает время отклика приложений в филиалах за счет кэширования

Достаточно интересно, что в последней статье предполагается, что проблемы с отключением менее вероятны после отключения (Durable handles), если используется протокол >= 2.01, поэтому я бы еще раз подчеркнул, что не следует продолжать использовать CIFS v1.0. (например, в версии 1.0 echo_interval=60подключение сохраняется, но если происходит сетевой сбой или какой-либо другой сбой сервера, монтирование не восстановится без ручного вмешательства при использовании CIFS v1.0)

И последний совет: избегайте делать sudo mount -aи начните делать:

sudo mount -o remount -a

См. также мой вопросCIFS монтирует несколько копий одного и того же ресурса в одной точке монтирования

Связанный контент