Как препятствовать тому, чтобы самба содержала блокировку файла после того, как клиент разъединяется?

Стандартный интерактивный инструмент на RHEL является getenforce. Это производит сообщение, говоря пользователю, в котором находится режим SELinux: осуществление, разрешающее или отключенное.

10
задан 22 November 2010 в 20:14
6 ответов

Взгляните на:

reset on zero vc = yes / no

и посмотрите, решит ли это Вашу проблему или нет.

От smb.conf страница справочника:

Этот булев параметр управляет, должна ли входящая установка сессии уничтожить другие соединения, прибывающие из того же IP. Это соответствует поведению Windows 2003 по умолчанию. Установка этого параметра на да становится необходимой, когда у Вас есть облупленная сеть, и окна решает снова соединиться, в то время как старое соединение все еще имеет файлы с открытыми режимами доли. Эти файлы становятся недоступными по новому соединению. Клиент отправляет нулевой VC на новом соединении, и Windows 2003 уничтожает все другие соединения, прибывающие из того же IP. Таким образом, заблокированные файлы доступны снова. Знайте, что включение этой опции уничтожит соединения позади маршрутизатора подмены.

Править:
Я просто обдумал другое возможное решение. Вы могли сделать что-то вроде этого на рассматриваемой доле.

veto oplock files = /*.lock/

Это просто предотвратило бы уступающие блокировки на .lock файлах.

5
ответ дан 2 December 2019 в 22:06

, следующие шаги помогли мне решить именно эту проблему в нескольких случаях:

  1. Войдите на сервер samba.
  2. Запустите "smbstatus" .
  3. Найдите pid процесса, который заблокировал файл. в третьем разделе выходных данных.
  4. Убедитесь, что он соответствует ожидаемому пользователю и имени хоста в первом и втором разделах вывода smbstatus.
  5. Запустите "ps -ef" и посмотрите, сколько времени smbd с этим pid был запущен.
  6. Если он работал до того, как компьютер последний раз перезагрузился, это smbd. УБИЙТЕ ТОЛЬКО ТОГО ОДНОГО кого-то. (И убедитесь, что вы выбрали правильный - он должен быть у которого родительский pid не равен 1.)
10
ответ дан 2 December 2019 в 22:06

Некоторые очень умные люди в Samba решили убрать эту опцию, и замена ей не предусмотрена.

Тогда для совместимости SMB, так как это действительно поведение по умолчанию win.

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

Прекрасно сделано, Samba.org.

.
0
ответ дан 2 December 2019 в 22:06

Я столкнулся с аналогичной проблемой, клиент вылетел при копировании большого файла, и файл был заблокирован после перезагрузки. К счастью, такое случается нечасто, но все же довольно неприятно убивать процесс самбы. сброс на ноль vc казался просто решением, но он предположительно удален из Samba4, хотя в версии 4.7.6 в Fedora (27) он все еще есть (возможно, исправлен RH). В любом случае это не сильно поможет, поскольку теперь на странице руководства сказано, что он работает только с SMB1 (который больше не должен использоваться) и ничего не делает с соединениями SMB2 и SMB3,единственный способ справиться с этим - , упомянутый в теме, на которую ссылается Майкл . Я не знаю причины удаления и что такого плохого в сбросе при нулевом vc , я бы подумал об использовании тайм-аута tcp для этой цели, скорее как взлом. В любом случае может быть что-то разумное, например,

socket options = TCP_NODELAY SO_KEEPALIVE TCP_KEEPIDLE=30 TCP_KEEPCNT=3 TCP_KEEPINTVL=3

Это приведет к отключению соединения примерно через 40 секунд (30 + 3 * 3) после последнего сеанса связи, что обычно более чем достаточно для обнаружения сбоя и перезагрузки (учитывая, что стек tcp сервера достаточно умен, чтобы закрыть соединение, когда клиент отклоняет свои пакеты поддержки активности после перезагрузки).

Обратите внимание, что это увеличивает нагрузку на вашу сеть, но я сомневаюсь, что это даже заметно даже при большом количестве клиентов.

0
ответ дан 2 December 2019 в 22:06

Вы можете отключить нестандартные блокировки для каждого общего ресурса следующим образом:

[acctdata]
oplocks = False
level2 oplocks = False

Тип нестандартной блокировки по умолчанию - Уровень1 . Необязательные блокировки уровня 2 включаются для каждого ресурса в файле smb.conf. В качестве альтернативы, вы можете отключить нестандартные блокировки для каждого файла в общем ресурсе:

veto oplock files = /*.mdb/*.MDB/*.dbf/*.DBF/

Если вы испытываете проблемы с нестандартными блокировками, как видно из записей журнала Samba, вы можете не рисковать и отключить нестандартные блокировки и уровни 2.

] Отключение блокировок ядра Блокировка ядра - это кого-л.conf, который уведомляет Samba (если ядро ​​UNIX имеет возможность отправить клиенту Windows прерывание блокировки), когда процесс UNIX пытается открыть кэшированный файл. Этот параметр относится к совместному использованию файлов между UNIX и Windows с включенными блокировками на сервере Samba: процесс UNIX может открыть файл, который заблокирован (кэширован) клиентом Windows, а процесс smbd не будет отправлять прерывание блокировки, которое открывает доступ к файлу. риск повреждения данных. Если ядро ​​UNIX имеет возможность отправлять прерывание непрочной блокировки, то параметр ядра oplocks позволяет Samba отправлять прерывание непрочной блокировки. Необязательные блокировки ядра включаются для каждого сервера в файле smb.conf.

kernel oplocks = yes

По умолчанию номер

Источник

0
ответ дан 2 December 2019 в 22:06

Пока гуглил свою ошибку, я много пересек эту страницу. Возможно, у кого-то была такая же проблема, и он также застрял здесь:

не удалось удалить глобальный ключ «XXX» :NT _СТАТУС _НЕ _НАЙДЕН ВНУТРЕННЯЯ ОШИБКА:Не удалось разблокировать режим общего доступа

Недостаточно места в /run/lock, и это помогло:mount -t tmpfs tmpfs /run/lock -o remount,size=85M

0
ответ дан 27 September 2021 в 21:18

Теги

Похожие вопросы