2016-09-22 6 views
0

Есть 2 похожих расстановки:Чтение файлов из доли Linux самбы и кэширования

  1. Ubuntu 16,04 сервер с общей папкой \\ \ линукс данными и файл test.txt в нем (Samba 4.3.9-Ubuntu)
  2. сервер 2012 сервера Windows, с общей папкой \\ \ выиграть данных и файл test.txt в нем

Существует другой компьютер (Win 7) и C# тестовая программа, которая считывает содержимое файла из одного из установки, описанные выше, в виде петли:

  1. чтение файла, помните, размер данных
  2. ждать 500 мс
  3. файл
  4. читать снова, если размер изменился - распечатывать размер вместе с несколькими байтами контента с конца этого файла, обновление хранится размер
  5. goto 2.

Теперь, когда я запускаю тест с установкой № 1 (доля выигрыша) - если я открываю файл на сервере, изменяю содержимое и сохраняю - я сразу вижу реакцию в тестовой программе - сначала итерация цикла после изменения файла приносит мне новый размер файла и новые данные.

Но когда я запускаю те же тесты с установкой № 2 (общий ресурс ubuntu) - я не вижу измененный размер или содержимое в тестовой программе до тех пор, пока не пройдет какое-то время (и это время меняется в зависимости от того, какой метод я использую для чтения содержимое файла. С FileStream оно составляет около 10 секунд, а File.ReadAllBytes - от 30 секунд до 10 минут).

Замечание с установкой # 2 - если я модифицирую файл в Ubuntu, то перейдите на тестовый компьютер (где тестовая программа теперь циклически, пытается получить обновленное содержимое файла) и откройте общий файл с помощью блокнота - test программа немедленно получает обновленный контент.

Для меня это похоже на кэширование на клиентской машине на тестовой машине. Единственное, о чем я могу думать, это то, что Win Server 2012 использует SMB3 и Ubuntu - SMB2_10, и это каким-то образом заставляет клиента (часть считывающего устройства) вести себя по-разному.

Я не эксперт Linux, и, насколько я понимаю, нет никакого способа, чтобы включить протокол SMB3 в Ubuntu (он может работать как SMB3 клиента, но не сервер)

Таким образом, вопрос в том, как заставить клиента (Win 7) для чтения без кеша, независимо от типа сервера и версии протокола, или, если это невозможно, - как имитировать из файла открытия кода C# с помощью блокнота, что явно дает ему удар и заставляет всех читателей получать обновленный контент ,

ответ

0

Показана возможность отключения оппортунистических замков (oplocks) в конфигурации linux samba (smb.conf).

С отключенной тестовой программой OpLocks на клиентской машине обновляется контент без кэширования.