O Hibernate está desativado, o hiberfil.sys é recriado a cada inicialização

20

Eu tenho o Windows 7 rodando em uma pequena partição (40 GB), com 4 GB de RAM. Isso significa que o arquivo hiberfil.sys criado pelo Hibernate ocupa uma parte significativa do espaço em disco disponível. Eu gostaria de removê-lo.

Estou ciente de que posso desativar o Hibernate e remover o hiberfil.sys inserindo powercfg -h offum prompt de comando elevado. Isso funciona - o arquivo é removido imediatamente e, após isso, a HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\HibernateEnabledchave é (corretamente) definida como 0.

No entanto, na próxima vez que eu reiniciar o PC, o hiberfil.sys retorne dos mortos, o Hibernate será reativado e essa chave do Registro retornará para 1.

Estou praticamente do lado da minha mente com isso. Quase tudo o que posso encontrar online relacionado à remoção do arquivo hiberfil.sys simplesmente sugere o uso do powercfg para desativar a hibernação, e isso parece funcionar para praticamente todos. Mas isso continua voltando para mim! (Como um vampiro, sugando meu espaço em disco.) Encontrei outro tópico de alguém que parece ter o mesmo problema, mas nenhuma das sugestões funcionou para o pôster original (ou para mim). Ainda assim, eu tentei de tudo listado lá, incluindo:

  • Desativando o sono híbrido

  • Desabilitando o Hibernate através do prompt de comando, pela GUI de Opções de Energia e pelas duas (em ambas as ordens)

  • Alterar manualmente a HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\HibernateEnabledchave

  • Praticamente tudo o mais que consigo pensar!

Quero reiterar que não tenho problemas em remover o arquivo - isso funciona muito bem. Ele volta após cada reinicialização. Estou quase pronto para jogar a toalha e apenas executar um script no login para desativar o Hibernate toda vez, mesmo que pareça uma "solução" loucamente hacky. . . mas eu esperava que alguém aqui pudesse sugerir outra coisa, primeiro.

Corey White
fonte
Você deve ter algum software de segurança monitorando e protegendo o registro.
Moab
11
Dado há quanto tempo essa questão está lá, e como esse pode ser um problema predominante, eu coloquei uma recompensa nessa questão.
precisa saber é o seguinte
Você não tem um software de inicialização personalizado instalado que faria isso, faria?
Mehrdad

Respostas:

18

Minha instalação do Windows 7x64 está em uma partição SSD em um laptop Mac. Eu desabilitei com powercfg / h desativado (elevado) e o ms fixit desabilita o hibernate, bem como a chave de registro de configuração HibernateEnable como 0. O Hiberfil.sys é excluído apenas até a reinicialização. Quando eu inicializo o hiberfil.sys nativo, sempre é recriado, mas quando eu inicializo o OS X e o VMware Fusion, a hibernação permanece desativada, como deveria.

A sugestão de Tom Wijsman do ProcessMonitor com registro de inicialização me ajudou a descobrir que o vmtoolsd.exe (da VMware) estava reativando a chave do registro durante a inicialização nativa. Tentei alterar as permissões no regedit, mas elas não pararam a alteração do valor para 1. Pensei em criar um pequeno hiberfil.sys, mas acho que isso teria sido substituído.

Como uma solução de 99%, alterei o valor HiberFileSizePercent para decimal 1, o que torna o hiberfil.sys apenas 80 MB em uma máquina de 8 GB de RAM. Suponho que poderia tentar 0,001 ou menos, mas 80 MB não é muito.

greenfellow
fonte
11
Obrigado - também estou em um Macbook com Bootcamp e VMWare Fusion, você provavelmente me salvou horas.
214 DanB
13

Você pode solucionar facilmente isso com Process Monitor .

Inicie e ative o registro de inicialização no menu Opções , reinicie o computador e inicie o Process Monitor.

Depois, deixe de capturar e procure por HibernateEnabled e verifique o que mudou o valor.


Para informações mais avançadas, isso também pode ser feito com o XBootMgr no Windows Performance Toolkit.

Instruções de instalação - Documento de análise de desempenho de transição On / Off

Tamara Wijsman
fonte
3
Como sua resposta tem maior potencial para solucionar o problema, decidi conceder a recompensa a você.
precisa saber é o seguinte
Este método resolveu meu problema. Obrigado! (Meu problema é sobre o Wake-On-LAN, detalhes aqui: superuser.com/questions/1405082/… )
smwikipedia
6

