win2008r2: Excluir o diretório corrompido sem reiniciar

2

Tenho um problema recorrente recorrente em um dos meus servidores da edição da Web do Windows 2008 R2. A unidade em questão é um SSD, embora eu duvide que seja relevante.

Eu tenho um script que executo quando desejo reimplantar o código do site. A primeira linha do script é assim:

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

Às vezes, quando essa linha é executada, ela funciona bem, outras vezes o diretório fica corrompido de alguma forma. Quando isso acontece, eu, como administrador, recebo Acesso negado, não importa o que eu faça para o diretório - não consigo abri-lo, apagá-lo, movê-lo (explorador ou linha de comando), assumir a propriedade etc. Acredito que a razão é diretório na verdade não existe mais, mas algo sobre ele está por aí fazendo com que ele ainda apareça no Explorer e na Linha de Comando. Se eu reiniciar o servidor, quando eu entrar no diretório corrompido se foi. Tudo está bem depois disso: eu re-executei meu script, a primeira linha responde com o aviso de diretório não pode ser encontrado e, em seguida, continua e implanta normalmente.

Isso aconteceu nas duas últimas vezes em que executei este script. O mesmo script anteriormente foi executado sem problemas. Eu tenho outro script que implanta o código de produção que tem a mesma primeira linha, exceto sem o "teste". Eu nunca tive o problema com o script prod, embora seja executado com menos freqüência. Ambos os diretórios de destino são diretórios de aplicativos do IIS 7.5.

Eu gostaria de saber se há algo que eu possa fazer no diretório corrompido quando isso acontecer, para que eu não precise reiniciar? O que o Windows está fazendo na reinicialização que finalmente está fazendo o diretório desaparecer? Eu gostaria de simular isso sem a reinicialização. A reinicialização não é um grande problema, mas derrubar todo o servidor por 60 segundos, porque um dos meus diretórios de teste está bagunçado é muito chato.

É claro que uma questão relacionada é por que isso está acontecendo em primeiro lugar?

    
por TTT 11.02.2013 / 17:12

1 resposta

4

O diretório não está "corrompido". Você tem um identificador aberto para um item no diretório ou abaixo dele e até que o identificador seja fechado, a exclusão não pode ser concluída.

Você pode usar o utilitário SysInternals handle.exe para listar alças abertas na máquina e localize o processo com a alça aberta. Se você conseguir que o processo feche o identificador (ou apenas termine o processo), verá a exclusão completa.

    
por 11.02.2013 / 17:15