Периодически от пользователей файлового сервера приходят жалобы на то, что содержимое сетевой папки долго не обновляется.
Не появляются новые файлы в общей сетевой папке
Например, пользователь создал новый файл в сетевой папке (по UNC пути или подключений в виде сетевого диска), а он появляется в ней с большой задержкой (3-4 минуту), даже если обновить содержимое папки в проводнике по F5 . При этом, если вручную указать полный путь к файлу через UNC путь ( \srv1sharefile1.txt ), файл открывается сразу, но в папке не отображается.
Проблема, когда содержимое сетевой папки сразу не обновляется в проводнике File Explorer при создании/удалении/переименовании/перемещении файлов и папок в большинстве случае связано с особенностями кэширования сетевых папок в Windows. Источником чаще всего являются:
- Кэширование содержимого сетевых файлов функцией Offline Files (автономные файлы)
- Кэширование метаданных объектов в сетевой папке клиентом SMB.

Отключить кэширование автономных файлов в Windows
По умолчанию, для всех создаваемых сетевых папок в Windows пользователям разрешено делать их содержимое доступным в офлайн режиме. На стороне файлового сервера можно запретить пользователям кэшировать содержимое сетевой папки через встроенную функцию Offlice Files (автономные файлы).
Откройте свойства общей сетевой папки на SMB сервере, перейдите на вкладку Доступ (Sharing) -> Расширенная настройка (Advanced Sharing) -> кнопка Кэширование (Caching). Измените режиме на “Файлы и программы в этой папке недоступны вне сети” (No files or programs from the shared folder are available offline).

Изменить настройки сетевой папки можно с помощью PowerShell:
Set-SMBShare -Name ShareName -CachingMode None
Get-SmbShare -Name ps | fl -Property CachingMode
Управление кэшированием сетевых папок SMB на клиентах
Для улучшения клиентского доступа к сетевым папкам в протоколе SMB v2.0 (см. таблицу с версиями протокола SMB), появился компонент Network Redirector. Задача этого компонента уменьшить трафик и количество SMB запросов между клиентом и сервером за счет кеширование метаданных файлов в сетевых папках.
С настройками по умолчанию, содержимое кэша Network Redirector на клиенте очищается каждые 10 секунд.
Если в сетевой папке много (тысячи+) файлов, или SMB клиенты подключены к файловому серверу по медленным или нестабильным каналом, SMB кэширование может работать некорректно, а пользователи сталкиваться с медленным обновлением содержимого сетевых папок. В этом случае можно попробовать отключить кэширование метаданных протокола SMB на стороне клиентов.
Выведите текущие настройки параметров кэширования на клиенте SMB с помощью PowerShell команды:
Get-SmbClientConfiguration | select DirectoryCacheLifetime, FileInfoCacheLifetime, FileNotFoundCacheLifetime

- DirectoryCacheLifetime – срок жизни кэша с метаданными сетевой папки, полученный при последнем обращении (по умолчанию 10 секунд). В течении этого времени SMB клиент использует кэшированные данные без запроса к серверу, что повышает производительность, но при этом может приводить к небольшой задержке обновления содержимого
- FileNotFoundCacheLifetime – кэш ответа “Файл не найден” (5 секунд).
- FileInfoCacheLifetime – срок жизни кэша с информацией о файле (10 секунд)
Чем больше срок жизни кэша, тем меньше нагрузка на сеть, но тем чаще пользователи могут наблюдать задержки в отображении обновлений файлов в сетевых папках.
Чтобы на клиенте отключить кэширование метаданных в сетевых папках, нужно изменить значения этих параметров на 0:
Set-SmbClientConfiguration -DirectoryCacheLifetime 0 -FileInfoCacheLifetime 0 -FileNotFoundCacheLifetime 0
В старых версиях Windows, в которых отсутствует командлет Set-SmbClientConfiguration , можно изменить значения этих параметров в ветке реестра HKLMSystemCurrentControlSetServicesLanmanWorkstationParameters
Создать/изменить эти параметры реестра можно с помощью regedit.exe или PowerShell командлета New-ItemProperty:
$regpath= "HKLM:SystemCurrentControlSetServicesLanmanWorkstationParameters"
$Name1 = "DirectoryCacheLifetime"
$Name2 = "FileInfoCacheLifetime"
$Name3 = "FileNotFoundCacheLifetime"
New-ItemProperty -Path $regpath -Name DirectoryCacheLifetime -Value 0 -PropertyType DWORD -Force | Out-Null
New-ItemProperty -Path $regpath -Name FileInfoCacheLifetime -Value 0 -PropertyType DWORD -Force | Out-Null
New-ItemProperty -Path $regpath -Name FileNotFoundCacheLifetime -Value 0 -PropertyType DWORD -Force | Out-Null

Для применения настроек в силу нужно перезагрузить компьютер. Если эти настройки нужно применить на нескольких компьютерах, вы можете использовать GPO для распространения параметров реестра.
После этого все изменения в сетевой папке будут сразу отображаться на клиенте (содержимое папки обновляется каждый раз и локальных кэш не используется). Однако отключение кэширования сетевых папок увеличивает сетевой трафик и нагрузку на сервер.
- Включенная для сетевой папки опция “Access-based Enumeration” (позволяет скрыть файл и папки, на которых у пользователя нет прав доступа на уровне NTFS) может вызывать медленное обновление списка файлов в сетевой папке с большим количеством объектов;
- На виртуальных машинах Hyper-V с Windows Server 2019 может наблюдаться низкая скорость сети (по сравнению с WS2016/2012R2);
- На доменных компьютерах попробуйте отключить протокол NetBIOS в свойствах вашего TCP/IPv4 подключения (
ncpa.cpl, откройте настройки TCP/IPv4 сетевой карты и выберите Disable Netbios over TCPIP на вкладке WINS). - Попробуйте выполнить сброс сетевых настроек и стека TCP/IP на клиенте Windows
- Если папка находится на DFS сервере, попробуте очистить кеш сервера:
dfsutil cache referral flush
dfsutil /pktflush
dfsutil /purgemupcache

Добавить комментарий