Se você estiver usando o boot camp e a fusão de vmware:

Localize o arquivo% programfiles% \ VMware \ VMware Tools \ plugins \ vmsvc \ disableGuestHibernate.dll exclua-o ou mova-o.

Por fim, desative a hibernação de uma vez por todas, abrindo um prompt de comando elevado do administrador e executando:

powercfg -h desligado

O plug-in disableGuestHibernate é carregado quando as ferramentas vmware são carregadas. Se as ferramentas vmware forem carregadas durante a execução em uma vm, ela desativará a hibernação (uma vez que o vmware possui seu próprio sistema de suspensão, tornando a hibernação redundante.) reative a hibernação se estiver desativada.

themaninblack
fonte
Esta é uma ótima resposta e bem detalhada. Se eu pudesse dar 10 votos positivos, eu daria!
Rijk
A propósito: simplesmente renomeá-lo não funciona, você realmente precisa remover a dll.
Rijk
Isso corrigiu para mim também. Voto a favor!
MortenRøgenes
4

Você pode tentar ativar e desativar a hibernação novamente. No cmd "Executar como Administrador", faça:

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

Se você estiver usando um laptop, depois de ativar a hibernação e antes de desligá-lo, faça também o seguinte:

  1. Verifique se o sono híbrido está desativado.
  2. Opções de energia → Alterar configurações do plano → Alterar configurações avançadas de energia, expandir Suspensão e alterar o valor de "Na bateria" e "Conectado" para 0 minutos.

imagem

harrymc
fonte
2

Eu tive o mesmo problema. Tentou:

powercfg –H OFF

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

Defina Control Panel\All Control Panel Items\Power Options\Edit Plan Settingspara Nunca para todas as opções de energia.

E o arquivo continuava voltando à vida. O conselho de usar o monitor de processo fez o truque para mim. O sistema que eu uso tem o "Pointsec for PC" instalado e o processo prot_srv.exe ficava redefinindo esse valor. Dado que este PC está bloqueado com este software, não há muito que eu possa fazer.

TryingToHelp
fonte
1

mesma coisa aqui!

por frustração, eu até configurei a política local de forma a executar um cmd na inicialização da máquina que executaria a linha powercfg, mas mesmo isso não é o suficiente!

isso é realmente frustrante, pois estou executando o Win7 Ultimate em uma partição de 60 GB.

no meu próximo experimento, brincarei com a chave de registro "HiberFileSizePercent" em:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power

e veja se isso pode forçá-lo a (re) criar um arquivo menor pelo menos.

f.

Frank
fonte
+1 - Essa é provavelmente uma boa ideia. Encontrei essa mesma solução enquanto ajudava outro usuário com seus problemas de hibernação não relacionados.
SgtOJ
Eu nunca acabei resolvendo isso. Eu executei um script de login por um tempo, mas era esquisito e acabei comprando uma unidade maior e deixando o arquivo hiberfil.sys no lugar. Desejo-lhe boa sorte e seguirei este tópico. Se você for bem-sucedido, poste de volta!
Corey White
Você também pode excluir hiberfil.sysapós desativar a hibernação e criar um diretório chamado hiberfil.sys. Você não pode ter um arquivo e um diretório no mesmo diretório com o mesmo nome; portanto, o Windows não poderá criar um arquivo chamado hiberfil.sys. Obviamente, a MS pode ter explicado isso e criar outro arquivo (hiberfi2.sys?) Ou pode reclamar em voz alta.
Bacon Bits
@BaconBits: biziclop disse que isso não funciona; O Windows substitui a pasta pelo hiberfil.sysarquivo.
precisa saber é o seguinte
1

Não é uma solução, mas uma solução alternativa que funcionou para mim:

Eu tinha apenas 900 MB de espaço livre na unidade C e queria me livrar do arquivo hiberfil.sys, que demorou mais de 6 GB. Então eu o removi com powercfg -h. Mas ele continuou voltando depois de 10 segundos ou algo assim. Eu acho que tem algo a ver com PointSec, porque isso foi mencionado aqui anteriormente.

Desativei a hibernação e copiei rapidamente um arquivo de 1 GB para a unidade C. Agora ele não volta e ainda tenho 6 GB de espaço restante. Acho que ainda está tentando ativar a hibernação e descobre que não há mais espaço suficiente para isso. E da próxima vez que ficar sem espaço na unidade C, ainda posso excluir o arquivo de 1 GB.

Roberg
fonte
0

