禁用了休眠模式,每次启动时都会重新创建hiberfil.sys


20

我的Windows 7在小型(40GB)分区上运行,内存为4GB。这意味着由Hibernate创建的hiberfil.sys文件将占用可用磁盘空间的很大一部分。我要删除它。

我知道我可以通过powercfg -h off在提升权限的命令提示符下输入来禁用Hibernate并删除hiberfil.sys 。这可以正常工作-立即删除文件,然后将HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\HibernateEnabled密钥正确地设置为0。

但是,下次我重新启动PC时,hiberfil.sys从死机中返回,重新启用了Hibernate,并且该注册表项已返回到1。

我对此很不满意。我几乎可以在网上找到与删除hiberfil.sys文件有关的所有内容,都只是在建议使用powercfg关闭休眠状态,并且似乎对每个人都有效。但是它一直在为我回来!(就像吸血鬼一样,占用了我的磁盘空间。)我确实从似乎有相同问题的人那里找到了另一个线程,但是那里的任何建议都不适用于原始海报(或对我来说)。尽管如此,我还是尝试了其中列出的所有内容,包括:

  • 禁用混合睡眠

  • 通过命令提示符,通过Power Options GUI以及通过两者(按两个顺序)来禁用Hibernate

  • 手动更改HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\HibernateEnabled密钥

  • 我能想到的几乎所有其他东西!

我确实要重申,删除文件没有问题-效果很好。每次重新启动后它才回来。我准备投入使用,每次登录时都运行一个脚本以禁用Hibernate,即使这似乎是一个疯狂的“解决方案”。。。但我希望这里的人可以先提出其他建议。


您必须具有一些监视和保护注册表的安全软件。
摩押

1
考虑到这个问题已经存在了多长时间,并且由于这可能是一个普遍的问题,所以我对这个问题给予了很多悬赏。
bwDraco-恢复莫妮卡2011年

您不是偶然安装了可以执行此操作的自定义启动软件,对吗?
Mehrdad

Answers:


18

我的Windows 7x64安装在Mac笔记本电脑的SSD分区上。我已禁用powercfg / h(已升高),并且ms fixit禁用了hibernate,并将注册表项HibernateEnable值设置为0。仅在重新启动之前删除Hiberfil.sys。当我启动本机hiberfil.sys时,始终会重新创建它,但是当我在OS X和VMware Fusion中启动时,休眠状态会保持禁用状态,这是应该的。

汤姆·威斯曼(Tom Wijsman)建议使用启动日志记录ProcessMonitor,这使我发现vmtoolsd.exe(来自VMware)正在本机启动期间重新启用注册表项。我试图在regedit中更改权限,但它们并未阻止将值更改为1。我曾考虑过创建一个小的hiberfil.sys,但我认为这将被覆盖。

作为一种99%的解决方案,我将HiberFileSizePercent值更改为十进制1,这使得8GB RAM计算机上的hiberfil.sys仅80MB。我想我可以尝试.001或更小,但80MB并不多。


1
谢谢-我也在Macbook和Bootcamp和VMWare Fusion上,您可能节省了我几个小时。
DanB 2012年

13

您可以使用Process Monitor轻松解决此问题。

启动它,并在“ 选项”菜单中启用“ 启动记录 ” ,重新启动计算机并启动“进程监视器”。

然后,让它停止捕获,然后搜索HibernateEnabled并检查更改了值的内容。


要获得更高级的见解,也可以使用Windows Performance Toolkit中的XBootMgr来完成。

安装说明 - 开/关过渡性能分析文档


3
由于您的答案最有可能解决问题,因此我决定将悬赏金授予您。
bwDraco-恢复莫妮卡2011年

