镜像过程中系统可用内存减少的解决方案

【场景描述】

在DE(或老DR)中使用FILE IMAGE文件作为目标设备进行数据恢复镜像,在镜像过程中重新更改了起始LBA,然后继续镜像,在某些情况下,会出现系统可用内存不断减少甚至假死的问题。

【问题原因】

这是微软一个系统API函数的bug,函数名称为FlushViewOfFile(),一定情况下调用该函数会失败,错误码为33,其后果是系统缓存中的数据不能及时写入硬盘,缓存无法释放。此时MRT进程的内存占用并未增加,但系统可用内存会减少。当此函数频繁调用失败时,会使系统可用内存下降为零最终导致系统假死。

具体请见微软官方说明文档:http://support.microsoft.com/kb/2731284/en-us

【解决方案】

1、在Win7或者Windows Server 2008 R2系统下,请下载并安装微软提供的补丁文件。

下载链接:

http://hotfixv4.microsoft.com/Windows%207/Windows%20Server2008%20R2%20SP1/sp2/Fix405791/7600/free/451412_intl_i386_zip.exe

如果上面的下载链接失效,也可以点击下面的链接从MRT数据恢复网下载:

http://info.mrtlab.com/download/KB2731284.rar

解压后文件名为Windows6.1-KB2731284-v3-x86.msu,安装完成后请重启电脑。

打完补丁后,当FlushViewOfFile()函数调用失败后,不会再导致系统可用内存减少。

注意,此时DE在数据恢复镜像过程可能会有几分钟左右的停顿,这是正常的,原因在于函数自身阻塞了,在进行一些未知的系统处理过程,耐心等一会镜像过程会自动继续。

2、在XP或其它系统下,由于微软未提供相应的补丁,建议不使用FILE IMAGE文件作为目标设备进行镜像。

若需要使用此方式进行镜像,建议不要随意更改起始LBA,不要使用反向拷贝,尽量按照从头到尾的顺序进行拷贝。

当更改起始LBA进行数据恢复镜像后,启动拷贝时若发现系统可用内存不断下降,请暂停或者停止拷贝,耐心等待5-10分钟后再继续,此时一般系统会自动回收缓存。