有个成语叫借尸还魂,出自《三十六计》第十四计,而Win10PE(或者说NT6内核的PE,下同)中的X盘就是这样操作后成型的代表,其中boot.sdi是尸而boot.wim是魂。 X盘由两部分组成:bootmgr+BOOT.SDI 其中bootmgr是NT6系统的引导程序, BOOT.SDI是一个空的镜像文件,sdi文件=文件头+img区(NTFS)+wim区,原版BOOT.SDI文件大小为3M左右,而网上流传的两个精简版,一个300K(据说对64为系统兼容性较差),另一个960K(至今未发现兼容性问题,据说网启速度快于原版)。
具体的X盘的产生技术细节是:
1.bootmgr发现指定的wim镜像,将其读入内存 2.bootmgr将boot.sdi读入内存,告诉winload.exe它是启动盘,boot.sdi文件中包含了这个启动NTFS分区的卷标等一些基本信息,而这个启动分区中真正的启动数据源是boot.wim解压出的文件。 3.bootmgr向winload.exe传递bcd中的minint参数(fbwf.sys启动时检查boot.ini中的启动选项,如果有/MININT 选项,就认为是PE模式,根据注册表参数启动;fbwf =File Based Write Filter基于文件的写入筛选器) 4.winload.exe向内核传递minint参数 5、minint参数指示内核:将注册表整体读入内存,这是为了适应在只读介质中启动的需要,因为boot.wim文件是只读的;忽略 HKLM\System\MountedDevices 中的X盘的挂载信息,将 X 盘符分配给准备好的boot.sdi的分区。将boot.wim解压出的文件放入X盘。
修改X盘大小的方法主要有两种:
1,离线修改PE的注册表 注册表编辑器挂载PE WIM文件中的windows\system32\config\SYSTEM找到[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\FBWF]修改"WinPECacheThreshold"值。 1024(十进制)就是1G,512(十进制)就是512M。 2,使用修改后特定的fbwf.cfg文件替换WINDOWS目录下原文件。在使用fbwf.cfg文件后,离线修改注册表方法将失效。
X盘是使用物理内存虚拟出的一个NTFS分区,其大小是注册表中设置的"WinPECacheThreshold"值,但这个设置值不受物理内存实际大小制约,可以设置得比物理内存大很多,但是实际能使用的空间要受物理内存大小限制。例如PE的X盘设置为6G,而你的物理内存仅有2G,你若向X盘拷贝一个4G的文件肯定是不行的,会提示容量不足。之所以目前很多PE作者将X盘设置得很大,是因为他们认为目前主流电脑的物理内存都已经很大,而且他们制作的PE里面包含需要大量占用磁盘空间的应用,DISM++就是典型代表,如果运行DISM++的分区没有超过5G的剩余磁盘空间,则会弹出提示。说简单点儿:反正吹牛不上税,把X盘设置得比实际物理内存大又不会报错,不设白不设。
另一个给他们十足信心的理由是虚拟内存,简单说就是当系统发现物理内存不足时,将硬盘的一部分容量当作内存来用,因此很多人的硬盘上都会存在一个pagefile.sys文件,就是所谓页面文件,也就是系统在物理内存不够用的时候调用硬盘一部分空间当作内存用的,当然其读写速度和内存相去甚远,即便是目前最快的SSD,其读写速度连内存的尾灯都看不见,即便有一天SSD速度赶上了内存,也无法取代内存,因为RAM和Flash的读写机制不同,Flash是按块读写的。
PECMD中有一条PAGE命令可以设置虚拟内存,包括页面文件位置,初始大小和最大值。但是给WinPE设置虚拟内存是个双刃剑,好处自不必说,当物理内存不足时可以调用硬盘空间,当年在XPPE年代,电脑的物理内存普遍较小,很多电脑启动PE居然都会提示虚拟内存不足,因此那时给PE设置虚拟内存是必须的,但是随着技术的进步,电脑物理内存越来越大,给PE设置虚拟内存做法的弊端逐渐显露,首先虚拟内存不能设在X盘,因为X盘本身就是用物理内存虚拟的,把虚拟内存仍然设置物理内存上,是不是傻?其次,把虚拟内存设置在移动磁盘上,例如写入PE的U盘上,一来这些移动介质速度比硬盘还慢,而来目前流行全内置PE,讲究启动后U盘可拔除,因此把虚拟内存设置在一个将要被拔除的设备上显然也是傻,最后,只有设置在硬盘上,但是也有问题,如果是新电脑,硬盘没有分区怎么弄,即便不是新电脑,人家用PE是要装系统,要重新分区和格式化,而放置有pagefile.sys文件的分区是无法格式化和删除的,会提示分区正在被使用。最要命的是PE中虚拟内存的有无和其大小,几乎与X盘可用剩余空间没有直接关系:当X盘还有剩余空间,代表物理内存有剩余,PE肯定不会优先调用虚拟内存;而当需要调用虚拟内存时,说明物理内存已不足,这时X盘自然也就没有空闲空间了。因此PE中虚拟内存唯一的应用场景就是X盘磁盘空间几乎已满,物理内存耗尽,而此时运行的程序还需要大量内存时。
因此目前很多PE都不再手动设置虚拟内存,完全指望物理内存,因此当你的电脑启动PE后,你的物理内存其实分成了好几块:一块就是被虚拟成了X盘,放那些PE的系统文件和内置软件;一块是规规矩矩的内存空间,就是干的本职工作,将一些系统运行和软件运行需要的数据存在里面方便CPU调用;而剩余的物理内存空间可以当作X盘的空闲空间来使用,如果这个剩余值很大,而PE设置的X盘空间小于这个值,那么X盘最终的空间大小就是PE注册表中"WinPECacheThreshold"值设置的大小;当这个物理内存剩余值小于PE设置的X盘空间大小时,其空间实际大小就取决于物理内存实际剩余的空间大小。
女儿过生日,老爹送个她一个卡片,写着:老爹牌信用卡,并告诉女儿,凭借此卡,可以找他最多透支10000元,女儿很高兴,立即提出要透支10000元,老爹说目前手头紧,兜里一共只有200元,女儿只拿到了透支的200元,女儿很生气,提出要求老妈发行老妈牌信用卡,因为她知道她老妈手头至少有50000元闲钱,但是老妈说那些钱在银行存了定期,买了国债,做了金融理财,而且透支给她那么多钱怕她乱花,怕她被偷,怕她被抢,怕她吃胖了,怕她……,因此女儿要求把老爹牌信用卡升级为出手大方的隔壁老王牌信用卡……
|