Сервер: RHEL 5.9 / smbd 3.0.33 - Клиенты: разные, хотя все использовали текущий mount.cifs (5.2)
Я уже решил эту проблему, но искать эти коды ошибок было таким кошмаром, что я чувствовал, что это требует универсального документирования.
Симптомы: Непредсказуемый, периодический сбой монтирования от одного конкретного клиента cifs к серверу Linux Samba. Все мои клиенты linux pam_mount находятся дома при входе в систему. Случайно и время от времени монтирование домашнего каталога начинало сбоить. один машина. Логины и средства монтирования продолжали работать безупречно на всех остальных клиентах. Первоначально я думал, что необычная активность на сломанном клиенте вызывает сбои в работе smbd, но периодические сбои сохранялись даже после прекращения использования.
Попытка смонтировать вручную терпит неудачу и сообщает:
Errors from underlying mount program
mount error(12): Cannot allocate memory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
Устанавливать <debug enable="1"/>
в /etc/security/pam_mount.conf.xml, чтобы получить дополнительную информацию от pam_mount:
command: 'mount' '-t' 'cifs' '//my_server/watdo' '/home/watdo' '-o' 'user=watdo,uid=666,gid=666'
pam_mount(misc.c:38): set_myuid<pre>: (ruid/rgid=0/0, e=0/0)
pam_mount(misc.c:38): set_myuid<post>: (ruid/rgid=0/0, e=0/0)
pam_mount(mount.c:64): Errors from underlying mount program:
pam_mount(mount.c:68): mount error(12): Cannot allocate memory
pam_mount(mount.c:68): Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)`
/var/log/kern.log также сообщил об этом событии:
kernel: [4316790.256149] CIFS VFS: cifs_mount failed w/return code = -12
'эхо 1> / proc / fs / cifs / cifsFYI' чудаки up mount.cifs debug (записывает в / var / log / debug). Вот что хорошо (знакомо?):
CIFS Session Established successfully
For smb_command 117
Sending smb: total_len 88
cifs_sync_mid_result: cmd=117 mid=54307 state=4
Mapping smb error code 0xc0000205 to POSIX err -12
На данный момент на стороне клиента буквально нет другой информации. Запрос на монтирование cifs прекращается, и клиент почти сразу умирает. Ошибка mount.cifs (12) довольно неинформативна (справочная страница не помогает, спасибо, ребята). Обширный поиск в Интернете показывает, что это распространенный код ошибки, а также подтверждает его неинформативность.
Пора проверить на сервере! Устанавливать log level = 3
для smbd в /etc/samba/smb.conf (из книги Использование Samba: «Уровни выше 3 предназначены для использования разработчиками и сбрасывают огромное количество загадочной информации». lol!). Вот соответствующая строка:
[2013/02/08 10:18:03, 3] smbd/error.c:error_packet_set(106)
error packet at smbd/reply.c(514) cmd=117 (SMBtconX) NT_STATUS_INSUFF_SERVER_RESOURCES
Почти там ... из архив списков рассылки smb Я обнаружил, что кто-то сообщил о подобной проблеме, идентифицированной как привязанный лимит общего доступа для отдельного smb-соединения. Вывести список открытых общих ресурсов на сервере:
smbstatus -S | grep <serverIP> | wc -l
вернулся 2048. Очень бросается в глаза.
Фактически исследуя вывод smbstatus -S
показал тысячи записей для 'IPC $'. Документация по Samba на IPC $ показывают, что он связан с анонимным просмотром общих ресурсов и доступом к «некоторым другим ресурсам». Я установил запрет хоста на сервере в /etc/samba/smb.conf:
[IPC$]
hosts deny = 0.0.0.0/0
Теперь отлично работает. Хорошо, надеюсь, что-то здесь поможет какой-нибудь бедной душе когда-нибудь в будущем.
Думаю, в духе сайта я задам вопрос: почему smbd не убирает акции IPC $? Зачем устанавливать одно подключение IPC $ на пользователя к общему ресурсу, а не одно подключение на клиента? Можете ли вы отключить создание общего ресурса IPC $ на стороне клиента? Есть ли способ увеличить максимальное количество соединений на единицу (в данном случае это не помогло бы)? Я не видел этого в документации.
Это старый метод, но, учитывая, что на него нет ответа, и я изучал IPC $ и Samba, я попробую его для документации.
Почему smbd не убирает акции IPC $?
Как указано выше в комментариях к вашему вопросу, служба используется для удаленного администрирования и связи между серверами, и, в частности, в Samba она используется для некоторых целей просмотра и tcp / ip. Если он вам не нужен по какой-либо причине или что-то не работает, его можно безопасно отключить. [1]
Зачем устанавливать одно подключение IPC $ на пользователя к общему ресурсу, а не одно подключение на клиента?
Потому что у пользователя может быть несколько клиентских подключений.
Можно ли отключить создание общего ресурса IPC $ на стороне клиента?
Да и нет. На самом деле это не отключает создание общего ресурса IPC $, но вы можете отключить доступ к нему из клиента Windows. [2]
Для Windows Vista, Windows 7, Windows 8 и Windows 10 вы можете выполнить следующее редактирование реестра:
Есть ли способ увеличить максимальное количество соединений на единицу (в данном случае это не помогло бы)? Я не видел этого в документации.
Да [3]. Ниже доли просто введите:
[share]
max connections = ##
Где XX - количество подключений.
Источники: