Hibernacja jest wyłączona, hiberfil.sys jest odtwarzany przy każdym uruchomieniu

20

Mam system Windows 7 działający na małej partycji (40 GB) z ram 4 GB. Oznacza to, że plik hiberfil.sys utworzony przez Hibernate zajmuje znaczną część dostępnego miejsca na dysku. Chciałbym to usunąć.

Wiem, że mogę wyłączyć Hibernację i usunąć hiberfil.sys, wprowadzając wiersz powercfg -h offpolecenia z podwyższonym poziomem uprawnień. Działa to - plik jest natychmiast usuwany, a po wykonaniu tego HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\HibernateEnabledklucz jest (poprawnie) ustawiony na 0.

Jednak przy następnym uruchomieniu komputera hiberfil.sys powraca z martwych, Hibernate jest ponownie włączany, a ten klucz rejestru powrócił do 1.

Jestem prawie na tym rozumu. Niemal wszystko, co mogę znaleźć w Internecie, związane z usunięciem pliku hiberfil.sys, po prostu sugeruje użycie powercfg do wyłączenia hibernacji, i to wydaje się działać dla prawie wszystkich. Ale po prostu do mnie wraca! (Jak wampir ssący moje miejsce na dysku.) Znalazłem jeszcze jeden wątek od kogoś, kto wydaje się mieć ten sam problem, ale żadna z sugestii nie zadziałała dla oryginalnego plakatu (lub dla mnie). Mimo to próbowałem wszystkiego tam wymienionego, w tym:

  • Wyłączanie snu hybrydowego

  • Wyłączanie trybu hibernacji za pomocą wiersza polecenia, interfejsu GUI opcji zasilania i obu (w obu kolejności)

  • Ręczna zmiana HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\HibernateEnabledklucza

  • Prawie wszystko inne, o czym mogę myśleć!

Chcę powtórzyć, że nie mam problemu z usunięciem pliku - to działa świetnie. Po prostu wraca po każdym ponownym uruchomieniu. Jestem gotów rzucić ręcznik i po prostu uruchomić skrypt przy logowaniu, aby za każdym razem wyłączać Hibernację, nawet jeśli wydaje się to szalonym, hackującym „rozwiązaniem”. . . ale miałem nadzieję, że ktoś tu pierwszy zasugeruje coś innego.

Corey White
źródło
Musisz mieć oprogramowanie monitorujące i chroniące rejestr.
Moab,
1
Biorąc pod uwagę, jak długo trwało to pytanie, a ponieważ może to być powszechna kwestia, obdarzyłem go nagrodą.
bwDraco - Przywróć Monikę
Nie masz zainstalowanego niestandardowego oprogramowania rozruchowego, które by to zrobiło, prawda?
Mehrdad,

Odpowiedzi:

18

Moja instalacja systemu Windows 7x64 odbywa się na partycji SSD na laptopie Mac. Wyłączyłem przy wyłączonym powercfg / h (podwyższonym) i wyłączeniu hibernacji przez ms fixit, a także ustawieniu wartości klucza rejestru HibernateEnable na 0. Hiberfil.sys jest usuwany tylko do ponownego uruchomienia. Kiedy uruchamiam natywny plik hiberfil.sys jest zawsze ponownie tworzony, ale kiedy uruchamiam w OS X i VMware Fusion, hibernacja pozostaje wyłączona, tak jak powinna.

Sugestia Toma Wijsmana dotycząca ProcessMonitor z rejestrowaniem rozruchu pomogła mi stwierdzić, że vmtoolsd.exe (z VMware) ponownie włączał klucz rejestru podczas rozruchu natywnego. Próbowałem zmienić uprawnienia w regedit, ale nie zatrzymały zmiany wartości na 1. Myślałem o utworzeniu małego pliku hiberfil.sys, ale myślę, że to by było nadpisane.

Jako rozwiązanie 99% zmieniłem wartość HiberFileSizePercent na dziesiętną 1, co sprawia, że ​​hiberfil.sys zajmuje tylko 80 MB na 8 GB pamięci RAM. Myślę, że mógłbym spróbować 0,001 lub mniej, ale 80 MB to niewiele.

zielony człowiek
źródło
1
Dziękuję - Jestem też na Macbooku z Bootcamp i VMWare Fusion, prawdopodobnie zaoszczędziłeś mi godziny.
DanB
13

Możesz to łatwo rozwiązać za pomocą Monitora procesów .

Uruchom go i włącz rejestrowanie rozruchu w menu Opcje , uruchom ponownie komputer i uruchom Process Monitor.

Następnie pozwól mu przestać przechwytywać, a następnie wyszukaj HibernateEnabledi sprawdź, co zmieniło wartość.


W celu uzyskania bardziej zaawansowanych informacji można to również zrobić za pomocą XBootMgr z zestawu Windows Performance Toolkit.

Instrukcje instalacji - Dokument analizy wydajności przejścia On / Off

Tamara Wijsman
źródło
3
Ponieważ Twoja odpowiedź ma największy potencjał do rozwiązania problemu, postanowiłem przyznać nagrodę.
bwDraco - Przywróć Monikę
Ta metoda rozwiązała mój problem. Dzięki! (Mój problem dotyczy Wake-On-LAN, szczegóły tutaj: superuser.com/questions/1405082/... )
smwikipedia
6

Jeśli korzystasz z Boot Camp i Fusion VMware:

Znajdź plik% programfiles% \ VMware \ VMware Tools \ plugins \ vmsvc \ disableGuestHibernate.dll usuń go lub przenieś.

Na koniec wyłącz hibernację raz na zawsze, otwierając monity o podniesione uprawnienia administratora i uruchamiając:

powercfg -h wyłączony

Wtyczka disableGuestHibernate ładuje się podczas ładowania narzędzi vmware. Jeśli narzędzia vmware zostaną załadowane podczas działania w vm, wyłączy hibernację (ponieważ vmware ma własny system zawieszania, co powoduje, że hibernacja jest zbędna). Ale jeśli narzędzia vmware ładują się poza vm (tj. Używasz boot camp do uruchamiania systemu Windows) włącz ponownie hibernację, jeśli jest wyłączona.

themaninblack
źródło
To świetna odpowiedź i bardzo szczegółowa. Gdybym mógł dać 10 głosów pozytywnych, zrobiłbym to!
Rijk
Nawiasem mówiąc: po prostu zmiana nazwy nie działa, naprawdę musisz usunąć dll.
Rijk
To też mnie naprawiło. Głosuj!
MortenRøgenes
4

Możesz spróbować ponownie włączyć i wyłączyć hibernację. W cmd „Uruchom jako administrator” wykonaj:

powercfg.exe /hibernate on
powercfg.exe /hibernate off
del c:\hiberfil.sys

Jeśli używasz laptopa, po włączeniu hibernacji i przed wyłączeniem go wykonaj również następujące czynności:

  1. Upewnij się, że sen hybrydowy jest wyłączony.
  2. Opcje zasilania → Zmień ustawienia planu → Zmień zaawansowane ustawienia zasilania, rozwiń opcję Uśpij i zmień wartość „Na baterii” i „Podłączony” na 0 minut.

wizerunek

harrymc
źródło
2

Miałem ten sam problem. Wypróbowany:

powercfg –H OFF

Set HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\HibernateEnabled

Ustaw Control Panel\All Control Panel Items\Power Options\Edit Plan Settingsna Nigdy dla wszystkich opcji zasilania.

Plik wciąż wraca do życia. Porada użycia monitora procesu załatwiła sprawę. System, którego używam, ma zainstalowany „Pointsec na PC”, a proces prot_srv.exe ciągle resetuje tę wartość. Biorąc pod uwagę, że ten komputer jest zablokowany za pomocą tego oprogramowania, niewiele mogę zrobić.

TryingToHelp
źródło
1

to samo tutaj!

