У одного из заказчиков пользователи постоянно жалуются, что новые файлы в общей сетевой папке на Windows Server 2008 R2 появляется не сразу, а с большой задержкой, даже при выполнении обновления содержимого папки по F5. Независимо от того, открывает ли пользователь сетевую папку по UNC пути или она подключена в виде сетевого диска – новые файлы и папки после копирования или создания появляется не сразу, а через одну-две минуты. Причем, если вручную указать полное имя файла через UNC путь (\\srv1\share\file1.txt), он открывается, хотя в папке его не видно.
Таким образом в некоторые моменты времени список файлов в одной и той же сетевой папке при просмотре на разных компьютерах может не совпадать. Отметим, что в качестве десктопных ОС на компьютерах пользователей используется Windows 7.
Дело в том, что в версии SMB v2.x, представленном в Windows 2008 / Vista (см. таблицу с версиями протокола SMB) для уменьшения трафика и количества SMB запросов между SMB-клиентом и сервером, и ускорения доступа к общим папкам и файлам по сети стал использоваться механизм кэширования (это дает ощутимый эффект при доступе к сетевой папке через медленный канал или канал с большими задержками). Таким образом компонента Microsoft Redirector на компьютерах пользователей использует локальный кэш с метаданными сетевого каталога. По умолчанию этот кэш очищается каждые 10 секунд.
В том случае, если у вас также наблюдается задержка появления новых файлов в сетевых папках, можно отключить кэширование метаданных для протокола SMB v2 на стороне клиентов.
Совет. Обратите внимание, что компьютеры с Windows 8 и Windows 10 для доступа к сетевым папкам на Windows Server 2008 R2 используют клиент SMB v2, несмотря на то, что в них поддерживается более новый протокол SMB v3. Чтобы определить версию протокола SMB, по которой клиент взаимодействует с сервером, выполните следующую Powershell команду:
Get-SmbConnection
Имеется три параметра реестра, которые управляют настройками кэширования сетевых папках на стороне SMB клиента. Microsoft утверждает, что значения по-умолчанию для этих ключей обеспечивают наилучшую производительность для большинства сред. Эти параметры управлением кэша SMB2 находятся в ветке реестра HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters.
- DirectoryCacheLifetime – срок жизни кэша метаданных сетевой папки (по умолчанию 10 секунд).
- FileNotFoundCacheLifetime – кэш ответа «Файл не найден» (5 секунд).
- FileInfoCacheLifetime – хранение кэша с информацией о файле (10 секунд).
Таким образом по-умолчанию срок жизни кэша в SMBv2 папке – 10 секунд. Когда клиент выполняет обновление содержимого сетевой папки, результат последнего обновления хранится клиентом в течении 10 секунд. Все приложения при доступе к данному каталогу сначала пытаются использовать этот кэш.
В том случае, если вы столкнулись с тем, что новые файлы не сразу отображаются в сетевой папке, значит вам нужно проверить значение ключа реестра DirectoryCacheLifetime и уменьшить его (или совсем отключить).
Чтобы отключить кэширование содержимого SMB папок, в ветке реестра HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters создайте DWORD параметр с именем DirectoryCacheLifetime и измените его на 0 и перезагрузите компьютер (аналогично можно изменить на 0 значения параметров FileInfoCacheLifetime и FileNotFoundCacheLifetime).
После этого все изменения в сетевой папке будут сразу отображаться на клиенте (содержимое папки обновляется каждый раз и локальных кэш не используется).