Hibernate отключен, hiberfil.sys воссоздается при каждой загрузке

20

У меня Windows 7 работает на небольшом (40 ГБ) разделе с 4 ГБ оперативной памяти. Это означает, что файл hiberfil.sys, созданный Hibernate, занимает значительную часть доступного дискового пространства. Я хотел бы удалить это.

Я знаю, что я могу отключить Hibernate и удалить hiberfil.sys, введя powercfg -h offв командной строке с повышенными правами. Это работает - файл немедленно удаляется, и после этого HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\HibernateEnabledключ (правильно) устанавливается в 0.

Однако в следующий раз, когда я перезагружаю ПК, hiberfil.sys возвращается из мертвых, Hibernate включается, и этот раздел реестра возвращается к 1.

Я почти сошел с ума от этого. Почти все, что я могу найти в Интернете, связанное с удалением файла hiberfil.sys, просто предлагает использовать powercfg для отключения гибернации, и, похоже, это работает практически для всех. Но это продолжает возвращаться ко мне! (Подобно вампиру, высасывающему мое дисковое пространство.) Я нашел еще одну ветку от кого-то, у кого, похоже, была такая же проблема, но ни одно из предложенных там предложений не сработало для оригинального постера (или для меня). Тем не менее, я попробовал все перечисленное там, в том числе:

  • Отключение гибридного сна

  • Отключение Hibernate через командную строку, через графический интерфейс Power Options и через оба (в обоих порядках)

  • Ручная смена HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\HibernateEnabledключа

  • Почти все остальное, что я могу придумать!

Я хочу повторить, что у меня нет проблем с удалением файла - это прекрасно работает. Он просто возвращается после каждой перезагрузки. Я почти готов бросить полотенце и просто запустить скрипт при входе в систему, чтобы отключать Hibernate каждый раз, хотя это выглядит как безумно хакерское «решение». , , но я надеялся, что кто-то здесь может сначала предложить что-то еще.

Кори Уайт
источник
У вас должно быть какое-то программное обеспечение для мониторинга и защиты реестра.
Моав
1
Учитывая, как долго этот вопрос находится там, и так как это может быть распространенной проблемой, я положил награду за этот вопрос.
bwDraco - Восстановить Монику
Вы случайно не установили специальное загрузочное программное обеспечение, которое бы это делало?
Мердад

Ответы:

18

Моя Windows 7x64 установлена ​​на раздел SSD на ноутбуке Mac. Я отключил при отключенном powercfg / h (повышенном уровне) и отключенном спящем ms fixit, а также установив для параметра реестра HibernateEnable значение 0. Hiberfil.sys удаляется только до перезагрузки. Когда я загружаю собственный hiberfil.sys, он всегда создается заново, но когда я загружаюсь в OS X и VMware Fusion, гибернация остается отключенной, как и должно быть.

Предложение Тома Вийсмана о ProcessMonitor с регистрацией загрузки помогло мне обнаружить, что vmtoolsd.exe (из VMware) повторно активировал ключ реестра во время собственной загрузки. Я попытался изменить разрешения в regedit, но они не остановили изменение значения на 1. Я думал о создании небольшого файла hiberfil.sys, но думаю, что это было бы перезаписано.

В качестве решения на 99% я изменил значение HiberFileSizePercent на десятичное 1, что делает hiberfil.sys только 80 МБ на машине с 8 ГБ ОЗУ. Я полагаю, я мог бы попробовать .001 или меньше, но 80 МБ это не много.

greenfellow
источник
1
Спасибо - я тоже на Macbook с Bootcamp и VMWare Fusion, вы, вероятно, сэкономили мне часы.
DanB
13

Вы можете легко устранить это с помощью Process Monitor .

Запустите его и включите Boot Logging в меню Options , перезагрузите компьютер и запустите Process Monitor.

Затем дайте ему прекратить захват, а затем найдите HibernateEnabledи проверьте, что изменило значение.


Для более глубокого понимания это также можно сделать с помощью XBootMgr из Windows Performance Toolkit.

Инструкции по установке - документ анализа эффективности перехода вкл / выкл

Тамара Вийсман
источник
3
Поскольку ваш ответ обладает наибольшим потенциалом для решения проблемы, я решил назначить вам награду.
bwDraco - Восстановить Монику
Этот метод решил мою проблему. Благодарность! (Моя проблема касается Wake-On-LAN, подробности здесь: superuser.com/questions/1405082/… )
smwikipedia
6