z frustracji skonfigurowałem nawet lokalne zasady tak, aby uruchamiał cmd podczas uruchamiania komputera, który uruchamiałby linię powercfg, ale nawet to nie wystarczy!

to jest naprawdę frustrujące, ponieważ uruchamiam Win7 Ultimate na partycji 60 GB.

w następnym eksperymencie będę się bawić kluczem rejestru „HiberFileSizePercent” pod:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power

i sprawdź, czy może to zmusić go do (ponownego) utworzenia co najmniej mniejszego pliku.

fa.

Szczery
źródło
+1 - To chyba dobry pomysł. Natknąłem się na to samo rozwiązanie, pomagając innemu użytkownikowi w jego niezwiązanych problemach z hibernacją.
SgtOJ,
Nigdy nie rozwiązałem tego. Przez jakiś czas uruchamiałem skrypt logowania, ale był on luźny i ostatecznie kupiłem większy dysk i zostawiłem plik hiberfil.sys. Życzę powodzenia i będę śledzić ten wątek. Jeśli Ci się powiedzie, odeślij!
Corey White,
Możesz także usunąć hiberfil.syspo wyłączeniu hibernacji, a następnie utworzyć katalog o nazwie hiberfil.sys. Nie możesz mieć pliku i katalogu w tym samym katalogu o tej samej nazwie, więc system Windows nie będzie mógł utworzyć pliku o nazwie hiberfil.sys. Oczywiście stwardnienie rozsiane mogło wziąć to pod uwagę i może utworzyć kolejny plik (hiberfi2.sys?) Lub może głośno na to narzekać.
Boczek Bity
@BaconBits: biziclop powiedział, że to nie działa; System Windows zastępuje folder hiberfil.sysplikiem.
bwDraco - Przywróć Monikę
1

Nie rozwiązanie, ale obejście, które zadziałało dla mnie:

Miałem tylko 900 MB wolnego miejsca na dysku C i chciałem pozbyć się pliku hiberfil.sys, który zajął ponad 6 GB. Więc usunąłem go za pomocą powercfg -h. Ale po prostu wracał po około 10 sekundach czy coś. Myślę, że ma to coś wspólnego z PointSec, ponieważ zostało to wspomniane wcześniej tutaj.

Następnie wyłączyłem hibernację, a następnie szybko skopiowałem plik 1 GB na dysk C. Teraz nie wraca i mam jeszcze 6 GB miejsca. Myślę, że wciąż próbuje włączyć hibernację i stwierdza, że ​​nie ma już na to miejsca. I następnym razem, gdy zabraknie mi miejsca na dysku C, nadal mogę usunąć plik 1 GB.

Roberg
źródło
0

Może ręcznie odtworzysz go po usunięciu i ustawisz uprawnienia, aby uniemożliwić systemowi modyfikowanie pliku? Wiem, to długa szansa.

Czy może to być spowodowane partycją przywracania lub podobną?

oktosiTe
źródło
0

Mam obejście, które wydaje się działać dobrze dla mnie (choć może nie wszyscy). Z tego, co zebrałem, vmtoolsd.exe wyłącza hibernację podczas uruchamiania w VMware, a następnie włącza ją ponownie (niezależnie od poprzedniego stanu) podczas rozruchu natywnie. Ponieważ narzędzia VMware nie są potrzebne podczas uruchamiania natywnego (Boot Camp), stworzyłem plik wsadowy zawierający:

@echo off

if "%NUMBER_OF_PROCESSORS%" == "1" goto :enable
goto :end

:enable
net start "VMware Tools"

:end

Ustawiłem usługę VMware Tools na Ręcznie (zamiast Automatycznie) i utworzyłem zadanie w Harmonogramie zadań. Zadanie jest skonfigurowane w następujący sposób:

  • Uruchom, czy użytkownik jest zalogowany, czy nie
  • Uruchom z najwyższymi uprawnieniami
  • Ukryty (może nie być konieczny)
  • Wyzwalacze: przy uruchomieniu systemu
  • Działania: plik wsadowy powyżej
  • Odznacz wszystko w Warunkach / Ustawieniach (może nie być konieczne)

