
Наши пользователи жалуются на очень медленную работу сети при открытии или сохранении файлов в общей сетевой папке в Windows. Когда пользователь открывает общую папку по UNC-пути или через букву диска (если общая папка отображена как сетевой диск), ее содержимое отображается только через 10-60 секунд. При создании новых файлов в сетевой папке они также отображаются не сразу, а с большой задержкой — через 3-4 минуты (даже если вы обновите содержимое папки с помощью кнопки F5
). Однако если вручную указать полное имя файла через UNC-путь (\\lon-file-srv1\public\new_file.docx
), он откроется, хотя и не будет виден в Проводнике файлов.
Windows использует специальный Сетевой перенаправитель компонент при доступе к общим файлам и другим сетевым ресурсам на удаленных компьютерах. Начиная с SMB v2.x (см. таблицу с версиями протокола Server Message Block), Network Redirector использует механизм кэширования при доступе к общим папкам и файлам по сети. Это уменьшает трафик и количество SMB-запросов между клиентом и сервером (особенно эффективно в медленных и ненадежных сетях). По умолчанию кэш очищается каждые 10 секунд.
Если вы столкнулись с проблемой медленного доступа к сетевому ресурсу на клиентском устройстве Windows, попробуйте отключить кэширование метаданных SMB на стороне клиента или в настройках общей папки.
Отключить SMB-кэширование можно в настройках общей папки. Откройте свойства общей папки и перейдите к пункту Общий доступ вкладка -> Расширенный общий доступ -> Кэширование. Выберите второй вариант «Файлы и программы из общей папки недоступны в автономном режиме«.
Или воспользуйтесь командой PowerShell из встроенного модуля SMBShare:
Set-SMBShare -Name MySharedDocs -CachingMode None
Это отключит кэширование и автономный доступ к этой общей папке (см. статью об использовании автономных файлов в Windows).
Существует три параметра реестра, которые управляют настройками кэша общих сетевых папок на стороне клиента SMB. Microsoft утверждает, что значения по умолчанию для этих параметров реестра обеспечивают наилучшую производительность для большинства сред. Параметры кэша SMB находятся под ключом реестра HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters.
- DirectoryCacheLifetime время жизни кэша метаданных общей папки (по умолчанию 10 секунд);
- FileNotFoundCacheLifetime — Кэш ответа «Файл не найден» (5 секунд);
- FileInfoCacheLifetime — время хранения кэша с информацией о файле (10 секунд).
По умолчанию время жизни кэша для общей папки SMB составляет всего 10 секунд. Когда клиент обновляет содержимое общей папки, результат последнего обновления хранится у него в течение 10 секунд. При обращении к этому сетевому ресурсу все приложения сначала пытаются использовать этот кэш.
В некоторых случаях механизм кэширования данных в SMB-папках работает некорректно (чаще всего это происходит с сетевыми папками/дисками, содержащими тысячи файлов и папок). В этом случае пользователи могут испытывать значительные задержки при открытии, просмотре и создании файлов в общих папках.
Вы можете отключить кэширование для SMB-папок. Для этого создайте новый параметр DWORD в поле HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters ключ реестра с именем DirectoryCacheLifetime и значение 0. Также установите значения параметров FileInfoCacheLifetime и FileNotFoundCacheLifetime параметры в 0. Вы можете создать эти параметры реестра, используя regedit.exe
или с помощью команды New-ItemProperty PowerShell:
$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
Чтобы параметры вступили в силу, необходимо перезагрузить компьютер. Если эти параметры нужно применить к нескольким компьютерам домена, можно использовать GPO для развертывания параметров реестра.
Для точной настройки SMB-клиента можно также использовать команду Set-SmbClientConfiguration:
Set-SmbClientConfiguration -DirectoryCacheLifetime 0
Set-SmbClientConfiguration -FileInfoCacheLifetime 0
Set-SmbClientConfiguration -FileNotFoundCacheLifetime 0
С помощью PowerShell можно перечислить текущие параметры кэширования для клиента Windows SMB:
Get-SmbClientConfiguration| select *cache*
DirectoryCacheEntriesMax : 16 DirectoryCacheEntrySizeMax : 65536 DirectoryCacheLifetime : 0 FileInfoCacheEntriesMax : 64 FileInfoCacheLifetime : 0 FileNotFoundCacheEntriesMax : 128 FileNotFoundCacheLifetime : 0
После этого все изменения в общем доступе будут немедленно отображаться на клиенте (содержимое папки обновляется при каждом обращении к ней и локальный кэш не используется).
Существует еще несколько причин, по которым общая папка может работать в сети плохо, или содержимое папок может отображаться медленно:
- Включение параметра «Перечисление на основе доступа (ABE)» в настройках общей папки может привести к медленному обновлению списка файлов в общей папке с большим количеством объектов;
- На виртуальных машинах Hyper-V, работающих под управлением Windows Server 2019 (по сравнению с Windows Server 2016/2012R2), может наблюдаться низкая скорость сети;
- Попробуйте отключить устаревший протокол NetBIOS в свойствах соединения TCP/IPv4 на устройствах, подключенных к домену (
ncpa.cpl
-> откройте настройки TCP/IPv4 сетевого адаптера и выберите Отключить NetBIOS по TCPIP на WINS вкладка); - Попробуйте сбросить настройки сети и стека TCP/IP на клиентском устройстве Windows. В Windows 10+ можно использовать Сброс настроек сети на панели настроек или воспользуйтесь командой:
netsh int ip reset