Если вы используете boot camp и vmware fusion:

Найдите файл% programfiles% \ VMware \ VMware Tools \ plugins \ vmsvc \ disableGuestHibernate.dll, удалите его или переместите его.

Наконец, отключите гибернацию раз и навсегда, открыв командные строки с повышенными правами администратора и выполнив:

powercfg -h выключен

Плагин disableGuestHibernate загружается при загрузке инструментов vmware. Если vmware tools загружается во время работы в vm, он отключит спящий режим (поскольку vmware имеет собственную систему приостановки, что делает hibernation избыточным.) Но если vmware tools загружается за пределы vm (т.е. вместо этого вы используете boot camp для загрузки в windows), он будет повторно включите спящий режим, если он отключен.

themaninblack
источник
Это отличный ответ и очень подробный. Если бы я мог дать 10 голосов, я бы!
Рейк
Кстати: просто переименование не работает, вам действительно нужно удалить DLL.
Рийк
Это исправило это и для меня. Upvote!
MortenRøgenes
4

Вы можете попытаться включить и выключить спящий режим снова. В cmd «Запуск от имени администратора» выполните:

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

Если вы используете ноутбук, то после включения режима гибернации и до его выключения сделайте также следующее:

  1. Убедитесь, что гибридный сон отключен.
  2. Параметры электропитания → Изменить параметры плана → Изменить дополнительные параметры питания, развернуть режим ожидания и изменить значение «На батарее» и «Подключен» на 0 минут.

образ

harrymc
источник
2

У меня такая же проблема. Пытался:

powercfg –H OFF

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

Установите Control Panel\All Control Panel Items\Power Options\Edit Plan Settingsдля Никогда для всех вариантов мощности.

И файл продолжал возвращаться к жизни. Советы по использованию монитора процесса помогли мне. В системе, которую я использую, установлен «Pointsec for PC», и процесс prot_srv.exe продолжал сбрасывать это значение. Учитывая, что этот компьютер заблокирован этим программным обеспечением, я мало что могу сделать.

TryingToHelp
источник
1

то же самое здесь!

из-за разочарования я даже настроил локальную политику так, чтобы при запуске компьютера запускался cmd, запускающий строку powercfg, но даже этого недостаточно!

это действительно расстраивает, так как я использую Win7 Ultimate на 60 ГБ разделе.

в моем следующем эксперименте я поиграю с ключом реестра "HiberFileSizePercent" в разделе:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Энергетика

и посмотрите, может ли это заставить (ре) создать хотя бы меньший файл.

е.

Фрэнк
источник
+1 - это, наверное, хорошая идея. Я сталкивался с тем же решением, помогая другому пользователю с его проблемами, связанными с гибернациями.
SgtOJ
Я никогда не заканчивал тем, что решил это. Некоторое время я запускал скрипт входа в систему, но он был ненадежным, и в итоге я просто купил большой диск и оставил файл hiberfil.sys на месте. Я желаю вам удачи, и я буду следовать этой теме. Если вы успешны, пожалуйста, напишите обратно!
Кори Уайт
Вы также можете удалить hiberfil.sysпосле отключения гибернации, а затем создать каталог с именем hiberfil.sys. Вы не можете иметь файл и каталог в одном каталоге с одним и тем же именем, поэтому Windows не сможет создать файл с именем hiberfil.sys. Конечно, MS могла бы объяснить это и создать другой файл (hiberfi2.sys?) Или громко жаловаться на это.
Бекон Бит
@BaconBits: biziclop сказал, что это не работает; Windows заменяет папку hiberfil.sysфайлом.
bwDraco - Восстановить Монику
1

Не решение, а обходной путь, который работал для меня:

У меня было всего 900 МБ свободного места на диске C, и я хотел избавиться от файла hiberfil.sys, который занял более 6 ГБ. Поэтому я удалил его с помощью powercfg -h. Но он продолжал возвращаться примерно через 10 секунд или около того. Я думаю, что это связано с PointSec, потому что это было упомянуто здесь ранее.

Затем я отключил спящий режим, а затем быстро скопировал файл объемом 1 ГБ на диск C. Теперь это не возвращается, и у меня все еще есть 6 ГБ свободного места. Я предполагаю, что он все еще пытается включить гибернацию и обнаруживает, что для этого уже недостаточно места. И в следующий раз, когда мне не хватит места на диске C, я все равно смогу удалить файл размером 1 Гб ..

