今天在朋友的启发下,研究了一下复杂又简单的U盘引导,9:30-16:20长达7个小时的研究测试,以及不计其数的电脑重启,总算成功的出了结论,于是还是写篇记录一下成果吧。
一、目标:实现U盘集成2张系统安装盘。
二、思路:
A.Win7文件引导XP系统文件。
B.Win7文件引导XP系统ISO。
C.双ISO独立引导。
三、过程:
A、由于曾经做过win8的安装U盘(Windows 7 USB DVDDownloadTool制作),所以听到这个问题一下就想到了用Win7去集成XP系统,操作其实也是很简单的,首先,win7引导器是bootmgr,其核心文件是BCD,安装文件为winload.exe;而XP引导器是ntldr,核心文件是boot.ini,安装文件为setupldr.bin。所以首先想到的就是用win7的bootmgr去引导XP的setupldr去安装,其操作就是将xp解压到win7安装盘的根目录,由于结构不同,不会造成文件覆盖,编辑BCD,添加一条启动项,再将安装源路径指向i386setupldr.bin(如图),这样开机就会出现安装XP这个选项,之后就是安装向导了。
图1
经过多次长时间的测试发现,上述方法存在很大问题,由于现在流通的XP镜像往往是经过编辑改造过的,如番茄花园等,这种盘用的都是ezboot(EasyBoot制作)做的引导,修改了setupldr,导致上述方法失效,而上述方法只适合XP原版安装盘,于是便继续寻求方法。
B、(1)既然setupldr以被改,不能拿出来单用,所以就想到了整体的使用,即使用ISO,ISO相当是个虚拟光盘,所以脱离系统使用ISO必须借助第三方软件,最简单的就是NT6HDDINSTALL,从名字就能看出这个软件干什么的,其工作原理就是给硬盘加了个引导,使用方法:首先要借助系统安装这个软件,如果没有系统就要先做个PE,在PE里去装,安装之后,将ISO解压到任一磁盘分区根目录(最好和打算安装的分区分开,避免混乱),然后重启,选择NT6启动,就自动进入安装界面了。
此方法适合任意系统,缺点就是每次安装操作都很复杂,安装后还要卸载引导删除临时文件,不是很完美,于是继续寻找方法。
(2)由于win7的bootmgr没有引导ISO的功能,而有引导wim的功能,于是我打算将ISO转换成wim,方法就是先解压ISO,再用imageX命令去打包成WIM。
由于全靠理论,测试几次都失败,所以放弃研究,继续寻找。
(3)既然bootmgr不能引导,有能引导ISO的引导器吗?答案是肯定的,grub4dos是我所见到的唯一一个可以引导ISO的引导器,由于grub4dos是引导器,所以装起来相对比较复杂,我打算实现的是bootmgr引导grub,首先要给U盘装上安装引导功能,由于我的U盘已经有了引导功能,就跳过了这一步,直接将grldr、grldr.mbr、menu.lst放入U盘根目录,用txt打开menu.lst进行编写菜单。之后用BCDtool编辑win7的bcd,添加grub引导,将路径指向/grldr.mbr(如图),这样,重启后开机菜单就会出现grub项,进入之后看到的就是引导ISO的项,在这个过程中,grub起到的是桥的作用,连接了bootmgr和ISO。
此方法制作复杂,但是做完之后可以很稳定的使用,一劳永逸。
不过既然grub能引导ISO,何不让U盘更干净整洁,与其放那么多win7文件,远不如放2个ISO,于是下面是我打算推荐的方法,也是今天的正题。
C、grub双引导ISO,也是最终的研究成果,我拿来了一个新的U盘来进行这次制作,步骤如下:
1、使用Usboot对U盘加引导,HDD或FDD随意,我觉得HDD最好,于是就选了HDD,自动格式化,拔出再插入,制作引导盘完成。(20120823修改,如果U盘大于2G,Usboot容易出现问题,取而代之,使用DiskGenius对U盘转HDD更佳),之后使用grubinst安装grub引导器,操作如图,执行后完成安装。(此步骤中操作一定要细致,操作的分区一定要选对,如果选成电脑硬盘,后果会很悲剧)
2、将grldr、grldr.mbr、menu.lst放入U盘根目录,这里用的是grub4dos-0.4.4版本,早前的版本不能引导ISO,编辑menu.lst,内容如图。然后放入需要引导的ISO,其中ISO文件名注意大小写,不仅可以实现2个ISO,项目可以添加,ISO可能出现无法引导现象,原因是ISO类型问题,貌似需要转换,还没遇到这种情况。
开机选单效果↓
menu.lst 文字内容 ↓
#很多种参数可改,可以根据喜好去个性化。
color black/cyan yellow/cyan
timeout 30
default /default
title 1 Start Windows 7 Setup
map --mem/winvblk.ima.gz (fd0)
map --mem/winvblk.ima.gz (fd1)
map /win7.iso(0xff)
checkrange 0x80 read 0x8280&& map (hd0) (hd1)
checkrange 0x80 read 0x8280&& map (hd1) (hd0)
map --hook
chainloader (0xff)
title 2 Start Windows XP Setup
map --mem/winvblk.ima.gz (fd0)
map --mem/winvblk.ima.gz (fd1)
map /winxp.iso(0xff)
checkrange 0x80 read 0x8280&& map (hd0) (hd1)
checkrange 0x80 read 0x8280&& map (hd1) (hd0)
map --hook
chainloader (0xff)
PS:-mem参数指ISO载入内存,如果ISO巨大,内存很小,不要加这个参数,以免蓝屏。
根目录截图 ↓
SYS文件为usboot自建,可能不需要,bootlace.com是向导建议的,作用不明。
至此,这个多引导ISO的安装U盘就做完了,应该是最简单最完美的结果了,不过测试中我发现,grub一闪而过许多错误,虽然没有影响到安装,不过或许有兼容性问题吧,所以我觉得还是B方法最稳定。
部分相关文件http://115.com/file/aqag9ocu#
部分相关软件http://115.com/file/bh07xr8g#