怀德维宁

大邦维屏,大宗维翰。怀德维宁,宗子维城。

0%

windows救援模式下设置完全内存转储

在windows系统遇到异常时,往往会触发自带的异常转储机制,将问题现场进行保存,方便事后使用对应的dmp文件进行分析。但是系统默认的设置为核心内存转储,即只转储问题时刻的部分关键内存信息,但是系统的判断并不总是正确的,因此很可能便会造成dmp因为部分关键内存信息没有被保存而无法精确定位问题。

尤其是在遇到开机相关的异常问题时,由于无法正常进入系统,因此只能依靠dmp进行分析。但是如果系统没有进行转储设置或者设置的不是完全内存转储,就会造成没有合适的dmp用来分析定位问题。这时如果能够修改为完全内存转储,再通过外部注入中断(例如kvm环境下的inject-nmi)主动触发转储机制,就可以获得比较完整的异常现场信息,以便进行问题定位分析。下面就介绍如何在救援模式下进行windows转储设置的相关修改:

(0)进入救援模式中,将问题windows的磁盘挂载到救援机上,异常机的系统盘会被分配一个盘符(根据救援机和异常机的磁盘挂载情况不同发生变化,在本次演示中,异常机的系统盘盘符为E);

(1)打开windows注册表(regedit),选择HKEY_LOCAL_MACHINE条目(dump相关信息保存在该条目下,因此选择将异常机的注册表也挂载在该条目下):

(2)点击文件(file),选择加载配置单元(load hive);

(3)选择异常机的system注册表配置单元(异常机系统盘的windows\System32\config\SYSTEM文件,在本文中具体路径是E:\windows\System32\config\SYSTEM);

(4)为加载的注册表配置单元起一个名称与其他注册表项进行区分(在本文中命名为aaa);

(5)在虚拟机内可能存在多个controlset,因此需要在注册表中查找虚拟机启动时真实加载的controlset,查看aaa下的select注册表项(在本文中可以看到default默认值为1,代表系统启动时加载的是controlset001,因此修改controlset001,也可以对全部的controlset进行相同的改动);

(6)修改aaa\ControlSet001\Control\CrashControl路径下的CrashControl,将其值改为1;

(7)修改aaa\ControlSet001\Control\SESSION MANAGER\MEMORY路径下的PagingFiles,将其值改为”C:\pagefile.sys 8600 8600”(配置的分页文件大小需要比内存大小要大,否则会转储失败,因为异常机的内存为8g,因此配置了8600,一般4g配置4300即可)(另外需保证异常机的系统盘可用空间不小于配置的分页文件大小,不然内存转储也会失败);

这样配置修改就完成了,后续就可以通过主动触发中断的方式获取完全内存转储的dmp文件了。