Абонентское обслуживание
Проводник Windows зависает на минуту: виноваты сетевые диски
Два компьютера в одной организации с одной и той же жалобой: «переименовываешь файл на рабочем столе — и всё висит». Проводник замирал на 30–60 секунд, потом отпускал.
Два компьютера в одной организации с одной и той же жалобой: «переименовываешь файл на рабочем столе — и всё висит». Проводник замирал на 30–60 секунд, потом отпускал. Антивирус, диск, память — всё в норме. Классическая ситуация, когда переустановить Windows проще, чем разобраться, но переустановка здесь ничего бы не дала.
Как искали
Вместо перебора «а попробуйте это» мы даём пользователю один скрипт PowerShell, который ничего не меняет, только читает. Он собирает в один текстовый файл: модель дисков и их состояние, подключённые сетевые диски, запущенные клиенты облачных синхронизаций, ошибки дисковой подсистемы из журнала за неделю, зависания проводника за две недели, последние обновления. Файл присылают нам — и обычно причина видна с первого взгляда.
Ключевой фрагмент — проверка сетевых дисков и того, сколько времени занимает обращение к каждому:
"=== Network drives ==="
net use
Get-PSDrive -PSProvider FileSystem | Format-Table -Auto
"=== Desktop shortcuts: target / exists / check time ==="
$sh = New-Object -ComObject WScript.Shell
Get-ChildItem "$([Environment]::GetFolderPath('Desktop'))" -Filter *.lnk -Force |
ForEach-Object {
$t = $sh.CreateShortcut($_.FullName).TargetPath
$sw = [Diagnostics.Stopwatch]::StartNew()
$ex = if ($t) { Test-Path -LiteralPath $t } else { $null }
$sw.Stop()
[pscustomobject]@{ Name=$_.Name; Target=$t; Exists=$ex; Ms=$sw.ElapsedMilliseconds }
} | Format-Table -Auto -Wrap
Если у какого-то ярлыка или диска в колонке Ms тысячи миллисекунд — это и есть виновник.
Первый компьютер: четыре «мёртвых» диска
На машине были подключены четыре постоянных сетевых диска, которые смотрели на сервер, доступный только через VPN. VPN не был подключён, а Windows при каждом действии в проводнике честно ждала ответа от каждого из четырёх адресов. Таймаут SMB на каждый — и набегает та самая минута.
Решение — удалить постоянные подключения и подключать диски после VPN без флага «восстанавливать при входе»:
net use R: /delete
net use R: \\сервер\папка /persistent:no
Заодно сбросили «тип папки» для рабочего стола и каталогов (Windows иногда назначает папке с документами режим «картинки» и пытается строить миниатюры для всего).
Второй компьютер: диск живой, но медленный
Здесь сетевой диск был доступен, но проводник всё равно подтормаживал. Замер показал: имя сервера разрешалось за секунду с лишним — не через DNS, а через медленный перебор NetBIOS и LLMNR. Добавили одну строку в файл hosts с адресом сервера — разрешение имени упало до 3 мс, тормоза исчезли.
Мораль: если в сети есть файловый сервер по имени, у него должна быть нормальная запись в DNS. Строка в hosts — быстрая заплатка, правильное решение — на сервере DNS.
Что ещё увидели по пути
Диагностический скрипт показал и то, о чём не спрашивали: на одной из машин были отключены обновления Windows и не работала защита, а на компьютере хранились чувствительные рабочие данные. Мы это не «починили втихую», а вынесли заказчику отдельным пунктом с рисками и рекомендацией — это уже вопрос политики организации, а не техники.
Для чего это читать
Если проводник зависает «просто так» — почти всегда это ожидание чего-то сетевого: отключённого диска, недоступного принтера, ярлыка на ушедший сервер. Сначала стоит посмотреть net use, а не переустанавливать систему. Поддержка пользователей, в том числе такие расследования, входит в абонентское обслуживание.
\newpage
Ещё проекты
Похожие объекты
Абонентское обслуживание
Синий экран раз в несколько дней: читаем дамп, а не гадаем
Компьютер в организации падал в синий экран. Не каждый день, а раз в несколько дней, в случайное время, посреди работы.