W jaki sposób CHKDSK / F na zablokowanym woluminie „planuje się” przy ponownym uruchomieniu?

14

Przez lata działałem chkdsk /Fwiele razy ... a dziś musiałem uruchomić go na jednym z moich serwerów R2 w 2008 roku i otrzymuję normalny komunikat:

Program Chkdsk nie może zostać uruchomiony, ponieważ wolumin jest używany przez inny proces. Czy chcesz zaplanować sprawdzenie tego woluminu przy następnym uruchomieniu systemu? (T / N) y

Ten wolumin zostanie sprawdzony przy następnym uruchomieniu systemu.

Przejrzałem dokument Technet tutaj: http://technet.microsoft.com/en-us/library/cc730714.aspx, a także normalne wyszukiwanie w Google i wyszukiwanie w Technet i stronie: microsoft.com w google, ale można nie znajdź tego, czego szukam ...

Pytanie:

W JAKI SPOSÓB / system Windows planuje to przy ponownym uruchomieniu? Nie ma go w Harmonogramie zadań, RunOnce lub podobnym, co ma sens, jeśli trzeba go uruchomić, zanim system Windows zablokuje wolumin ... więc gdzie dokładnie Windows ustawia wykonanie tego „zaplanowanego zadania”, aby serwer wiedział o nim nawet tydzień później podczas ponownego uruchamiania okna serwisowego?

TheCleaner
źródło

Odpowiedzi:

19

Świetne pytanie. odpowiedź jest taka, że VolumeDirtybit jest ustawiony na woluminie, który (muszę założyć) jest sprawdzany podczas uruchamiania. Prawdopodobnie podobny do sposobu sprawdzania po włożeniu dysku flash i wyświetleniu wyskakującego okienka z napisem Skanuj lub Kontynuuj bez skanowania .

Kiedyś próbowałem wymyślić sposób zaplanowania chkdsk dla zautomatyzowanego serwera, który miał prawie zerową konserwację, ustawiając volumedirtybit za pomocą skryptu powershell ( dirtybitset = $true), ale to nie działało. Mogę ponownie odwiedzić, jak wynika z mojego linku, że istnieje ScheduleAutoChk, który właśnie to robi i działa w połączeniu z Dirtybit.

Dalsze badania tutaj stwierdzają:

Za każdym razem, gdy system Windows uruchamia się ponownie, jądro wywołuje program Autochk.exe w celu skanowania wszystkich woluminów w celu sprawdzenia, czy ustawiony jest bit zabrudzenia woluminu. Jeśli ustawiony jest brudny bit.

Więcej informacji na temat autochk.exemożna znaleźć tutaj, aby pomóc wyjaśnić, co się dzieje w witrynie Microsoft Technet i Wikipedii , gdzie Wikipedia mówi:

Po załadowaniu wszystkich sterowników rozruchowych i systemowych jądro (wątek systemowy) uruchamia podsystem menedżera sesji (smss.exe).

Przed otwarciem jakichkolwiek plików Autochk jest uruchamiany przez smss.exe. Autochk montuje wszystkie dyski i sprawdza je pojedynczo, aby sprawdzić, czy zostały całkowicie odmontowane. Jeśli autochk stwierdzi, że jeden lub więcej woluminów jest brudnych, automatycznie uruchomi program chkdsk

W szczególności pojawia się, jeśli zajrzysz do rejestru pod:

HKLM \ System \ CurrentControlSet \ Control \ Session Manager

Wartość BootExecutetego zmienia się z autocheck autochk *na coś podobnegoautocheck autochk /p \\??\C: autocheck autochk *

MDMoore313
źródło
1
aha ... OK spoko Znalazłem dodatkowy szczegół, który dodam do twojej odpowiedzi ... dziękuję, proszę pana!
TheCleaner
1
Dla odniesienia: wygląda na to, że można użyć chkntfs /c %SystemDrive%do zaplanowania woluminu rozruchowego w celu sprawdzenia przy ponownym uruchomieniu bez bezpośredniego mijania rejestru. (Oczywiście musisz mieć do tego uprawnienia administratora.)
cHao
@ cHao - niezależnie od tego, nie musisz bezpośrednio usuwać rejestru. `chkdsk / f% SystemDrive% robi to samo. Może nie śledzę twojego komentarza.
TheCleaner
@TheCleaner: chkntfs /cJednak nie pojawia się komunikat „Czy chciałbyś zaplanować ...?” skłonić. Może to być istotna różnica, jeśli chcesz na przykład wyczyścić dysk w ramach zaplanowanego zadania.
cHao
2
@ MDMoore313: /cto opcja zaplanowania kontroli. Bez tego chkntfspowie ci tylko, czy czek został zaplanowany.
cHao