Como o CHKDSK / F no volume bloqueado é "agendado" na reinicialização?

14

Corri chkdsk /Fvárias vezes ao longo dos anos ... e hoje tive que executá-lo em um dos meus servidores 2008 R2 e recebo a mensagem normal:

O Chkdsk não pode ser executado porque o volume está sendo usado por outro processo. Deseja agendar a verificação deste volume na próxima vez que o sistema reiniciar? (S / N) y

Este volume será verificado na próxima vez que o sistema reiniciar.

Examinei o documento da Technet aqui: http://technet.microsoft.com/en-us/library/cc730714.aspx , bem como a pesquisa normal do Google e a Technet e o site: microset.com no site: microsoft.com no google, mas é possível encontre o que estou procurando ...

A questão:

COMO / onde o Windows agendar isso na reinicialização? Ele não está no Agendador de Tarefas, no RunOnce ou similar, o que faz sentido se precisar ser executado antes que o Windows bloqueie o volume ... então, onde exatamente o Windows define essa "tarefa agendada" para que o servidor saiba sobre isso mesmo? semana depois, durante uma reinicialização da janela de manutenção?

O limpador
fonte

Respostas:

19

Ótima pergunta. a resposta é que o VolumeDirtybit está definido no volume, o qual (devo assumir) é verificado durante a inicialização. Provavelmente semelhante à maneira como é verificada quando uma unidade flash é inserida e é exibida a janela pop-up que diz Digitalizar ou Continuar sem digitalizar .

Uma vez tentei encontrar uma maneira de agendar um chkdsk para um servidor automatizado que tivesse quase zero de manutenção, definindo o volumedirtybit via script do PowerShell ( dirtybitset = $true), mas não funcionaria. Posso revisitar que, como aparece no meu link, há um ScheduleAutoChk que faz exatamente isso e trabalha em conjunto com o dirtybit.

Outras pesquisas aqui afirmam:

Sempre que o Windows é reiniciado, o Autochk.exe é chamado pelo Kernel para verificar todos os volumes e verificar se o bit sujo do volume está definido. Se o bit sujo estiver definido.

Mais informações autochk.exepodem ser encontradas aqui para ajudar a explicar o que está acontecendo no site da Microsoft Technet e na Wikipedia , onde a Wikipedia afirma:

Depois que todos os drivers de inicialização e do sistema forem carregados, o kernel (thread do sistema) inicia o subsistema do Gerenciador de sessões (smss.exe).

Antes de qualquer arquivo ser aberto, o Autochk é iniciado pelo smss.exe. O Autochk monta todas as unidades e as verifica uma de cada vez para ver se foram desmontadas ou não. Se o autochk determinar que um ou mais volumes estão sujos, ele executará automaticamente o chkdsk

Especificamente, ele aparece se você procurar no registro em:

Gerenciador de HKLM \ System \ CurrentControlSet \ Control \ Session

Existe um valor BootExecuteque é alterado de autocheck autochk *para algo comoautocheck autochk /p \\??\C: autocheck autochk *

MDMoore313
fonte
1
aha ... OK legal encontrei detalhes adicionais que adicionarei à sua resposta ... obrigado senhor!
TheCleaner
1
Para referência: parece que você pode usar chkntfs /c %SystemDrive%para agendar o volume de inicialização para verificar a reinicialização sem mexer diretamente com o registro. (Claro, você tem que ter direitos de administrador para fazê-lo.)
Chao
@cHao - você não precisa mexer com o registro diretamente, independentemente. `chkdsk / f% SystemDrive% faz a mesma coisa. Talvez eu não esteja seguindo seu comentário.
TheCleaner
@ TheCleaner: Com chkntfs /c, no entanto, você não recebe a mensagem "Deseja agendar ...?" pronto. Isso pode ser uma diferença importante se você quiser sujar a unidade como parte de uma tarefa agendada, por exemplo.
cHao
2
@ MDMoore313: /cé a opção para agendar a verificação. Sem ele, chkntfsapenas informará se uma verificação foi agendada.
cHao