grub4dos是个好东西,可以直接加载镜像,但是在加载PE的iso镜像的时候就容易出问题:能进入系统但外置程序都失踪了。
对于这个问题,今天我看到了这个帖:http://bbs.wuyou.com/viewthread.php?tid=137751,对我解决这个问题有很大帮助,此帖介绍了出现这个问题的原因,引用刚才给的链接的内容粗略地讲就是 :
“Grub能仿真CDROM加载WINPE.ISO,并引导WinPe,问题是 WinPE引导了之后(就是开始解压并运行WINPE.IS_ ),WINPE.ISO 的根目录的下文件就不能再被系统找到了”
这个问题我的解决方法是这样的:
- 不加载iso镜像,直接把文件从iso里提取出来,需要提取的文件有:NTDETECT.COM、WINNT.XPE(以上两个文件似乎都要放在U盘的根目录),其他文件可以放在U盘的其他文件夹:NTLDR(SETUPLDR.BIN)、.wim文件(外置程序)、WINPE.IM_、WINPE.INI,之后就是修改各个文件。
- 保证WINNT.XPE中 “/rdpath=” 后面的.IM_文件路径的正确。
- WINPE.INI中,一些跟加载.wim文件的目录有关的都要留意。下面给出两个范例:
- MOUN %CurDrv%\MINIPE\OP.WIM,B:,1
- TEAM ENVI SOFT=%Curdrv%\minipe|ENVI PF=Pagefile.sys
FORX %SOFT%\PE.WIM,swim,0,MOUN %swim%,%MountPath%,1
- 按照上述两种情况,假如你的.wim文件不是放在U盘的minipe目录下的话,那就要修改WINPE.INI了。
- 最后一个要改的文件是PECMD.INI,它在WINPE.IM_里面,为什么要改这个文件呢?根据我的理解,因为PE并不知道你的WINPE.INI的路径,WINPE.INI的载入是基于对PECMD.INI的读取的,也就是说,PE是先读取PECMD.INI,然后再根据这个文件里给的路径载入WINPE.INI,因为我们启动的方式不同,WINPE.INI的路径自然也不同了,所以就要修改PECMD.INI。(又pecmd又winpe好像有点乱啊……)
- 如何修改PECMD.INI呢?那就要对WINPE.IM_这个文件下手了。
- WINPE.IM_其实是一个CAB压缩文件,把它的后缀名改成.cab之后用WinRAR等软件就可以解压出WINPE.IMG(好像也有的不是.img而是.iso)。
- WINPE.IMG是个镜像文件,可以用Virtual Drive Manager来载入,(相应的,如果是.iso就用UltraISO之类的吧)(经测试用CHKEN Virtual Disk也可以载入),载入了之后你就可以在我的电脑看到mount出了一个盘。
- 进入\WXPE\SYSTEM32 目录,找到PECMD.INI,打开。
- 找到加载WINPE.INI的有关内容,如:
- 范例一:FORX !\MiniPE\WINPE.INI,MyIni,1,LOAD %MyIni%
- 范例二:FIND $MinMode=Yes,LINK %Desktop%\加载外部配置,PECMD.EXE,LOAD \MiniPE\WinPE.INI,Shell32.dll,26!TEXT|LOAD \MiniPE\WinPE.INI
如果你的WINPE.INI不是在minipe目录下,那就要相应地修改了。修改完后就是打包。刚才WINPE.INI保存后,把之前mount的WINPE.IMG unmount就可以保存了(真方便啊),保存了WINPE.IMG还没行,我们还要把它压缩成cab格式的。cab格式是微软的,所以windows都自带制作.cab格式的程序,它就是makecab。在cmd内用makecab就可以把WINPE.IMG压缩成cab格式了(命令具体用法请自行查询),最后把它改名为WINPE.IM_就大功告成了。
经过这3个文件的修改,在grub4dos下用chainloader SETUPLDR.BIN 来启动应该就是一个带外置程序的PE了。我的方法相比刚开始给出的链接的方法虽然有点麻烦(貌似他只要一个.iso来map,winpe.ini放在 .IM_文件里,.wim文件分开放),但是原理上是基本相同的,完全可以按照这个方法来修改winpe.ini和pecmd.ini来实现。
发表评论