可恶的vista和U盘启动盘的制作

(未完成)

兴冲冲安装了一个vista,结果用了2天,现在出现了错误,卡在crddisk.sys上了,连安全模式都进不去,查了半天,好像说是SATA的驱动或者无线卡驱动有问题,而且更可怕的是到今天为止没有什么解决方案。所以奉劝大家如果不想妨碍工作的话,还是等下半年sp1出来之后再尝试vista吧。

不管怎么样,反正系统是要先进去的。公司的机器没有光驱,所以只好打U盘的主意。查阅了N多资料之后,发现网络上的资料似乎并不能保证一次都能成功。所以bigtall决定写一个正常好使的关于USB盘启动的文章。

首先我们要来补充一点基础知识。

一、基础知识

不知道各位看官是否还记得金庸的《雪山飞狐》?《飞狐外传》固然是大块头的正本,其实这本续集也是有精彩之处,bigtall自打初中时候看了之后,到现在依然不能忘记:悬崖顶上的山庄通过一个绞盘带动大篮子上下,结果后来给人炸了。后来修复的时候,山下的人用一根很长很细但是很结实的细线由信鸽带到山上,山上的人用力扯线,车上来一根也是很长很结实,但是比较粗一点的线,如此几番,最后拉上来一根粗绳子,大家就从此上下了。

操作系统的引导过程也大致如此。首先PC机系统引导的时候,以实模式从FFFF:0000地址开始执行BIOS中的程序,BIOS会依次寻找系统中所有物理磁盘的0面0道1扇区,把第一个找到的结尾标志是0x55AA的内容(512字节)读入,然后执行这段称之为引导记录的代码。如果把BIOS看作鸽子的话,那这512字节的小程序当然就是鸽子带上来的细线了。引导记录能做的事情很有限,就是在各个磁盘分区中寻找跟具体操作系统相关的引导程序,装入,然后执行这一段引导程序。引导程序一般都会比较大,占用多个扇区的空间(一般是1个磁道,至少16个扇区,也就是16*512字节),所以这段程序做的事情会多一些,他们会查找文件系统,寻找到相应的启动文件,装入启动文件,然后执行它。到启动文件阶段之后,就是真实的操作系统启动过程了。

我们以XP系统为例,假设XP装在C盘,机器开启电源之后,首先BIOS装入引导记录,引导记录会装入C盘的引导程序(题外话:XP好像会给每一个逻辑盘都写上引导程序的,所以你可以指定任意的分区作为启动盘);XP的引导程序负责在磁盘上寻找NTLDR这个程序,装入并运行NTLDR之后,你就会看到屏幕上有XP的启动信息了,一个XP的标志显示在屏幕上了。

日常操作中,如果熟悉DOS操作系统的朋友就会知道FDISK和SYS这个两个命令,FDISK是磁盘的分区程序,但是它有一个隐含的命令参数“/MBR”是恢复硬盘引导记录的;SYS这个命令就是写引导程序的,并且会把完整的基础DOS启动环境建立起来,XP下没有这个程序,但是我们有很多方法可以来建立XP的运行环境。接下来我们就来看XP的相关知识。

到目前为止,如果要做一个用于Windows系统日常维护的启动工具盘,我们需要接触到三种类型共四种实现:DOS系统引导、XP系统引导、XPE(Windows PE 1.x)系统引导和VistaPE(Windows PE 2.x)系统引导,我们看下表:

系统 启动文件 支持的文件系统 说明
DOS

IO.SYS(或ibmbio.sys)
MSDOS.SYS(或ibmdos.sys)
CONFIG.SYS配置文件

FAT,FAT32 不支持多系统启动
不支持映像文件启动
XP NTLDR,
NTDETECT.COM,
BOOTFONT.BIN
boot.ini配置文件
FAT,FAT32,NTFS 支持多系统启动
不支持映像文件启动
XPE

SETUPLDR.BIN(或NTLDR)
NTDETECT.COM
BOOTFONT.BIN
WINNT.SIF配置文件

