Не обновляется (долго обновляется) содержимое сетевой папки Windows

Периодически от пользователей файлового сервера приходят жалобы на то, что содержимое сетевой папки долго не обновляется.

Не появляются новые файлы в общей сетевой папке

Например, пользователь создал новый файл в сетевой папке (по UNC пути или подключений в виде сетевого диска), а он появляется в ней с большой задержкой (3-4 минуту), даже если обновить содержимое папки в проводнике по F5 . При этом, если вручную указать полный путь к файлу через UNC путь ( \\srv1\share\file1.txt ), файл открывается сразу, но в папке не отображается.

Проблема, когда содержимое сетевой папки сразу не обновляется в проводнике File Explorer при создании/удалении/переименовании/перемещении файлов и папок в большинстве случае связано с особенностями кэширования сетевых папок в Windows. Источником чаще всего являются:

  • Кэширование содержимого сетевых файлов функцией Offline Files (автономные файлы)
  • Кэширование метаданных объектов в сетевой папке клиентом SMB.

медленно открывается общая сетевая папка в Windows

Отключить кэширование автономных файлов в 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

Get-SmbClientConfiguration настройки кэширования в сетевых SMB файлах

  • DirectoryCacheLifetime – срок жизни кэша с метаданными сетевой папки, полученный при последнем обращении (по умолчанию 10 секунд). В течении этого времени SMB клиент использует кэшированные данные без запроса к серверу, что повышает производительность, но при этом может приводить к небольшой задержке обновления содержимого
  • FileNotFoundCacheLifetime – кэш ответа “Файл не найден” (5 секунд).
  • FileInfoCacheLifetime – срок жизни кэша с информацией о файле (10 секунд)

Чем больше срок жизни кэша, тем меньше нагрузка на сеть, но тем чаще пользователи могут наблюдать задержки в отображении обновлений файлов в сетевых папках.

Чтобы на клиенте отключить кэширование метаданных в сетевых папках, нужно изменить значения этих параметров на 0:

Set-SmbClientConfiguration -DirectoryCacheLifetime 0 -FileInfoCacheLifetime 0 -FileNotFoundCacheLifetime 0

В старых версиях Windows, в которых отсутствует командлет Set-SmbClientConfiguration , можно изменить значения этих параметров в ветке реестра HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters

Создать/изменить эти параметры реестра можно с помощью regedit.exe или PowerShell командлета New-ItemProperty:

$regpath= "HKLM:\System\CurrentControlSet\Services\LanmanWorkstation\Parameters"
$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

отключить использование кэша для общих сетевых папок с помощью параметра реестра DirectoryCacheLifetime

Информацию об этих параметрах реестра можно найти в статье об оптимизации настроек файлового сервера Windows https://docs.microsoft.com/en-us/windows-server/administration/performance-tuning/role/file-server/

Для применения настроек в силу нужно перезагрузить компьютер. Если эти настройки нужно применить на нескольких компьютерах, вы можете использовать GPO для распространения параметров реестра.

После этого все изменения в сетевой папке будут сразу отображаться на клиенте (содержимое папки обновляется каждый раз и локальных кэш не используется). Однако отключение кэширования сетевых папок увеличивает сетевой трафик и нагрузку на сервер.

Есть еще несколько причин, из-за которых содержимое сетевых папок может отображаться медленно:


Предыдущая статья Следующая статья


Комментариев: 3 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)