UWAGA: ponieważ polegam na NUMBER_OF_PROCESSORS, które różnią się od tego, kiedy są uruchamiane natywnie, zadziała to tylko wtedy, gdy maszyna wirtualna nie otrzyma takiej samej liczby procesorów (logicznych, a nie fizycznych) na komputerze Mac.

Ponadto plik wsadowy można uprościć w celu:

@if "%NUMBER_OF_PROCESSORS%" == "1" net start "VMware Tools"

W pliku wsadowym miałem kilka rzeczy do debugowania / testowania i po prostu je zachowałem.

Brandon Crawford
źródło
ot, ale posiadanie kontroli równości i 2 nakładających się na siebie gototakich boli moje zmysły estetyczne, kiedy można mieć po prostu nierówność i 1 goto.
underscore_d
0

Jak powiedział OKtosiTe, wypróbowałem to podstępne podejście, ponieważ nic innego nie działało dla mnie. ProcessMonitor po prostu pokazał, że wpis do rejestru jest tworzony powercfg.exesam.

Nie mogę po prostu wyłączyć / zmienić nazwy ani usunąć.

Prawdopodobnie z powodu Zasad Grupy, które są na całym moim laptopie (firmowy laptop -> firmowe głupie polityki bezpieczeństwa!).

Uruchomiłem więc polecenie, hiberfile.syszniknąłem na kilka sekund, skopiowałem plik o nazwie hiberfile.sysz innego miejsca (utworzony w edytorze i wielkości 1 KB) i zmieniłem jego uprawnienia tylko do odczytu (właściwości pliku).

Czy magia!

W skrócie:

  1. Uruchom w cmd powercfg -h off
  2. Skopiuj przygotowany plik hiberfile.sys
  3. Właściwości -> tylko do odczytu

Gotowy!

Uwaga: bez zmiany pliku uprawnień wracam do około 6 GB w moim przypadku.

hiberfile.sys tylko teraz 1 KB

Yrk
źródło
0

Kredyt trafia do @Tom Wijsman.

Mój konkretny problem dotyczy Wake-On-LAN zablokowanego przez hibernację, szczegóły tutaj: Jak trwale wyłączyć hibernację w systemie Windows 10?

Postępowałem zgodnie z jego metodą i otrzymałem dziennik rozruchu.

W moim przypadku to vmtoolsd.exeustawienie utrzymało poniżej wartości rejestru wartość 1, co całkowicie pobiło powercfg /h off.

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\HibernateEnabled

vmtoolsd.exeNależy do VMware Tools.

Po odinstalowaniu hiberfil.sysnigdy nie został ponownie utworzony.

smwikipedia
źródło
-2

Połowa odpowiedzi:

W systemie Windows XP było to łatwe i trwałe rozwiązanie:

  1. Usuń hiberfil.sys za pomocą tego polecenia (z uprawnieniami administratora): powercfg -h off

  2. utwórz folder o nazwie „hiberfil.sys” w C: \

Niestety, Win7 jest „mądrzejszy” niż XP i zabija ten folder, ignorując każdą kombinację własności / uprawnień, którą wypróbowałem. Ale czasami mój folder hiberfil.sys przetrwał pojedynczy restart bez zastępowania. Interesujące jest również to, że system wydawał się ponownie generować oryginalny plik po kilku sekundach na pulpicie pojawiło się okno C: \.

I dziękuję za moje pierwsze zdanie :)

użytkownik188421
źródło
To może nie być taki zły pomysł - możesz ustawić jego uprawnienia, aby nawet System nie mógł go usunąć (bez wcześniejszej zmiany uprawnień). Oczywiście win7 może po prostu odmówić rozruchu.
Hugh Allen,
@Hugh: Możliwe, że kod hibernacji, będący częścią jądra, po prostu zignoruje listy ACL.
user1686,