进阶教程:Win7中英双语2合1,整合win7中文版和英文版教程,修改install.wim u盘安装中文grub,实现多引导,直接引导iso文件,实现u盘安装win7 经常用U盘作维护,所以U盘里包含各种各样的工具和系统,所以,U盘的目录就会很多很凌乱。所以就想着,可不可以能精简的就精简,不能精简的就放在一个文件夹里呢?答案肯定是可以的,其他维护工具很好办,主要是win7的sources文件夹。 进入正题 大家都知道,VISTA及以上系统其光盘结构为: autorun.inf setup.exe bootmgr 其中: setup.exe是在WIN下进行安装WIN7的程序。 autorn.inf是光盘自动运行文件,插入光盘会通过它运行setup.exe。 仅仅更改sources的路径,是远远没有达到我的目的的,我现在想做的就是把这些文件和文件夹都放到U盘的一个根目录里,很多系统安装或者维护工具都有boot这个文件夹,所以我们把所有文件都放到boot文件夹中应该是一个最高效的办法了。所以,我们要先处理一下win7.iso。 1、把autorun.inf、setup.exe、 2、不需要韩语、日语、繁体中文的,boot\fonts下的文件,只保留chs_boot.ttf、wgl14_boot.ttf。 3、把sources\下的boot.wim、install.wim移动到boot\fonts文件夹下,然后删除整个sources文件夹。 精简后,如下:
U盘 └— │— │ │—boot.wim │ │—chs_boot.ttf │ │—install.wim │ └—wgl4_boot.ttf │- │ └-bootsect.exe.mui │—bcd │—boot.sdi │—bootfix.bin │—bootmgr │—bootsect.exe │—etfsboot.com └—memtest.exe (这个bootmgr比较随意,我发现,做成iso的时候,放在根目录和boot下都可以,用grub引导的时候,只需写好路径即可)
好了,因为我们更改了boot.wim、install.wim的位置,怎么样把这个“事实”告诉引导呢。为了解决这个问题,我们来看一下Win7的iso包是怎么安装的:
一、插入Win7光盘后,BIOS将引导交给bootmgr; 二、bootmgr会搜索当前光盘下boot文件夹的bcd,bcd找到光盘下sources文件夹中的安装PE(boot.wim)并加载; 三、该安装PE(boot.wim)运行当前PE根目录下的setup.exe找到光盘下sources文件夹中的install.wim镜像进行安装。
其实我们要做的,主要是两个工作,第一,让bcd找到boot.wim;第二,让boot.wim下的setup.exe找到install.wim。
第一、让bcd找到boot.wim 1、这需要编辑BCD文件,我们使用bcdedit.exe(XP下也可以运行) 运行: bcdedit /store BCD文件路径 /enum all /v Windows 启动加载器 ------------------- 标识符 {7619dcc9-fafe-11d9-b411-000476eba25f} device ramdisk=[boot]\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f} path \windows\system32\boot\winload.exe description Windows Setup locale en-US inherit {6efb52bf-1766-41db-a6b3-0ee5eff72bd7} osdevice ramdisk=[boot]\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f} systemroot \windows detecthal Yes winpe Yes ems Yes
从上面结果看到,bcd从\sources下加载boot.wim,现在boot.wim和istall.wim都放在U盘根目录\boot\fonts\下,我们想要改变boot.wim的路径,运行如下命令: bcdedit /store BCD文件路径 /set {default} device ramdisk=[boot]\boot\fonts\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f} 将上述的device改成osdevice,再运行一次命令,即: bcdedit /store BCD文件路径 /set {default} osdevice ramdisk=[boot]\boot\fonts\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f} 第二,让boot.wim下的setup.exe找到install.wim 想让PE找到install.wim文件,可以利用setup.exe,因为setup.exe可以有参数installfrom,利用这个参数,我们就可以指定install.wim文件的位置了。 “PE启动时会在X:\sources目录下寻找setup.exe文件来进行安装,如果sources目录没有setup.exe,那么winpeshl.exe会执行system32目录下的winpeshl.ini所指定的文件。”(这是作者原文里的话,但经过实践,我发现是错的,不知道是不是win7与win7 sp1区别的关系,对于sp1,应该是:PE启动时会在X:\根目录下寻找setup.exe文件来进行安装,如果X:\根目录没有setup.exe,那么X:\Windows\System32\winpeshl.exe会执行system32目录下的winpeshl.ini所指定的文件)如果winpeshl.ini没有指定程序或没有此文件,那么winpeshl.exe将会执行system32目录下的startnet.cmd文件,默认PE下存在此文件,会加载网络配置。这个文件位于boot.wim第2个镜像的windows\system32目录下,所以要先挂载boot.wim,运行命令: imagex /mountrw D:\boot.wim 2 D:\folder boot.wim的第2个镜像成功挂载到D:\folder后,进入D:\folder\Windows\system32\,找到startnet.cmd,因为istall.wim已经被移动到\boot\fonts\下,所以把这个文件内容变成: @echo off for %%a in (c d e f g h i j k l m n o p q r s t u v w y z) do (if exist %%a:\boot\fonts\install.wim x:\mysetup.exe /installfrom:%%a:\boot\fonts\install.wim) exit 当然,要把挂载出来的PE根目录的setup.exe重命名为mysetup.exe,即此时的D:\folder\setup.exe重命名为mysetup.exe。 修改完毕,卸载boot.wim,运行命令: imgaex /unmount /commit D:\folder 到这里,针对win7精简和修改的操作就完成了。以上做好的文件,可以用grub或者做成iso写入U盘都是可以的,做成iso的方法在下面调试的第2步里。
下面是我制作过程中的调试: 1、使用U盘在Vmware下测试时,startnet.cmd里使用X:\sources\setup.exe/installfrom:%%a:\boot\fonts\install.wim出现“安装程序无法创建新的系统分区”、“Setupwas unable tocreate a new system partition”错误:
后来经过查找,我找到了我认为正确的原因。出现“安装程序无法创建新的系统分区”和U盘多出文件的现象,是因为在虚拟机测试的时候,U盘是作为本地硬盘加入到虚拟系统里,并且我们会在虚拟系统的bios里把U盘所代表的“硬盘”设置为第一启动项才能从U盘启动进行测试,如图: 但这就导致了win7 的安装程序认为有两块硬盘,并且要把win7 安装到启动顺序排第二的那块硬盘上,但是这样就出错了。。。为什么不能装到启动顺序排第二的硬盘上,我也不知道,貌似是因为win7会把自动建立的放引导文件的100M分区放到启动顺序排第一(或者是硬盘接口排第一?)的那块硬盘上。 2、为了证明上面的猜测,我把在U盘测试失败的修改好的win7原封不动做成iso,再在虚拟机测试,没有出现任何问题。证明了第1点里说的很有可能是正确的。附上iso制作:从原版的win7.iso里提取引导文件存为xxx.bif,新建一个可引导iso,导入刚刚提取的xxx.bif作为新建的iso的引导文件,再把修改好的win7放进去,成品如图: |
|