testparm в samba может выдать следующее сообщение:
rlimit_max: rlimit_max (8192) below minimum Windows limit (16384)
Похоже, эту проблему можно решить, увеличив максимальное количество открытых файлов с помощью этой команды Linux ulimit -n 16384
.
Безопасно ли это изменение для типичного Samba-бокса? Где следует хранить эту настройку, чтобы она была доступна службе Samba при загрузке?
решение1
Во-первых, это просто предупреждение. В MS Windows количество обработчиков файлов на клиенте и сервере должно быть одинаковым, иначе вы увидите сообщение "слишком много открытых файлов" при, например, копировании файлов по сети. Более поздние версии Samba заботятся об этом самостоятельно.
Однако, если вы хотите убрать это предупреждение, вы можете сделать это, изменив локальные ограничения файлов. Всегда полезно различать локальные (пользовательские или сеансовые) ограничения и глобальные (системные) ограничения. Проверьте свои глобальные ограничения с помощью
cat /proc/sys/fs/file-max
Велика вероятность, что ваши глобальные лимиты значительно превышают ваши локальные лимиты. Я думаю, что типичный лимит GNU/Linux находится в диапазоне 100k, я не смотрел очень давно. Вы можете временно изменить это значение, выполнив
sysctl -w fs.file-max=n
или навсегда, отредактировав /etc/sysctl.conf
и запустив sysctl -p
.
Чтобы проверить локальные ограничения, переключитесь на соответствующего пользователя, например, samba, и запустите
ulimit -Hn
ulimit -Sn
Это покажет вам жесткие и мягкие ограничения для локального сеанса. Жесткий предел обеспечивается системой, а мягкий предел — локальной сессией. При необходимости вы можете увеличить локальный мягкий предел до глобального жесткого предела.
Вы можете временно изменить лимиты, запустив
ulimit -Hn n
ulimit -Sn m
или вы можете установить ограничения для пользователей через /etc/security/limits.conf
и вы даже можете указать, для каких пользователей какие ограничения применяются, например
samba soft nofile 16384
samba hard nofile 32768
Как всегда, man-страницы обоих файлов и команд предлагают гораздо больше информации. Надеюсь, это поможет.
решение2
Лимит берется из /etc/security/limits.conf.
вы показываете свой фактический лимит с помощью ulimit -n
Вы можете изменить его, отредактировав (или добавив) строку
* - nofile 16385
и перезагрузите параметры env (или выйдите из оболочки и войдите в нее снова).
решение3
Это просто, но я думаю, что многие люди тратят время на этот вопрос (как и я, ха-ха).
Нам нужно настроить предел параметраНЕТ ФАЙЛАв "/etc/security/limits.conf" или в другом альтернативном файле, например "/etc/security/limits.d/limit-file.conf", например:
* - nofile 16384
Проблема в том, что эта конфигурация не применяется к текущему сеансу, нам нужно выйти и войти в систему, чтобы применить изменения, поэтому наши тесты с TESPARM никогда не проходят.
Если вы не хотите перезапускать сеанс, примените эту команду и решите эту проблему:
ulimit -n 16384
Надеюсь это поможет!
решение4
Опечатка в /etc/samba/smb.conf
файле может привести к такой ошибке. Я следовал этомусвязьи пересмотрел свой, только чтобы обнаружить, что проблема была в опечатке: «yess» вместо «yess».