В течение нескольких месяцев у меня было несколько каталогов, смонтированных удаленно из 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 монтирует несколько копий одного и того же ресурса в одной точке монтирования