Roberg
источник
0

Может быть, вручную восстановить его после удаления и установить разрешения, чтобы запретить системе изменять файл? Я знаю, это длинный выстрел.

Может ли это быть вызвано разделом восстановления или подобным?

oKtosiTe
источник
0

У меня есть обходной путь, который, кажется, работает отлично для меня (хотя, возможно, не все). Из того, что я понял, vmtoolsd.exe отключает спящий режим при загрузке под VMware, а затем повторно включает его (независимо от предыдущего состояния) при начальной загрузке. Поскольку VMware Tools не требуются при запуске native (Boot Camp), я создал командный файл, содержащий следующее:

@echo off

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

:enable
net start "VMware Tools"

:end

Я установил для службы VMware Tools значение «Вручную» (а не «Автоматически») и создал задачу в планировщике заданий. Задача настроена следующим образом:

  • Запустите, вошел ли пользователь в систему или нет
  • Запуск с самыми высокими привилегиями
  • Скрытый (не обязательно)
  • Триггеры: при запуске системы
  • Действия: командный файл выше
  • Снимите все в Условиях / Настройках (возможно, нет необходимости)

ПРИМЕЧАНИЕ: поскольку я полагаюсь, что NUMBER_OF_PROCESSORS будет отличаться от исходной загрузки, это будет работать только в том случае, если у вас нет виртуальной машины с одинаковым числом процессоров (логических, а не физических) на вашем Mac.

Кроме того, пакетный файл может быть упрощен до:

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

У меня было несколько вещей в пакетном файле для отладки / тестирования, и я просто сохранил их.

Брэндон Кроуфорд
источник
нет, но наличие проверки на равенство и 2 перекрывающихся gotos, как это, вредит моим эстетическим чувствам, когда вы могли просто иметь не равное и 1 goto.
underscore_d
0

Как сказал oKtosiTe, я попробовал этот хитрый подход, так как у меня больше ничего не получалось. ProcessMonitor просто показал, что запись в реестре создается powercfg.exeсама собой.

Я не могу просто отключить / переименовать или удалить его.

Вероятно, из-за групповых политик, которые есть на моем ноутбуке (корпоративный ноутбук -> сверхпопулярные политики безопасности компании!).

Поэтому я выполнил команду, hiberfile.sysисчез на пару секунд, скопировал файл с именем hiberfile.sysиз другого места (созданный в редакторе и размером 1 КБ) и изменил его разрешения только на чтение (свойства файла).

Сделал волшебство!

Итак, вкратце:

  1. Запустить в cmd powercfg -h off
  2. Скопировать подготовленный hiberfile.sys
  3. Свойства -> только для чтения

Выполнено!

Примечание: в моем случае размер файла без изменения разрешения возрастает до 6 ГБ.

hiberfile.sys только 1KB сейчас

yrk
источник
0

Кредит переходит к @Tom Wijsman.

Моя конкретная проблема связана с тем, что Wake-On-LAN заблокирован из-за гибернации, подробности здесь: Как навсегда отключить режим гибернации в Windows 10?

Я последовал его методу и получил журнал загрузки.

В моем случае это значение vmtoolsd.exe, установленное ниже значения реестра, равное 1, что полностью превосходит значение powercfg /h off.

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\HibernateEnabled

vmtoolsd.exeПринадлежит VMware Tools.

После того как я его удалил, он hiberfil.sysникогда не создавался заново.

smwikipedia
источник
-2

Половина ответа:

В Windows XP это было простое и постоянное решение:

  1. Удалите hiberfil.sys с помощью этой команды (с правами администратора): powercfg -h off

  2. создайте папку с именем "hiberfil.sys" в C: \

К сожалению, Win7 «умнее», чем XP, и убивает эту папку, игнорируя любую комбинацию владения / разрешения, которую я пробовал. Но иногда моя папка hiberfil.sys переживала один перезапуск без замены. Также интересно, что система, казалось, воссоздала исходный файл через несколько секунд, когда на рабочем столе появилось окно C: \.

И спасибо за мой первый downvote :)

user188421
источник
Это может быть не такой уж плохой идеей - вы можете установить его разрешения так, чтобы даже Система не могла удалить его (без предварительного изменения его разрешений). Конечно, win7 может просто отказаться от загрузки.
Хью Аллен
@Hugh: Возможно, код гибернации, будучи частью ядра, просто игнорирует ACL.
user1686