很多年以前,那时候软驱还是电脑的必配,维护电脑引导系统也用软盘,我那时候就做了N片启动软盘。后来随着软盘淡出市场,系统维护盘也改用光盘了,例如著名的深山红叶系统维护工具盘,就为我的工作提供了有力的帮助。不过光盘还是存在容易磨花,体积较大等缺点。现在的电脑基本上都支持USB设备启动,U盘可以做成小巧而容易携带的系统维护盘;可重写的存储媒体也为更新提供了方便,再也不用为了升级刻录一堆光盘了。

  对于系统维护来说,WindowsPE不可却少的利器;除此外,有一些问题还是需要启动到DOS环境来解决。所以我的目标就是制作一个DOS/WinPE双启动的系统维护U盘。下次再遇到某电脑系统崩溃的话,从衣袋里面摸出一精致的U盘,启动电脑之后,把问题解决于弹指间。何其潇洒也!

  技术背景:

  其实,U盘启动电脑,主要是各种引导工具的合理灵活运用,所有的操作和调试,也都是围绕引导工具的安装和配置进行的。我们知道,作为操作系统的主要载体,磁盘一直是最重要的存储媒质。因此基本上所有的OS引导的模式都大致相同,都是由磁盘来装入的。

  首先,需要在OS所在磁盘的MBR(主引导记录)扇区写入特定的引导代码,电脑启动后会按照BIOS里面设置的启动顺序轮询对应磁盘的MBR区,如果找到有效的MBR记录,就按照MBR记录的指针去装入OS引导文件,如果OS引导文件正常,就加载对应的操作系统。

  因此完成一个操作系统的启动,需要两个必须的步骤:1、MBR引导;2、OS引导

  基于上述基本原理,各种操作系统都有自带的引导器,例如WindowsNT以上系统的NT Loader(NTLDR)、Linux的Lilo、各版本的Grub引导器等等,当然还有一些第三方的多系统引导工具如System Commander等等。

  对于我们目前的这个应用,目的是能够在U盘上实现DOS/WinPE双启动,并且具有相对比较好的兼容性。要达到这个目的,就有一些技术要求。首先,方案要能够适应U盘移动存储这种盘符变动的情况;其次,要实现双启动,一般都会用到虚拟盘镜像,也就是引导器需要支持RAMDisk加载各种常见磁盘镜像启动的方式。
虽然U盘具有小巧轻量并且可以反复擦写等诸多优点,但如果要做成启动盘,还存在一些需要解决的问题。最大的问题是:USB启动并没有统一的行业规范。主板制造商不同、BIOS不同,USB引导方式也有差异。作为移动存储设备,主板对U盘的识别不同,会使盘符变化。这些直接导致U盘启动的通用性和兼容性不理想,表现就是在有些电脑上无法引导。这是需要重点解决的问题。

  OS选择:

  DOS系统选用MS-DOS 7.1;WinPE选用无忧论坛老毛桃的“外置网络、多媒体组件的老九 WinPE 老毛桃最终修改版”。

  方案一:NT Loader + AVLDR + Avlgo

  MBR用NT Loader引导,在NTLDR引导菜单中设置选项:用AVLDR引导WinPE;而用Avlgo引导DOS;由于Avlgo不支持选单方式多重启动,为了解决不同主板识别U盘的盘符不同的问题,对Avlgo引导配置文件稍作修改,以适应盘符变化的启动需求。

  工具准备:

  PeToUsb——用来把U盘格式化成NT引导模式;WinImage——用于制作DOS启动软盘镜像;Avlgomgr——用于生成Avlgo引导文件;UltraEdit——用于编辑修改Avlgo的引导文件。

  数据准备:

  1、PeToUSB是一款免费软件,专门用来把U盘引导区格式化成NTLDR引导代码。启动PeToUSB,从“Destination Driver”栏选择目标U盘,点击下面的“Start”按钮,它询问“Continue”是否继续,点击“是”,弹出一个警告窗口,提示目标盘的所有数据都将会丢失,是否继续?还是选择“是”,然后片刻就完成格式化。

  2、用WinImage制作一个2.88M的启动软盘镜像,将MS-DOS 7.1装入镜像,并把常用的DOS工具也放到镜像里面。启动WinImage后,点击最左边的按钮新建一个镜像,这里选择标准格式2.88MB,为的是尽量能多存放一些工具。然后向这个镜像中添加文件,把事先准备好的MS-DOS系统文件从资源管理器里面拖拽到WinImage窗口中。其它DOS工具也这样添加进来。文件添加完毕之后,点击“映像”菜单——“引导扇区属性”,选择“Windows 95/98”并确定,这一步很重要,漏做这一步的话,这个软盘镜像就不能引导电脑了。最后保存成ima格式的镜像文件DOS.ima。

  3、先备份好C盘的Boot.ini文件,注意默认状态看不到这个系统、隐藏属性的文件,需要到资源管理器里面“工具”菜单“文件夹选项”当中修改查看方式,取消“隐藏受保护的操作系统文件”复选框,并切换为显示所有文件。启动Avlgomgr,在“虚拟磁盘完整路径”浏览找到刚才用WinImage制作的镜像文件,然后点击“装配”按钮,Avlgomgr自动修改Boot.ini文件,并在目标盘(本例为C盘)生成我们需要的Avldr.bin和Avlgo.sys两个关键文件,把这两个文件拷贝到某处备用。完成以后恢复原C盘的Boot.ini文件。

  4、启动UltraEdit,先打开Avldr.bin,在编辑屏右边的ASCⅡ码区域可以找到“AVLGO.SYS”的字符串,把它改成“AVDOS.SYS”,文件另存为Avldr.dos。

  5、然后打开Avlgo.sys,在右边ASCⅡ码区域找“(hd0,0)/DOS.IMA”字符串,把它修改成“(fd0)/DOS.IMA”。修改的时候要注意,由于修改后的字符串比修改前的短,为保证文件长度不变,剩下的部分要切换到左边16进制码区域,用“00”填充,这样才能保证文件长度不变。修改完后另存为Avdos.sys。

  开始组装:

  1、首先,在U盘的根目录用记事本创建一个Boot.ini文件,内容如下:
  [boot loader]
  timeout=30
  default=C:\avldr.xpe
  [operating systems]
  C:\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参数设置的是菜单等待时间,如果在设定的时间(本例为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文件解压缩到一个临时文件夹,把其中“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、把软盘镜像文件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文件可知,这两个文件是对应于菜单中第三行 for USB-FDD模式。如果启动的时候选择第三项“MS-DOS 7.1 form USB-FDD”,系统将依照NTLDR------>avldr.dos------>avdos.sys------>DOS.ima这个顺序链把电脑启动到MS-DOS环境下。

  至此DOS/WinPE双启动系统维护U盘制作成功。