电脑网络 · 2011年02月26号 0

设置大小合适的 Windows 7 休眠文件 Hiberfil.SYS

设置大小合适的 Windows 7 休眠文件 Hiberfil.SYS
Hiberfil.SYS 是 Windows 休眠功能(Windows Hibernation)将内存数据与会话保存至硬盘、以便计算机断电重新启动后可以快速恢复会话所需的内存镜像文件。在早期版本的 Windows 中,Hiberfil.SYS 文件的大小等同于物理内存大小;而在 Windows 7 中,Hiberfil.SYS 可以在物理内存大小的 50%-100% 的范围自行调整。因此, Windows 7 的 Hiberfil.SYS 大小不一定等同于物理内存大小。

Windows 7 之所以出现这种改变,主要是出于节省系统分区的硬盘空间考虑。因为 Hiberfil.SYS 必须位于系统分区的根目录,我们无法修改其文件名及所在位置。

曾经有人在微软中文技术论坛中问过,为什么无法将 Hiberfil.SYS 由系统分区根目录转移至其它位置,这是由于 Windows 要想在硬盘的其它位置读取启动文件,必须首先加载文件系统驱动程序。但是已经转入休眠状态的 Windows,其文件系统驱动程序在 Hiberfil.SYS 里。不加载文件系统驱动,Windows 就无法读取 Hiberfil.SYS;不读取 Hiberfil.SYS,Windows 就无法加载文件系统驱动。这好比黄宏在春晚小品中表演的那个情节一样:林永健不打开箱子,黄宏就取不出身份证明;但黄宏不出示证件,林永健就无权打开箱子。为了解决这个矛盾,Windows 唯有在读取 Hiberfil.SYS 之前加载一个小型的文件系统驱动程序,但是这个小型的驱动程序只能访问系统分区根目录中包括 Hiberfil.SYS 在内的有限的若干系统文件。这就是为什么 Hiberfil.SYS 无法由系统分区根目录转移至其它位置的原因。

无法修改 Hiberfil.SYS 的所在位置是 Windows 7 减小 Hiberfil.SYS 的原因之一;提高 Hiberfil.SYS 的文件利用率是减小 Hiberfil.SYS 的另一个原因。随着计算机物理内存容量越来越大,多数计算机都有相当一部分物理内存处于空闲状态,并非每次休眠都有完全等同于物理内存容量的内存数据需要保存为 Hiberfil.SYS。在早期版本的 Windows 中,尽管 Hiberfil.SYS 的大小始终等同于物理内存大小,但 Windows 每次休眠时也并没有从头到脚地更新 Hiberfil.SYS 的所有内容。换言之,早期版本的 Windows 的 Hiberfil.SYS 存在着没有充分利用的浪费的空间。

基于以上两个原因,为了节省系统分区的硬盘空间,Windows 7 在计算机转入休眠之前,可以将内存数据进行 0-50% 比率的压缩,从而将 Hiberfil.SYS 减小为物理内存大小的 50%-100%。这个百分比可以通过 POWERCFG 命令配合 -H -SIZE 参数进行设置。

例如,在物理内存容量 2GB 的 Windows 7 计算机中,如果以管理员权限执行命令:

POWERCFG -H -SIZE 70

即可将这台计算机的 C:\Hiberfil.SYS 减小为 2GB 的 70%,即 1.4GB。

在默认的系统设置中,Windows 7 使用物理内存容量的 75% 做为 Hiberfil.SYS 默认的文件大小,这是 Windows 开发团队在评估了大多数计算机的物理内存容量与内存空间占用后设置的平衡值。百分比设置得太大,容易造成系统分区空间浪费;百分比设置得太小,也可能因为 Hiberfil.SYS 空间不足引起休眠失败。如果我们在 Windows 7 中执行休眠时遇到如下故障代码的蓝屏,即表明当前 Hiberfil.SYS 设置得太小了:

STOP:0x000000A0 INTERNAL_POWER_ERROR
参数 1
参数 2
参数 3

(参数 1 始终为 0x0000000B、参数 2 是 Hiberfil.SYS 大小的字节数、参数 3 是无法被压缩并写入 Hiberfil.SYS 的剩余的内存数据字节数)

此时,我们必须放弃失败的休眠,以正常模式重新启动 Windows 7,然后重新设置 Hiberfil.SYS 的大小。

总之,我们在 Windows 7 中可以根据自己计算机的实际情况,通过 POWERCFG -H -SIZE 设置合适的 Hiberfil.SYS 大小。如果计算机内存容量不大或硬盘容量很大,不在乎几百 MB 至 1GB 的空间开销,我们可以将 Hiberfil.SYS 设置为物理内存容量的 100%,这样 Windows 7 可以省去压缩内存数据的步骤;如果计算机内存容量很大或系统分区可用空间非常紧张,可以将 Hiberfil.SYS 设置为更小的物理内存容量百分比,但要小心 Hiberfil.SYS 设置得太小可能会存在休眠失败的风险。对于大部分的普通用户而言,如果我们不确定应该如何设置 Hiberfil.SYS 的大小,保持 Windows 7 默认设置的 Hiberfil.SYS 为物理内存容量的 75% 即可。