FAT,FAT32,NTFS NTLDR支持多系统启动
SETUPLDR.BIN支持压缩的映像文件直接启动
比如IMG文件,ISO文件,CAB文件等
Vista/
VistaPE
BOOTMGR
BOOT\BCD
BOOT\BOOT.SDI
BOOT\BOOTSECT.EXE
BOOT\ETFSBOOT.EXE
FAT,FAT32,NTFS 支持多系统启动
支持映像文件直接起动

这个表比较重要,下文bigtall就不会重复说明建立系统时候需要拷贝的文件了。

各位看官可能对PE比较陌生,其实装过windows的朋友都接触过这个东西。我们运行安装windows的时候,一开始不是文本界面吗,然后启动一次就会进入图形界面,一直到windows安装完为止。这个图形界面就是一个PE环境,其实就是Windows的一个精简版本,用任何一个版本的XP都可以从中剥离一个PE出来,而且不违反M$的授权协议。现在因为PE本身功能比较强大,所以Vista已经用PE堂而皇之地作为系统维护环境的基础了。

基础知识补充完毕,接下来我们来看我们的需求。

二、操作步骤

 我们的目标是(画外音:~没~有~蛀~牙~)创建一个U盘启动工具盘,所以多启动支持比较重要,不过bigtall对XP系列对多启动支持并不是很满意,所以我们要选一个更好用的,当然是GRUB for DOS了。它是一个强大的跨平台的专用的多系统引导程序。更为关键的是操作起来非常简单。首先我们来看一下完成整个步骤所需要准备的东西:

  1. 一个空的U盘,bigtall准备了两个:一个1G的和一个128M的。
  2. 工具PEtoUSB,作用是格式化一个NT/XP启动盘。到http://gocoding.com/page.php?al=petousb下,这个项目是从sf迁移过来的,可是没有找到源代码。
  3. 工具USBBOOT,另外一款格式化U盘的工具,到 http://flashget.newhua.com/down/usboot.rar 下,和PEtoUSB配合,基本没有不能格式化的U盘。
  4. 下载grub for dos环境和其安装工具grub-install
  5. 下载一个vista PE的iso,地址是http://www.greendown.cn/view_down.asp?downd_id=17&downd=0&ID=6270&down=yes ,不过bigtall找到一个晚一些时候的 VISTAPE0509.iso,必须用迅雷,因为原始地址没有了。
  6. 下载深山红叶熊猫烧香版V28,是XPE内核的工具盘,必要。必须用迅雷,因为原始地址没有了。这里如果用avg free会杀出3个木马。不过没关系。
  7. 下载一个DOS启动工具盘,入口页面在这里,下载地址在这里:部分1部分2部分3。这个dos工具中的spfdisk磁盘分区工具非常好用,强烈推荐。

准备好之后,我们要开始我们的操作步骤了,这里,我们会把这几种系统放到一个盘上,用grub统一进行启动管理。我们首先规划一下目录:

loader            存放所有和启动相关的文件,尽可能全部放在这里
loader\grub    相关的文件和备份
loader\redleaf·深山红叶的启动文件目录
loader\vistaPE·PE2环境

大家估计手里已经痒得不行了,废话就不说了,以下就是步骤和注意事项:

  1. 格式化U盘,因为有DOS系统,所以大家直接格式化成fat或者fat32格式。格式化工具使用PEtoUSB,1G的建议使用HDD方式格式化,128M的可以用ZIP格式,不过要注意的是,因为U盘启动没有统一的标准,所以要自己的机器支持才行。格式化直接影响系统能否正常启动。测试方法很简单,在格式化之后,直接插入电脑,用USB方式启动,如果报告类似于“Missing xxxxx”的错误,并且让你“press any key”的话,测试就通过了。
  2. 运行grub-install工具,更新引导程序。这个步骤一定要注意,不要错选了你的硬盘哦。操作失误别来找我,bigtall可是一概不认账、不负责的哦。另外,如果不小心把grub弄得无法启动了,用这个工具简单修复一下就可以了。
  3. 将grub for dos中的grldr文件复制到根目录中。
  4. 编写grub的启动配置文件\menu.lst,具体内容见文后。到此,我们需要再一次进行测试:用USB方式启动,过了几秒钟之后,你应该会看到一个带有选项的界面,按c键可以进入grub的命令行模式,大家可以help一下看看。
  5. 安装dos系统。解压缩SBMSR400.part?.rar,把其中的IMG文件复制到loader目录中。对应menu.lst的配置内容为:
  6. 安装深山红叶系统。将iso根目录下面的winpe.im_,winpe.sif和xcmd.ini复制到U盘根目录;把wins中的两个文件setupldr.bin和ntdetect.com复制到loader\redleaf中;把programs目录拉到U盘根目录下;然后对应menu.lst配置内容为:
  7. 安装VistaPE系统。把vistaPE的ISO根目录下面的bootmgr复制到U盘根目录;把BOOT目录和SOURCES目录拉到U盘根目录下。如果要工具,则把PROGRAMS拉到U盘根目录,和深山红叶的合并在一起。(有好事者可以去修改一下xcmd.ini,让红叶变得更丰满一些)。

至此,我的维护工具盘就成功了。bigtall给大家show一下我的1G盘的目录结构:

F:.
│  grldr
│  menu.lst
│  boot.ini
│  WINPE.SIF
│  BOOTFONT.BIN
│  NTDETECT.COM
│  WINPE.IM_
│  XCMD.INI
│  BOOTMGR
│  
├─loader
│  │  SBMSR400.IMG
│  │  DOS98.IMG
│  │  
│  ├─grub
│  │      menu.lst(根目录menu.lst的备份)
│  │      MEMDISK.GZ
│  │      
│  ├─redleaf
│  │      NTDETECT.COM
│  │      SETUPLDR.BIN
│  │      
│  └─vistaPE
│          BOOTMGR
│          
├─MENU
│          
├─PROGRAMS
│              
├─SOURCES
│      boot.wim
│      
└─BOOT
        BOOTSECT.EXE
        ETFSBOOT.COM
        BCD
        BOOT.SDI
        

这里有一个需要大家特别注意的事情:因为引导程序功能有限制,所以他们不能读取不连续的文件,换句话说,他们不能处理文件碎片的情况。所以在制作的时候,不要在U盘上做大量的删除操作,尽可能是copy进去。如果有人做了大量的删除操作,可以用XP自带的碎片整理程序整理一下就可以了。

说到这里,细心的看管应该有些疑问了,我另外的那个128M的盘呢?别着急,bigtall这就给你道来。我的这个128的盘时间比较老了,只支持USB1.1接口,所以用起来比较慢。所以bigtall需要挑选一下环境才可以,我选择深山红叶。做法很简单,不过跟前文操作步骤略有不同,需要用UsbBoot格式化,步骤如下:

  1. 使用UsbBoot格式化,我的机器用ZIP和FDD模式都可以认。格式化的时候UsbBoot会自动在里边放一个DOS启动系统的。
  2. 直接从GRUB FOR DOS中复制GRUB.EXE到U盘
  3. 在U盘用notepad生成一个名字叫CONFIG.SYS的文本文件,其中只有一行内容:DEVICE=grub.exe
  4. 从深山红叶系统中手工复制bootfont.bin, ntdetect.com, winpe.sif, setupldr.bin, winpe.im_到U盘根目录即可。
  5. 在U盘放一个menu.lst启动配置文件,内容参考附录

启动之后是一个基本的winpe环境,带有网络支持,不过要手工程序菜单中的工具。

 

三、应用

前文bigtall向大家抱怨了一下可恶的Vista,然后做了两个U盘启动盘,目的当然很明显,bigtall要在没有光驱的机器上装XP了,而且我要首先bigtall用刚做的1G的U盘启动机器

四、后记

维护系统是一个比较专业的活儿,如果看管您对自己没有把握或者没有完全搞清楚里边的事情,bigtall奉劝您还是少做为妙,免得误操作丢失了数据,捶胸顿足也来不及了。

另外,转载请大家保留作者bigtall的名字,以及本文的原始出处。谢谢!

posted on 2007-09-05 14:45  老翅寒暑  阅读(14241)  评论(9编辑  收藏  举报

导航