Можно ли предотвратить удаление Windows файла hibernate (hiberfil.sys) при завершении работы?

Я пытаюсь переместить файл гибернации из системного раздела (SSD) в другой раздел (HDD).

Я знаю, что многие люди говорят, что это невозможно, но я еще не совсем убежден.

То, что я пытаюсь сделать, это:

  1. Загрузиться с Windows 7 DVD;
  2. копия hiberfil.sys с SSD на HDD;
  3. удалять hiberfil.sys от SSD;
  4. Создать символическую ссылку для hiberfil.sys на SSD;

К сожалению, когда я загружался с Windows 7 DVD, я с грустью обнаружил, что файла hiberfil.sys там не было. Я помню, что где-то читал, что Windows автоматически удаляет файл hiberfil.sys при завершении работы.

Можно ли предотвратить удаление Windows файла hiberfil.sys при завершении работы?

Спасибо


Обновление:

Кажется, Windows на самом деле не удаляет файл hiberfil.sys при завершении работы. Именно VMware Tools автоматически отключал спящий режим при выключении / запуске.

2 ответа

Решение

Нет, ты не можешь переместить это.

Во время загрузки Windows (и ваш BIOS) использует минимальную файловую систему ввода-вывода, чтобы найти загрузочный диск и файлы, необходимые для завершения загрузки (включая драйверы файловой системы). Поскольку файл гибернации содержит состояние системы перед выключением, он фактически должен загрузиться в "полную" файловую систему.

Если вы работали со времен DOS, вы, возможно, помните, что вам приходилось использовать "SYS" для загрузки диска; Вы не можете просто скопировать загрузочные файлы (msdos.sys, io.sys и т. д.) на диск и заставить его работать, потому что они должны (ed) находиться по определенному адресу на диске, чтобы система знала, где найдите их для загрузки реальной ОС. То же самое дело здесь...

Вот хорошая реклама об этом:

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

Вы можете прочитать остальную часть статьи здесь.

Запрет удаления (если есть SID)

Сначала убедитесь, что hiberfil.sys не наследует разрешения, не забудьте добавить разрешения.

Затем убедитесь, что у каждого пользователя есть доступ, кроме возможности удалить файл:

введите описание изображения здесь

Таким образом, файл не может быть удален, если к нему прикреплен хотя бы идентификатор безопасности.

Глядя на то, что Microsoft говорит о файле гибернации.

Когда пользователь впоследствии включает компьютер, происходит нормальный процесс загрузки, за исключением того, что Bootmgr проверяет и обнаруживает действительный образ памяти, сохраненный в файле гибернации. Если файл гибернации содержит сохраненное состояние системы, Bootmgr запускает Winresume, который считывает содержимое файла в память, а затем возобновляет выполнение в той точке памяти, которая записана в файле гибернации.

Если Windows включила настройку BCD, чтобы информировать Bootmgr о возобновлении спящего режима, это ускоряет процесс загрузки, запуская Winresume.exe, который считывает содержимое файла в память и передает управление коду в ядре, которое возобновляет спящий режим системы. Этот код отвечает за перезапуск драйверов, которые были активны при выключении системы. Hiberfil.sys будет действителен только в том случае, если при последнем выключении компьютера он находился в спящем режиме.

После включения Bootmgr защищенного режима он полностью работает. Однако он по-прежнему полагается на функции, предоставляемые BIOS, для доступа к системным и загрузочным дискам на основе IDE, а также к дисплею. Функции взаимодействия Bootmgr с BIOS кратко переключают процессор обратно в режим, в котором могут выполняться службы, предоставляемые BIOS, называемые реальным режимом. Затем Bootmgr читает BCD-файл из каталога \Boot, используя встроенный код файловой системы.

Bootmgr содержит NTFS-код только для чтения (Bootmgr также поддерживает другие файловые системы, такие как FAT, El Torito CDFS, UDFS и WIM-файлы); в отличие от кода загрузочного сектора, код файловой системы Bootmgr может читать подкаталоги.

- Windows Internals

Так что нет, поскольку он использует встроенный код файловой системы, сделать это простым способом, скорее всего, невозможно.

Лучшее, что вы можете попробовать, это изменить BCD:

HKEY_LOCAL_MACHINE\BCD00000000\Objects\{db7f3566-bd6f-11df-b716-db3964014abb}\Elements\22000002\Element

Возможно, вы могли бы попробовать изменить его на X:\Some\Path\To\Whatever\File.Ext или полностью определенный путь.

Решение, которое обязательно сработает, что сделает ваш вопрос возможным.

  1. Установите Windows на жесткий диск.

  2. Переместите все на свой SSD, кроме hiberfil.sys файл.

  3. Создайте точки соединения со всем на вашем SSD.

Вы также можете уменьшить размер файла гибернации.

Вы можете сделать это на 50% используя powercfg.exe

-HIBERNATE, -H
        Enables-Disables the hibernate feature.  Hibernate timeout is not
        supported on all systems.

        Usage: POWERCFG -H <ON|OFF>
               POWERCFG -H -Size <PercentSize>
        -Size  Specifies the desired hiberfile size in percentage of the
               total memory. The default size cannot be smaller than 50.
               This switch will also enable the hiberfile automatically.
Другие вопросы по тегам