我正在尝试将休眠文件从系统分区(SSD)移动到其他分区(HDD)。
我知道很多人说这是不可能的,但我还不完全相信。
我想要做的是:
- 从 Windows 7 DVD 启动;
- 从SSD复制
hiberfil.sys
到HDD; hiberfil.sys
从SSD中删除;hiberfil.sys
为SSD创建符号链接;
不幸的是,当我从 Windows 7 DVD 启动时,我遗憾地发现 hiberfil.sys 文件不存在。我记得我曾在某处读到过,Windows 在关机时会自动删除 hiberfil.sys 文件。
是否可以防止 Windows 在关机时删除 hiberfil.sys 文件?
谢谢
更新:
看来 Windows 在关机时实际上并没有删除 hiberfil.sys 文件。这是因为 VMware Tools 在关机/启动时自动禁用了休眠模式。
答案1
不,你不能移动它。
在启动时,Windows(和您的 BIOS)使用最小文件 I/O 系统来定位启动驱动器和完成启动所需的文件(包括文件系统驱动程序)。由于休眠文件包含关机前的系统状态,因此实际上需要启动到“完整”文件系统。
如果您从 DOS 时代就开始使用,您可能还记得必须使用“SYS”才能使磁盘可启动;您不能只将启动文件(msdos.sys、io.sys 等)复制到磁盘并让其工作,因为它们需要位于磁盘上的特定地址,这样系统才知道在哪里找到它们来启动实际的操作系统。这里也是一样...
以下是关于它的一个很好的简介:
休眠遵循类似的模式。休眠操作系统意味着将内存中的所有内容转储到休眠文件中;从休眠状态恢复则需要将该文件重新吸入内存并假装什么都没发生。同样,这又是一个先有鸡还是先有蛋的问题:要加载休眠文件,您需要文件系统驱动程序,但文件系统驱动程序位于休眠文件中。如果您将休眠文件保存在启动驱动器的根目录中,则可以改用微型文件系统驱动程序。
您可以阅读本文的其余部分这里。
答案2
不允许删除(如果有 SID)
首先确保hiberfil.sys
不是继承权限,一定要添加权限。
然后,确保每个用户都有访问权限,但不能删除文件:
这样,如果至少附加了一个安全标识符,则该文件就无法被删除。
看看微软对休眠文件的看法。
当用户随后打开计算机时,将发生正常的启动过程,但 Bootmgr 会检查并检测存储在休眠文件中的有效内存映像。如果休眠文件包含已保存的系统状态,Bootmgr 将启动 Winresume,它将文件的内容读入内存,然后在休眠文件中记录的内存位置恢复执行。
如果 Windows 启用了 BCD 设置以通知 Bootmgr 休眠恢复,这将通过启动 Winresume.exe 来缩短启动过程,Winresume.exe 会将文件内容读入内存并将控制权转移到内核中恢复休眠系统的代码。该代码负责重新启动系统关闭时处于活动状态的驱动程序。只有当计算机上次关闭时处于休眠状态时,Hiberfil.sys 才有效。
Bootmgr 启用保护模式后,它便完全可以运行。但是,它仍然依赖 BIOS 提供的功能来访问基于 IDE 的系统和启动磁盘以及显示器。Bootmgr 的 BIOS 接口功能会短暂地将处理器切换回可以执行 BIOS 提供的服务的模式,称为实模式。Bootmgr 接下来使用内置文件系统代码从 \Boot 目录中读取 BCD 文件。
Bootmgr 包含只读 NTFS 代码(Bootmgr 还支持其他文件系统,例如 FAT、El Torito CDFS、UDFS 和 WIM 文件);但是,与引导扇区的代码不同,Bootmgr 的文件系统代码可以读取子目录。
— Windows 内部原理
所以,不,因为它使用内置文件系统代码,所以以简单的方式执行此操作很可能是不可能的。
您可以尝试的最好方法是更改 BCD:
HKEY_LOCAL_MACHINE\BCD00000000\Objects\{db7f3566-bd6f-11df-b716-db3964014abb}\Elements\22000002\Element
也许您可以尝试将其修改为X:\Some\Path\To\Whatever\File.Ext
或完全合格的路径。
一个肯定有效的解决方案,可以解决您的问题。
将 Windows 安装到您的 HDD。
将文件以外的所有内容移至 SSD
hiberfil.sys
。创建 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.