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

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

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

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

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

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

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

Конечно, связанный вопрос, почему это происходит в первую очередь?

1 ответ

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

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

Другие вопросы по тегам