Затримка появи нових файлів в мережевій теці на Windows Server 2008 R2

У одного із замовників користувачі постійно скаржаться, що нові файли в загальній мережевий папці на 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).

Після цього всі зміни в мережевій теці будуть відразу відображатися на клієнті (вміст папки оновлюється кожного разу і локальних кеш не використовується).