这种方法解决了我的问题。谢谢!(我的问题是关于局域网唤醒的信息,在这里详细信息:superuser.com/questions/1405082/…
smwikipedia

6

如果您使用的是新兵训练营和vmware融合:

找到文件%programfiles%\ VMware \ VMware Tools \ plugins \ vmsvc \ disableGuestHibernate.dll,将其删除或移动。

最后,通过打开管理员提升的命令提示符并运行,彻底禁用休眠。

powercfg -h关闭

vmware工具加载时,disableGuestHibernate插件将加载。如果vmware工具在vm中运行时加载,它将禁用休眠功能(因为vmware有其自身的挂起系统,使休眠状态变得多余。)但是,如果vmware工具在vm外部加载(即,您使用Boot Camp引导进入Windows),它将重新启用休眠功能(如果已禁用)。


这是一个很好的答案,而且很详细。如果我可以给它10票,我会的!
Rijk

顺便说一句:简单地重命名是行不通的,您实际上必须删除dll。
Rijk

这也为我解决了。赞!
MortenRøgenes

4

您可以尝试打开和关闭休眠模式。在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为所有电源选项设置为从不。

文件不断恢复活力。使用过程监视器的建议对我有用。我使用的系统已安装“用于PC的Pointsec”,并且prot_srv.exe进程一直在重置该值。鉴于此PC已被该软件锁定,因此我无能为力。


1

这里也是一样!

出于无奈,我什至配置了本地策略,使其在计算机启动时运行cmd并运行powercfg行,但这还不够好!

自从我在60 GB分区上运行Win7 Ultimate以来,这令人沮丧。

在我的下一个实验中,我将使用“ HiberFileSizePercent”注册表项进行玩具操作:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power

看看是否可能迫使它至少(重新)创建一个较小的文件。

F。


+1-这可能是个好主意。我在帮助另一个用户解决不相关的休眠问题时遇到了相同的解决方案。
SgtOJ 2010年

我从来没有最终解决这个问题。我运行了一段时间的登录脚本,但是它很不稳定,最终我最终只是购买了更大的驱动器,并将hiberfil.sys文件保留在原位。祝您好运,我会继续关注。如果成功,请回发!
Corey White

您也可以hiberfil.sys在禁用休眠模式后删除它,然后创建一个名为hiberfil.sys 的目录。您不能在同一目录中拥有相同名称的文件和目录,因此Windows将无法创建名为hiberfil.sys的文件。当然,MS可能已经对此进行了说明,并且它可能会创建另一个文件(hiberfi2.sys?),或者可能会大声抱怨它。
培根片,

@BaconBits:biziclop说这不起作用;Windows用文件替换文件夹hiberfil.sys
bwDraco-恢复莫妮卡2011年

1

不是解决方案,而是对我有用的解决方法:

我的C驱动器上只有900MB的可用空间,想摆脱hiberfil.sys文件,该文件占用了6GB以上的空间。所以我用powercfg -h删除了它。但是大约10秒钟左右,它就一直保持回升状态。我认为这与PointSec有关,因为在此之前已经提到过。

然后,我禁用了休眠功能,然后将一个1GB的文件快速复制到了C驱动器中。现在它还没有回来,我还有6GB的空间。我猜它仍在尝试启用休眠方式,并且发现那里没有足够的空间了。下次我在C驱动器上空间不足时,仍然可以删除1GB文件。


0

也许在删除后手动重新创建它并设置权限以禁止系统修改文件?我知道,这是一个远景。

这可能是由还原分区或类似原因引起的吗?


0

我有一个变通办法似乎对我来说很好(尽管,也许不是每个人)。根据我的收集,vmtoolsd.exe在VMware下引导时会禁用休眠模式,然后在本机引导时重新启用它(无论之前的状态如何)。由于运行本机(引导营)时不需要VMware Tools,因此我制作了一个包含以下内容的批处理文件:

@echo off

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

:enable
net start "VMware Tools"

:end

我将VMware Tools服务设置为“手动”(而不是“自动”),并在Task Scheduler中创建了一个任务。任务设置如下:

  • 运行用户是否已登录
  • 以最高特权运行
  • 隐藏(可能没有必要)
  • 触发条件:系统启动时
  • 动作:上面的批处理文件
  • 取消选中“条件/设置”中的所有内容(可能没有必要)

注意:由于我依靠NUMBER_OF_PROCESSORS来与本机启动时有所不同,因此,只有在您的Mac上没有给虚拟机指定相同数量的处理器(逻辑处理器,而非物理处理器)的情况下,这才起作用。

另外,批处理文件可以简化为:

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

我在批处理文件中有一些要调试/测试的东西,只是保留了下来。


等等,但是goto当您可能拥有不等于和1时,进行相等性检查和2个重叠的s会损害我的审美意识goto
underscore_d

0

正如oKtosiTe所说,我尝试了这种偷偷摸摸的方法,因为没有别的方法对我有用。ProcessMonitor只是表明注册表中的条目是由其powercfg.exe自身创建的。

我不能简单地禁用/重命名或删除它。

可能是由于组策略遍及我的笔记本电脑(公司笔记本电脑->公司超级愚蠢的安全策略!)。

因此,我确实运行了命令,hiberfile.sys消失了几秒钟,hiberfile.sys从其他位置复制了文件名(在编辑器中创建,大小为1 KB),并更改了其只读权限(文件属性)。

做到了魔术!

简而言之:

  1. 在cmd中运行 powercfg -h off
  2. 复制准备好的hiberfile.sys
  3. 属性->只读

做完了!

注意:在我的情况下,在不更改权限的情况下,文件会增长回大约6GB。

hiberfile.sys现在只有1KB


0

归功于@Tom Wijsman。

我的特定问题是关于休眠唤醒导致的局域网唤醒,详细信息在这里:如何在Windows 10上永久禁用休眠?

我遵循他的方法并获得了启动日志。

就我而言,正是vmtoolsd.exe将设置低于注册表值设置为1,这完全击败了powercfg /h off

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power\HibernateEnabled

vmtoolsd.exeVMware Tools

卸载后,hiberfil.sys从未重新创建过。


-2

一半答案:

在Windows XP上,这是一个简单而永久的解决方案:

  1. 使用以下命令删除hiberfil.sys(具有管理员权限): powercfg -h off

  2. 在C:\创建一个名为“ hiberfil.sys”的文件夹

不幸的是,Win7比XP“更智能”,并且杀死了该文件夹,而忽略了我尝试过的所有所有权/权限组合。但是有时我的hiberfil.sys文件夹在一次重新启动后幸免了下来,而没有被替换。有趣的是,在桌面上出现C:\窗口几秒钟后,系统似乎重新生成了原始文件。

谢谢你第一次投票:)


这可能不是一个坏主意-您可以设置其权限,以便系统甚至都无法删除它(无需先更改其权限)。当然,win7可能只是拒绝启动。
休·艾伦

@休:作为内核一部分的休眠代码可能会忽略ACL。
grawity 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.