Назад | Перейти на главную страницу

win2008r2: удалить поврежденный каталог без перезагрузки

У меня периодически возникает неприятная проблема на одном из серверов Windows 2008 R2 Web Edition. Речь идет о твердотельном накопителе, хотя я сомневаюсь, что это имеет значение.

У меня есть сценарий, который я запускаю, когда хочу повторно развернуть код веб-сайта. Первая строка скрипта выглядит так:

rmdir C: \ sites \ www.mywebsite-test.com / s / q

Иногда, когда эта строка запускается, она работает нормально, иногда каталог каким-то образом повреждается. Когда это происходит, я, как администратор, получаю отказ в доступе независимо от того, что я делаю с каталогом - не могу его открыть, удалить, переместить (проводник или командная строка), стать владельцем и т. Д. Я считаю, что причина в том, что Каталог на самом деле больше не существует, но что-то в нем висит, заставляя его по-прежнему отображаться в проводнике и командной строке. Если я перезагружаю сервер, когда я снова вхожу в поврежденный каталог, он исчезает. После этого все в порядке: я перезапускаю свой скрипт, первая строка отвечает предупреждением, что каталог не может быть найден, а затем он продолжается и развертывается в обычном режиме.

Это случилось последние два раза, когда я запускал этот скрипт. Ранее тот же сценарий выполнялся без проблем. У меня есть другой сценарий, который разворачивает производственный код с той же первой строкой, за исключением «-test». У меня никогда не было проблем со скриптом prod, хотя он запускается реже. Оба целевых каталога - это каталоги приложений IIS 7.5.

Я хотел бы знать, могу ли я что-нибудь сделать с поврежденным каталогом, когда это произойдет, чтобы мне не пришлось перезагружаться? Что делает Windows при перезагрузке, из-за чего каталог, наконец, уходит? Я бы хотел смоделировать это без перезагрузки. Перезагрузка - не такая уж большая проблема, но отключение всего сервера на 60 секунд из-за того, что один из моих тестовых каталогов испорчен, довольно раздражает.

Конечно, возникает связанный с этим вопрос: почему это вообще происходит?

Каталог не «поврежден». У вас есть открытый дескриптор элемента в этом каталоге или ниже, и пока дескриптор не будет закрыт, удаление не может быть завершено.

Вы можете использовать SysInternals handle.exe утилита для вывода списка открытых дескрипторов на машине и поиска процесса с открытым дескриптором. Если вы можете заставить этот процесс закрыть дескриптор (или просто завершить процесс), вы увидите, что удаление завершено.