Talvez recrie-o manualmente após a remoção e defina permissões para não permitir que o sistema modifique o arquivo? Eu sei, é um tiro no escuro.

Isso pode ser causado por uma partição de restauração ou similar?

oKtosiTe
fonte
0

Eu tenho uma solução alternativa que parece funcionar muito bem para mim (embora talvez nem todos). Pelo que reuni, o vmtoolsd.exe desativa a hibernação ao inicializar no VMware e o reativa (independentemente do estado anterior) ao inicializar nativamente. Como o VMware Tools não é necessário ao executar o nativo (Boot Camp), criei um arquivo em lotes contendo o seguinte:

@echo off

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

:enable
net start "VMware Tools"

:end

Defino o serviço VMware Tools como Manual (em vez de Automático) e criei uma tarefa no Agendador de tarefas. A tarefa é configurada da seguinte maneira:

  • Executar se o usuário está logado ou não
  • Executar com os privilégios mais altos
  • Oculto (pode não ser necessário)
  • Triggers: na inicialização do sistema
  • Ações: o arquivo em lotes acima
  • Desmarque tudo em Condições / configurações (pode não ser necessário)

NOTA: como eu confio no NUMBER_OF_PROCESSORS para diferir quando inicializado nativamente, isso só funcionará se você não tiver a máquina virtual com o mesmo número de processadores (lógicos, não físicos) no seu Mac.

Além disso, o arquivo em lotes pode ser simplificado para:

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

Eu tinha algumas coisas no arquivo em lotes para depuração / teste e apenas o mantive.

Brandon Crawford
fonte
ot, mas ter uma verificação de igualdade e 2 gotos sobrepostos assim prejudica meus sentidos estéticos quando você pode ter apenas um não-igual e 1 goto.
underscore_d
0

Como oKtosiTe disse, tentei essa abordagem sorrateira, pois nada mais funcionou para mim. O ProcessMonitor simplesmente mostrou que a entrada no registro é criada por powercfg.exesi só.

Não posso simplesmente desativar / renomear ou removê-lo.

Provavelmente devido às Políticas de Grupo que estão espalhadas por todo o meu laptop (laptop da empresa -> políticas de segurança super estúpidas da empresa!).

Então executei o comando, hiberfile.sysdesapareci por alguns segundos, copiei o arquivo nomeado hiberfile.sysde outro lugar (criado no editor e com 1 KB de tamanho) e alterei suas permissões para somente leitura (propriedades do arquivo).

Fiz a mágica!

Então, resumindo:

  1. Executar em cmd powercfg -h off
  2. Copiar preparado hiberfile.sys
  3. Propriedades -> somente leitura

Feito!

Nota: sem alterar o arquivo de permissão, volte para cerca de 6 GB no meu caso.

hiberfile.sys apenas 1 KB agora

yrk
fonte
0

O crédito vai para @Tom Wijsman.

Meu problema específico é sobre o Wake-On-LAN bloqueado pela hibernação, detalhes aqui: Como desativar permanentemente a hibernação no Windows 10?

Eu segui o método dele e obtive o log de inicialização.

No meu caso, é o vmtoolsd.exeque manteve a configuração abaixo do valor do registro para 1, que superou totalmente o powercfg /h off.

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\HibernateEnabled

O vmtoolsd.exepertence a VMware Tools.

Depois de desinstalá-lo, o hiberfil.sysnunca foi recriado.

smwikipedia
fonte
-2

Meia resposta:

No Windows XP, essa era uma solução fácil e permanente:

  1. exclua hiberfil.sys com este comando (com direitos de administrador): powercfg -h off

  2. crie uma pasta chamada "hiberfil.sys" em C: \

Infelizmente, o Win7 é "mais inteligente" que o XP e mata essa pasta, ignorando qualquer combinação de propriedade / permissão que eu tentei. Mas às vezes minha pasta hiberfil.sys sobreviveu a uma única reinicialização sem ser substituída. Também é interessante que o sistema pareça regenerar o arquivo original após alguns segundos em que a janela de C: \ apareceu na área de trabalho.

E obrigado pelo meu primeiro voto negativo :)

user188421
fonte
Pode não ser uma idéia tão ruim - você pode definir suas permissões para que nem o Sistema possa excluí-lo (sem primeiro alterar suas permissões). Obviamente, o win7 pode simplesmente se recusar a inicializar.
Hugh Allen
@Hugh: É possível que o código de hibernação, fazendo parte do kernel, apenas ignore as ACLs.
grawity