19

У меня 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 каждый раз, хотя это выглядит как безумно хакерское "решение". , , но я надеялся, что кто-то здесь может сначала предложить что-то еще.

12 ответов12

16

Моя 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 МБ это немного.

12

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

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

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


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

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

6

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

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

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

powercfg -h выключен

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

3

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

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

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

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

образ

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 продолжал сбрасывать это значение. Учитывая, что этот компьютер заблокирован этим программным обеспечением, я мало что могу сделать.

1

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

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

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

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ Мощность

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

е.

1

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

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

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

0

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

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

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

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

Сделал магию!

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

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

Готово!

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

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

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"

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

0

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

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

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 никогда не создавался заново.

-2

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .