1、没想到制作方法发布得到如此广泛的关注,看来大家都跟我一样希望制作一个通用性比较好的系统维护工具。经过这几天各位网友的测试反馈,发现 NT Loader + Avlgo 的方式兼容性不太理想。于是我又换别的启动方式试验。现将试验成功的另外两种方法也一并发布,大家共同试验、探讨。谨以此文抛砖引玉,希望在众人的研究之下,最终能找到一个兼容性比较好的解决方案。前缘:很多年以前,那时候软驱还是电脑的必配,维护电脑引导系统也用软盘,我那时候就做了 N片启动软盘。后来随着软盘淡出市场,系统维护盘也改用光盘了,例如著名的深山红叶系统维护工具盘,就为我的工作提供了有力的帮助。不过光盘还是存在容易磨花,体积较大等
2、缺点。现在的电脑基本上都支持 USB 设备启动,U 盘可以做成小巧而容易携带的系统维护盘;可重写的存储媒体也为更新提供了方便,再也不用为了升级刻录一堆光盘了。目标:对于系统维护来说,WindowsPE 不可却少的利器;除此外,有一些问题还是需要启动到 DOS环境来解决。所以我的目标就是制作一个 DOS/WinPE 双启动的系统维护 U 盘。下次再遇到某电脑系统崩溃的话,从衣袋里面摸出一精致的 U 盘,启动电脑之后,把问题解决于弹指间。何其潇洒也!技术背景:其实,U 盘启动电脑,主要是各种引导工具的合理灵活运用,所有的操作和调试,也都是围绕引导工具的安装和配置进行的。我们知道,作为操作系统的主要
3、载体,磁盘一直是最重要的存储媒质。因此基本上所有的 OS 引导的模式都大致相同,都是由磁盘来装入的。首先,需要在 OS 所在磁盘的 MBR(主引导记录)扇区写入特定的引导代码,电脑启动后会按照 BIOS 里面设置的启动顺序轮询对应磁盘的 MBR 区,如果找到有效的 MBR 记录,就按照MBR 记录的指针去装入 OS 引导文件,如果 OS 引导文件正常,就加载对应的操作系统。因此完成一个操作系统的启动,需要两个必须的步骤:1、MBR 引导;2、OS 引导。基于上述基本原理,各种操作系统都有自带的引导器,例如 WindowsNT 以上系统的 NT Loader(NTLDR) 、Linux 的 Li
4、lo、各版本的 Grub 引导器等等,当然还有一些第三方的多系统引导工具如 System Commander 等等。对于我们目前的这个应用,目的是能够在 U 盘上实现 DOS/WinPE 双启动,并且具有相对比较好的兼容性。要达到这个目的,就有一些技术要求。首先,方案要能够适应 U 盘移动存储这种盘符变动的情况;其次,要实现双启动,一般都会用到虚拟盘镜像,也就是引导器需要支持 RAMDisk 加载各种常见磁盘镜像启动的方式。虽然 U 盘具有小巧轻量并且可以反复擦写等诸多优点,但如果要做成启动盘,还存在一些需要解决的问题。最大的问题是:USB 启动并没有统一的行业规范。主板制造商不同、BIOS
5、不同,USB 引导方式也有差异。作为移动存储设备,主板对 U 盘的识别不同,会使盘符变化。这些直接导致 U 盘启动的通用性和兼容性不理想,表现就是在有些电脑上无法引导。这是需要重点解决的问题。OS 选择:DOS 系统选用 MS-DOS 7.1;WinPE 选用无忧论坛老毛桃的“外置网络、多媒体组件的老九 WinPE 老毛桃最终修改版” 。方案一:NT Loader + AVLDR + AvlgoMBR 用 NT Loader 引导,在 NTLDR 引导菜单中设置选项:用 AVLDR 引导 WinPE;而用 Avlgo引导 DOS;由于 Avlgo 不支持选单方式多重启动,为了解决不同主板识别
6、U 盘的盘符不同的问题,对 Avlgo 引导配置文件稍作修改,以适应盘符变化的启动需求。工具准备:PeToUsb用来把 U 盘格式化成 NT 引导模式;WinImage用于制作 DOS 启动软盘镜像;Avlgomgr用于生成 Avlgo 引导文件;UltraEdit用于编辑修改 Avlgo 的引导文件。数据准备:1、PeToUSB 是一款免费软件,专门用来把 U 盘引导区格式化成 NTLDR 引导代码。启动PeToUSB,从“Destination Driver”栏选择目标 U 盘,点击下面的“Start”按钮,它询问“Continue”是否继续,点击“是” ,弹出一个警告窗口,提示目标盘的所
7、有数据都将会丢失,是否继续?还是选择“是” ,然后片刻就完成格式化。2、用 WinImage 制作一个 2.88M 的启动软盘镜像,将 MS-DOS 7.1 装入镜像,并把常用的DOS 工具也放到镜像里面。启动 WinImage 后,点击最左边的按钮新建一个镜像,这里选择标准格式 2.88MB,为的是尽量能多存放一些工具。然后向这个镜像中添加文件,把事先准备好的 MS-DOS 系统文件从资源管理器里面拖拽到 WinImage 窗口中。其它 DOS 工具也这样添加进来。文件添加完毕之后,点击“映像”菜单“引导扇区属性” ,选择“Windows 95/98”并确定,这一步很重要,漏做这一步的话,这
8、个软盘镜像就不能引导电脑了。最后保存成 ima 格式的镜像文件 DOS.ima。3、先备份好 C 盘的 Boot.ini 文件,注意默认状态看不到这个系统、隐藏属性的文件,需要到资源管理器里面“工具”菜单“文件夹选项”当中修改查看方式,取消“隐藏受保护的操作系统文件”复选框,并切换为显示所有文件。启动 Avlgomgr,在“虚拟磁盘完整路径”浏览找到刚才用 WinImage 制作的镜像文件,然后点击“装配”按钮,Avlgomgr 自动修改Boot.ini 文件,并在目标盘(本例为 C 盘)生成我们需要的 Avldr.bin 和 Avlgo.sys 两个关键文件,把这两个文件拷贝到某处备用。完成
9、以后恢复原 C 盘的 Boot.ini 文件。4、启动 UltraEdit,先打开 Avldr.bin,在编辑屏右边的 ASC码区域可以找到“AVLGO.SYS”的字符串,把它改成“AVDOS.SYS” ,文件另存为 Avldr.dos。5、然后打开 Avlgo.sys,在右边 ASC码区域找“(hd00)/DOS.IMA”字符串,把它修改成“(fd0)/DOS.IMA”。修改的时候要注意,由于修改后的字符串比修改前的短,为保证文件长度不变,剩下的部分要切换到左边 16 进制码区域,用“00”填充,这样才能保证文件长度不变。修改完后另存为 Avdos.sys。开始组装:1、首先,在 U 盘的根
10、目录用记事本创建一个 Boot.ini 文件,内容如下:boot loadertimeout=30default=C:avldr.xpeoperating systemsC:avldr.xpe=“Windows PE By:LaoMaotao“C:avldr.bin=“MS-DOS 7.1 form USB-HDD“C:avldr.dos=“MS-DOS 7.1 from USB-FDD“完成以后把这个文件的属性修改成 只读/系统/隐藏(可以用 DOS 命令 attrib +r +s +h boot.ini 修改文件属性) 。这是 NT Loader 的菜单配置文件,timeout 参数设置的
11、是菜单等待时间,如果在设定的时间(本例为 30 秒)用户没有进行选择,就自动加载 default 项默认的 C:avldr.xpe,启动WinPE。operating systems小节是菜单中出现的引导选项,第一个就是前面 default 设置的老毛桃 WinPE,双引号里面的是注释行,会显示在引导菜单里面。下面两行分别是为主板识别 U盘为 USB-HDD 和主板识别 U 盘为 USB-FDD 两种模式对应的引导项。2、把硬盘系统的 NTLDR 和 NTDETECT.COM 两个文件拷贝到 U 盘根目录,这是 NT Loader 引导器的必须文件。3、把下载到的老毛桃 WinPE 的 ISO
12、 文件解压缩到一个临时文件夹,把其中“WINPE 安装”文件夹里面的 AVLDR.XPE 拷贝到 U 盘的根目录,把“WXPE”文件夹下的 SETUPLDR.BIN 也拷贝到 U 盘根目录并改文件名为 LDRXPE。把临时文件夹里面的 WINNT.XPE、WINPE.IS_、和“外置程序”文件夹都拷贝到 U 盘的根目录下。做完这一步,U 盘就可以引导到 WinPE 下了。如果启动的时候选第一项“Windows PE By:LaoMaotao”,系统将依照 NTLDR-avldr.xpe-winnt.xpe-winpe.is_这个顺序链把电脑启动到 Windows PE 环境下。5、把软盘镜像文
13、件 DOS.ima 拷贝到 U 盘根目录。6、把前面生成的 Avldr.bin 和 Avlgo.sys 两个文件拷贝到 U 盘根目录,对照 Boot.ini 文件可知,这两个文件是对应于菜单中第二行 for USB-HDD 模式。如果启动的时候选择第二项“MS-DOS 7.1 form USB-HDD”,系统将依照 NTLDR-avldr.bin-avlgo.sys-DOS.ima 这个顺序链把电脑启动到 MS-DOS 环境下。7、把前面 UltraEdit 编辑生成的 Avldr.dos 和 Avdos.sys 两个文件拷贝到 U 盘根目录,对照 Boot.ini 文件可知,这两个文件是对应
14、于菜单中第三行 for USB-FDD 模式。如果启动的时候选择第三项“MS-DOS 7.1 form USB-FDD”,系统将依照 NTLDR-avldr.dos-avdos.sys-DOS.ima 这个顺序链把电脑启动到 MS-DOS 环境下。至此 DOS/WinPE 双启动系统维护 U 盘制作成功。方案二:NT Loader + Grub4DOS因为 Avlgo 引导器默认是不支持多重配置选单的,所以前面我使用了特别的方式编辑处理Avlgo 的引导配置文件,以期解决 U 盘启动盘符变动引发的问题。从网友的反馈看,这种方式引导 DOS 启动软盘镜像,失败率还是比较高。基本上出问题的情况都是
15、 NT Loader 引导正常,但是到 Avlgo 的环节出错。因此这套方案,依然保留 NT Loader 作为 MBR 引导器,用Grub4DOS 来引导 OS。1、给 U 盘写入 NTLDR 的 MBR,此项工作可以用 PeToUSE 来完成,也可以用其它方式达成目标。具体操作见方案一。2、把 NT Loader 所需的文件 NTLDR 和 NTDETECT.COM 拷贝到 U 盘根目录。3、编辑 NT Loader 启动菜单 Boot.ini。用任何文本编辑器创建一个 Boot.ini 文件,内容如下:boot loadertimeout=0default=C:grldroperatin
16、g systemsC:grldr=“Boot Menu“Boot.ini 菜单各个项目的含义请对照方案一的说明。4、拷贝 Grub4DOS 文件,把 Grub4DOS 里面的 grldr 拷贝到 U 盘根目录;在 U 盘根目录创建一个 Boot 文件夹,把 Grub4DOS 的中文字体文件 Fonts.tz 和菜单背景图片文件 Splash.gz拷贝到这个文件夹下。在 U 盘根目录创建一个 grubidx.txt 文件,内容无所谓。5、把 DOS 软盘镜像文件 dos.ima 拷贝到 U 盘的 Boot 文件夹下。6、把老毛桃 WinPE 里面的 WINNT.XPE 和 WINPE.IS_文件
17、拷贝到 U 盘根目录;把 WXPE 文件夹下面的 SETUPLDR.BIN 拷贝到 U 盘根目录下并更名为 LDRXPE,注意没有后缀哦。把“外置程序”文件夹拷贝到 U 盘根目录。7、创建 Grub 引导菜单文件,用任何纯文本编辑器在 U 盘根目录创建一个 Menu.lst 文件,内容为:timeout 30default 0splashimage /boot/splash.gzforeground ffff00fontfile /boot/fonts.gztitle 启动 WindowsPEfind -set-root /grubidx.txtchainloader /ldrxpetitle
18、 启动 MS-DOS 7.1find -set-root /grubidx.txtmap -mem /boot/dos.ima (fd0)map -hookchainloader (fd0)+1rootnoverify (fd0)做完这些,U 盘就可以启动了。菜单项目说明:第一行设置等待 30 秒的等待时间;第二行设置如果 30 秒用户没有选择,就默认启动第一个引导项目“启动 WindowsPE” ;splashimage 项目设置 Grub4DOS 启动菜单的背景图片,图片路径为/boot/splash.gz;foreground 项设置启动菜单文字颜色为亮黄色;fontfile 项设置中文
19、字体文件为/boot/fonts.gz下面两个以 title 结尾的小节就是启动菜单的两个启动项,title 后面的文字将显示在菜单中;find -set-root /grubidx.txt 这一项是自动搜索 grubidx.txt 这个事先创建好的特征文件,它只要找到这个文件,就把文件所在的路径设置为根设备,这样就不会被盘符变化困扰了。至于特征文件的内容,那就无所谓了。chainloader /ldrxpe 就是启动 WinPE 的 XPE 镜像。map -mem /boot/dos.ima (fd0)是装入/boot/dos.ima 这个软盘镜像,并且虚拟成 fd0.map -hook 是
20、让装入的软盘镜像立即加载生效。rootnoverify (fd0)指定把刚才虚拟的 fd0 设置为根设备。本来,Grub4DOS 可以直接安装到 U 盘的根目录,但是我反复尝试了多次,MBR 是写进去了,可总是报错无法引导。所以还是用 NT Loader 做 MBR 引导器,由于 NT Loader 不支持加载镜像文件,所以 MBR 引导成功后,把控制权交给 Grub4DOS,由 Grub4DOS 来加载 WinPE 的 XPE镜像以及 MS-DOS 的软盘镜像实现启动对应 OS 的功能。方案三:MS-DOS 7.1 + Grub4DOS本来这个方案是我着手制作双启动 U 盘最早选用的方案,但
21、是在我的华擎 845E 主板上始终没法使用,所以开始没有发布。这次发布出来供大家测试,看看是不是我那主板的特例。本方案的 MBR 由 DOS 引导,WinPE 由 Grub4DOS 加载启动。相对前面的方案,这个方案制作起来最简单。1、用 HP USE Disk Storage Format Tool 把 U 盘格式化成 FAT 可引导盘。2、根据自己的需要,把其它 DOS 文件和一些 DOS 工具拷贝到 U 盘。3、把老毛桃 WinPE 里面的 WINNT.XPE 和 WINPE.IS_文件拷贝到 U 盘根目录;把 WXPE 文件夹下面的 SETUPLDR.BIN 拷贝到 U 盘根目录下并更
22、名为 LDRXPE,注意没有后缀哦。把“外置程序”文件夹拷贝到 U 盘根目录。4、把 NTLDR 和 两个文件拷贝到 U 盘根目录,这是启动 XPE 格式 WinPE 镜像必须的文件。5、把 grub.exe 和 fonts.gz 两个 Grub4DOS 的程序文件和中文字体文件拷贝到 U 盘根目录。6、用任何文本编辑器在 U 盘根目录创建 Menu.lst,内容如下:timeout 0default 0fontfile /fonts.gztitle 启动 WindowsPEfind -set-root /grubidx.txtchainloader /ldrxpe在 U 盘根目录创建一个
23、grubidx.txt 文件,内容无所谓,作用是配合 Menu.lst 作为 Grub 特征文件查找确定根设备。7、自行编辑 Config.sys 和 Autoexec.bat,构建 DOS 多重开机选单,加入启动 Grub4DOS 的项目。要保证启动 Grub 的时候不装入任何的内存管理程序和其它驱动程序、驻留程序,以免跟 Grub4DOS 发生冲突。可以简单地在 Autoexec.bat 里面加入一行:grub这样就可以启动 Grub4DOS 了。当然,由于要实现双启动,所以要把这两个配置文件编辑成多重选单的方式,在需要的时候可以启动对应的配置。我把我的配置文件内容放在下面供参考。Conf
24、ig.sys 内容:MENUMENUITEM=1XMS without CD-ROM supportMENUITEM=2XMS with CD-ROM supportMENUITEM=3XMS and EMSMENUITEM=4DOS real mode(no XMSno EMS)MENUITEM=5Windows PEMENUDEFAULT=5301DEVICE=HIMEM.SYS /TESTMEM:OFFDEVICE=EMM386.EXE NOEMSINCLUDE=PUB2DEVICE=HIMEM.SYS /TESTMEM:OFFDEVICE=EMM386.EXE NOEMSDEVICEH
25、IGH=VIDE-CDD.SYS /D:SSCD001INCLUDE=PUB3DEVICE=HIMEM.SYS /TESTMEM:OFFDEVICE=EMM386.EXE RAMINCLUDE=PUBPUBDOS=HIGHUMBFILES=30BUFFERS=20STACKS=9256LASTDRIVE=Z4FILES=10BUFFERS=10LASTDRIVE=Z5Autoexec.bat 内容:ECHO OFFPATH=A:;C:;A:Diskgen;C:DiskGen;A:DM;C:DMGOTO %CONFIG%:1GOTO COMMON:2LH SHSUCDX.COM /D:SSCD0
26、01GOTO COMMON:3GOTO COMMON:4GOTO END:5GRUB:COMMONLH SMARTDRV.EXE /XECHO Install mouse driver?CHOICE /C:YN YesNo /T:N6IF ERRORLEVEL 2 GOTO ENDLH MOUSE.COM:END按照这个配置,启动的时候如果选择第 5 个项目,或者超过 30 秒没有做选择自动执行第 5个项目,那就经由 Autoexec.bat 里面对应的语句启动 Grub4DOS,然后 Grub4DOS 会根据Menu.lst 的设置启动 WinPE。DOS 多重启动配置的具体做法,请参考有关
27、资料。感谢 5free 和 david_ge 的帮助!本文选用的“WinPE 老毛桃最终修改版”可以到无忧论坛或者老毛桃的网盘下载:附件中 Avdos.rar 是我制作好的 Avlgo 引导文件;NTLDR.rar 是 NT Loader 引导器文件;PeToUSB.rar 是格式化 NTLDR 引导盘的工具;Avlgomgr2007.rar 是 Avlgo 装配工具;FixNTBoot.rar 是另外一个用来写 NT Loader MBR 的工具。其它软件由于涉及版权,请自行到网上寻找。最近在研究 DOS/WinPE 双启动 U 盘,开始的时候用 Grub for DOS,结果这个东西对 U
28、SB 设备的支持有兼容性问题,搞得有的主板装入 WinPE 的时候死机。后来用 NTLDR+AVLDR 代替 Grub for DOS 搞定了启动 WinPE 兼容性问题。目前的需要解决的问题是如何用 NTLDR 启动 DOS。现在我是把 DOS 文件放在 U 盘根目录,已经提取生成了 U 盘格式化为 DOS 引导模式的引导扇区文件。但是不知道如何编写 Boot.ini文件,是否还需要把 DOS 系统文件制作成某种镜像?本次采用的 WinPE 是“老九 WinPE 老毛桃最终修改版”光盘版,它其实是一个 XPE 格式的镜像。对于这个镜像,WinPE 系统之外的软件存放在“外置程序”文件夹。我们
29、可以根据自己的需要,对外置程序进行增删、修改。下面介绍修改方法。如果是用它刻录光盘,就用 UltraISO 一类的镜像编辑工具打开 ISO 并编辑它;如果像本例这样想把它安装的 U 盘,可以用 WinRAR 把 ISO 文件解压缩后直接进行编辑。由于 WinPE 是一个脱离于原机硬盘系统的调试预安装环境,因此需要添加到外置程序中的软件必须是绿色免安装的。例如我不喜欢资源占用比较厉害的 AVP6 杀毒软件,想把它换成 Dr.Web Cureit。另外我还想把全能的文件工具 Total Commander 加进去。1、先删除“外置程序”文件夹里面的“AVP6”文件夹,然后在“外置程序”里面创建一个
30、“Dr.Web Cureit”文件夹,把 drweb-cureit.exe 文件拷贝到这个文件夹;在“外置程序”里面创建一个“Total Commander”文件夹,把 TC 的所有文件拷贝到这个文件夹。2、用记事本打开“外置程序”文件夹下面的 Winpe.ini,这是 WinPE 程序菜单的配置文件。打开后可以看到有许多以“LINK”结尾的行,这就是菜单项目。删除所有 LINK 结尾并含有“AVP6”的行,然后插入两行:LINK %Programs%Dr.Web CureitDr.Web Cureit%CurDir%Dr.Web Cureitdrweb-cureit.exeLINK %Pro
31、grams%文件工具Total Commander%CurDir%Total CommanderTOTALCMD.EXE语法解释:LINK %Programs%Dr.Web CureitDr.Web Cureit这部分设定程序在菜单上的位置和显示内容,本例就是程序项目位于 WinPE 的“程序”菜单中,程序名称为“Dr.Web Cureit” ,逗号是分隔符,逗号后面的部分定义程序文件的路径。%CurDir%Dr.Web Cureitdrweb-cureit.exe这部分设定程序文件的相对路径,即为当前目录“外置程序”目录下的“Dr.Web Cureit”目录中的 drweb-cureit.exe。这样编辑之后,重新启动 WinPE,就会在菜单里面看到对应的项目,点击即可启动相应的程序。我还是喜欢 grub intalled to MBR,我用了它后,没遇过启动不了的电脑,实在很强大。对 NTLoader intall to MBR 不感兴趣。一个是职业的,一个是业余的,连选择的念头都懒得有。BOOT 成功才是硬道理。功能再多如果启动失败就成了空谈。