TL; DR:
Zauważyłem, że jeśli dokonam zmiany rejestru, a następnie mocno zamknę system Windows 10, zmiana rejestru nie pojawi się po ponownym uruchomieniu.
Zauważyłem również, że usunięcie pliku hibernacji może wpłynąć na zdolność narzędzia do odzyskiwania systemu Linux do wprowadzania zmian w rejestrze systemu Windows w trybie offline. Narzędzie wydaje się nie być w stanie wprowadzić trwałych zmian po usunięciu pliku hibernacji. Poniżej wymienię konkretne przykłady.
Przykład 1:
- Dodam klucz o nazwie „1111” do „HKLM \ SOFTWARE”. Następnie mocno wyłączam urządzenie, przytrzymując przycisk zasilania przez 5 sekund.
- Po ponownym utworzeniu rejestru ten klucz i jego wartości zniknęły:
- (Te obrazy zostały edytowane do celów formatowania)
Przykład 2 :
- Wprowadź zmiany w rejestrze (używając regedit)
- Hibernuj system
- Uruchom narzędzie do odzyskiwania systemu Linux
- Usuń plik hibernacji, aby zamontować dysk.
- Przeczytaj rejestr systemu Windows (z narzędzia do odzyskiwania)
- Zmiana rejestru zniknęła.
Wydaje się to równoznaczne z silnym zamknięciem systemu.
Przykład 3:
Widzę dziwniejsze zachowanie, gdy:
- Hibernuj pudełko
- Uruchom narzędzie do odzyskiwania systemu Linux i usuń plik hibernacji
- Wprowadź zmiany w rejestrze (z narzędzia do odzyskiwania)
- Uruchom ponownie pudełko
Zmiany te również nie są odzwierciedlone w rejestrze.
Co tu się dzieje?
- Kiedy system Windows 10 zapisuje zmiany rejestru na dysku?
- Dlaczego usunięcie pliku hibernacji (w przykładzie 3) uniemożliwia odzwierciedlenie zmian rejestru wprowadzonych za pomocą narzędzia do odzyskiwania przy następnym uruchomieniu?
Mając nadzieję na wyjaśnienie!
windows-10
windows-registry
hibernate
Shrout 1
źródło
źródło
Odpowiedzi:
TL; DR: Wyłącz system poprawnie.
Hibernacja nie ma nic wspólnego z zamykaniem, jest ściśle związana z zawieszeniem do pamięci RAM (uśpieniem), z wyjątkiem zawartości pamięci RAM wypchniętej na dysk w celu ponownego odczytania i wznowienia operacji dokładnie od miejsca, w którym system został przerwany .
Jeśli chcesz, aby zmiany się utrzymywały, musisz wyłączyć hibernację i Windows Fastboot (który jest podzbiorem hibernacji). Lub możesz zrestartować komputer zamiast hibernować i uruchomić ponownie.
Powodem, dla którego zmiany nie zostały utrwalone, jest to, że nie zostały jeszcze zapisane na dysku, z wyjątkiem pliku hibernacji. Które usuwasz, co oznacza, że system plików może musieć się naprawić i wrócić do stanu „ostatniego znanego dobrego”.
Podczas gdy system jest w stanie hibernacji, będzie kilka kluczowych struktur systemu plików, które mogły nie zostać zapisane na dysk, a zamiast tego są w pamięci RAM. Po wznowieniu hibernacji system będzie oczekiwał, że dysk będzie w bardzo szczególnym stanie i możliwe jest, że pamięci podręczne dysków i ważne pliki systemowe zostaną zapisane w pliku hibernacji, a nie na dysku.
Jeśli wykonasz prawidłowe zamknięcie, system Windows poprawnie opróżni pamięć roboczą na dysk, a następnie odmontuje dysk przed czyszczeniem.
Aby wymusić prawidłowe zamknięcie, otwórz wiersz polecenia i wpisz
/s
to „zamknięcie”,/f
wymuszenie i/t 0
oznaczenie „teraz” (czas = 0 sekund)Lub możesz po prostu wyłączyć fastboot i hibernację.
Przeczytaj więcej na HowtoGeek: Zamykanie nie powoduje pełnego zamknięcia systemu Windows 10 (ale restartowanie działa)
Problemem związanym z twardym zamykaniem systemu jest to, że Windows nie ma gwarancji, aby zapisać zmiany na dysku w tej samej milisekundie (lub nawet minucie), w której dokonano zmiany. Prawie na pewno zostanie napisane w ciągu kilku minut, ale prawdopodobieństwo, że zostanie napisane, z czasem wzrośnie. Jest mało prawdopodobne, aby być napisane natychmiast, a następnie blisko do chwili dokonać zmiany gwałtownie wzrasta prawdopodobieństwo, i prawie na pewno zostały napisane w ciągu godziny.
Rzecz w tym, że wymuszając twarde zamknięcie systemu, nie dajesz systemowi szansy na bezpieczne zapisanie zmian na dysku.
Większość współczesnych systemów plików została napisana w celu dokonywania zmian w najbezpieczniejszy możliwy sposób. W przeszłości były one określane jako „atomowe”, ponieważ zmiana nastąpiła albo nie.
Dziś znamy je jako osadzone systemów plików , ponieważ mają one dziennik operacji, które będą się zdarzyć, że może być albo cofnięte lub walcowane przodu w przypadku awarii i ponownym uruchomieniu systemu. Po uruchomieniu z powodu awarii zasilania system sprawdza dziennik i dla każdej transakcji sprawdza, czy rzeczywiste dane pliku są zapisywane na dysku i czy są „dobre”. Jeśli tak, to przejście przewija się do przodu i jest zakończone, jeśli nie, to przywraca stare dane.
Korzystając z tej kolejności, dysk jest prawie zawsze w stanie łatwym do naprawy.
Ale zmuszając system do nieoczekiwanego wyłączenia, nie możesz zagwarantować, że transakcja przebiegła wystarczająco daleko, aby przejść do przodu po naprawie, i są szanse, że system operacyjny, taki jak Linux, nie będzie obchodził historii transakcji tak bardzo jak Windows i jest bardziej prawdopodobne niż nie wprowadzać zmian, które przewracają wszystko do tyłu, a nie do przodu.
Po ponownym uruchomieniu w systemie Windows może on spróbować lub być w stanie naprawić dysk poprawnie, ponieważ ma bardziej intymną znajomość systemu plików.
źródło
Zgodnie z dokumentacją na stronie MSDN dla
RegFlushKey
:Sugeruje to, że oprócz natychmiastowego opróżnienia określonego klucza na dysk (co blokuje wszystkich innych poza rejestrem aż do zakończenia opróżniania ), rejestr jest okresowo automatycznie czyszczony: nie podano czasu, ale przypuszczalnie jest to co najmniej więcej niż czas oczekiwania między napisaniem klucza a twardym zamknięciem. Ponadto jest on spłukiwany przy wyłączaniu, jak już się domyśliłeś.
Możesz użyć
RegFlushKey
funkcji w oprogramowaniu, która manipuluje tym kluczem, lub utworzyć dodatkowe narzędzie, aby wymusić natychmiastowe zapisanie klucza rejestru na dysku, jeśli ma to zasadnicze znaczenie dla przypadku użycia.źródło
sync
nie równo rejestr na dysku. To po prostu nie miałoby sensu. Dlaczego opróżnianie pamięci podręcznej systemu plików (która jest używana przez menedżera konfiguracji, a nie na odwrót) powinno nagle opróżniać pamięć podręczną menedżera konfiguracji? Nawet nie wie, jaka jest struktura pamięci podręcznej wyższego poziomu, jeśli w ogóle istnieje.TL; DR: Bardzo ostrożnie jest to zrobić w odpowiednim momencie .
Dokumentacja
FSCTL_MARK_AS_SYSTEM_HIVE
zawiera następujące informacje:Nie wierzę, że jest więcej szczegółów dostępnych publicznie niż to.
Należy pamiętać, że opróżnienie systemu plików nie oznacza opróżnienia rejestru , ponieważ rejestr może wykonywać buforowanie w górnej części systemu plików. Aby najpierw opróżnić rejestr, musisz w jakiś sposób wywołać
NtFlushKey
lubZwFlushKey
zostać wezwanym na klucz zainteresowania.źródło