впервые размещаю здесь! У меня пока нет очков репутации для встроенных изображений и ссылок, извините.
Укороченная версия:
Я изучаю проблему, о которой сообщили наши пользователи. у них есть пакетные сценарии, которые быстро копируют / объединяют / переименовывают / архивируют / удаляют файлы в сетевой папке, и иногда пакетный файл дает сбой, потому что он не может найти / получить доступ к одному из файлов.
При открытии общего ресурса в проводнике Windows и быстром нажатии клавиши F5 это резко увеличивает количество ошибок. Если оставить папку в покое, полностью закрыв проводник, проблема почти полностью исчезнет.
Я сузил его до (возможно) проблемы с проводником Windows или smb2.x на windows7 и 2008r2. Win8, Win10 и 2012R2 не обнаруживают этой проблемы. Я хочу уточнить у сообщества, является ли это ошибкой в моих методах тестирования или действительно есть ошибка в ОС.
Расширенная версия, шаги по воспроизведению, проверенные обходные пути:
Для проверки проблемы был создан командный файл
Это происходит в бесконечном цикле и в системе без ошибок процессора / памяти никогда не должно выходить из строя. Но это так - иногда он просто не может найти файл, который должен переименовать или прочитать (например, не удается найти файл .old)
вот пример скриншота:
нажмите, чтобы увеличить
Чтобы убедиться, что это не проблема самого пакетного файла, я написал небольшую программу на C #, которая, по сути, делает то же самое. Я могу воспроизвести проблему 1: 1 с этой программой.
Во время тестирования я заметил, что когда целевая папка открыта в проводнике Windows, проблема возникала чаще, чем когда у меня папка не открывалась. Я подозревал, что это связано с "автообновлением". «принудительно» это условие (кнопка F5) я мог воспроизводить проблему каждый раз очень быстро.
Итак, я провел следующий тест: serverfault.com/questions/642254/files-not-appearing-caching-or
Отключить настройки автообновления проводника на клиенте Win7
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoRemoteRecursiveEvents"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoRemoteChangeNotify"=dword:00000001
это решило проблему с не касанием клавиатуры, программа долго работает без проблем. но как только я вручную нажимаю и продолжаю нажимать F5 для быстрого обновления проводника, проблема появляется снова:
нажмите, чтобы увеличить
Мой вывод на этом этапе: функция «обновления» проводников вызывает проблему с «сетевой» передачей или блокировку файла, нарушение совместного доступа и т. Д.?
Дальнейшее расследование: Я хотел выяснить, в каких системах это происходит, поэтому я провел много тестов на разных ОС (всегда используя трюк с обновлением F5). Я мог воспроизвести эту проблему только в win7 и 2008r2, win8,10 и 2012r2 прошли без ошибок. Я исключил настройки безопасности компании, запустив тесты на виртуальных машинах, не присоединенных к домену, и на частных домашних компьютерах проблема существует и там.
единственное, что нужно было проверить, это версия SMB, поэтому я отключил SMB2.x на win7 (http s: //support.microsoft.com/de-de/kb/2696547)
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi
sc.exe config mrxsmb20 start= disabled
Результат: проблема была «решена» (скорее, обходной путь) переключением на SMB1.5 в Windows 7.
Вывод:
быстрое создание / переименование файлов в общих сетевых ресурсах при обновлении папки проводника вызывает проблемы на win7 и 2008r2 при использовании SMB2.x. переход на SMB 1.5 решает проблему. более новые ОС не затрагиваются независимо от версии SMB.
Мои вопросы:
пакетный файл -> pastebin.com/Dc2QHB8y
тестовая программа c # -> pastebin.com/Xx11MFdr
список тестов систем -> pastebin.com/p24Jz0Aw