制作一块启动U盘



昨天定了有5天的16GU盘到了

本来买这么大的U盘就是打算多装几个系统在里面,便于我好操作.毕竟现在早已不是光盘的时代了.

而不得不说,我制作启动U盘的经验还停留在直接用UltraISO工具直接写入U盘的阶段...完全属于小白级别.

于是从0开始了搜索工作.

很快的,发现了XORLDR工具,这款工具原本似乎是设计用来做系统双启动的,它甚至能够支持在逻辑驱动器上启动操作系统.但是很明显的,我并不需要这么复杂的功能,我只是觉得它的启动界面很漂亮而已.于是采用了这款工具作为制作启动扇区的工具.

使用的方法也很简单了,去无忧启动论坛里找一张它的图片模板,然后拿回来用PhotoShop改一改,然后保存为BMP模式,一张改成最初的样子,一张改成选中了之后的样子,我只是简单的做了一个反正看起来还算是凑合的...这是最终的结果图:
(点击之后的效果图)
(点击之前效果图)

然后XORLDR的设置如图:


选贼菜单显示方式为"拷贝"的时候,当你的鼠标或者键盘挪动到对应的选项的时候,它就会把你所选择的区域的另外一张图给替换到对应的区域,实现选择效果,其实也挺简单的...因为背景图本身比较不错的原因,所以感觉也挺好看的...

然后就是重点了...当时我做这个U盘的时候就有一个目标:那就是散落在U盘根目录下的文件一定要尽量的少,最好用每个独立的文件夹来把整个安装程序部分都包裹起来

当然了,我也想到过使用U盘量产工具来分区,但是后来还是放弃了,第一,分区会浪费容量,第二分区不好修改,毕竟我现在买硬盘都不分区了买个U盘我还分区干嘛?第三,到我非常需要装某个东西而空间不足的时候我可以对安装文件进行暂时的取舍,事后我再拷贝回来就行了,这个很明显是分区了之后的U盘无法做到的.

因为我习惯于把根目录作为临时文件目录,所以为了弥补这一习惯所带来的管理上的不方便(我上一块8G的U盘就是根目录下文件一大堆,搞得非常不好处理).于是我希望在这块启动U盘在最后不在根目录留下任何独立文件.这成为了本次制作的最终极的目标.

然后就是具体的实施过程了:

首先是选材,我还是选择自己用的比较习惯的雨林木风的Ghost 6.0版本的XP作为母盘之一,然后DOS工具箱就直接用它所自带的了,反正我在DOS下基本上只用了Ghost,PQ和DOS本身了,其实要求也并不多.然后WinPE也干脆直接用它所自带的毛桃版的了,虽然网上有从Windows7中提取出来的PE3.0,支持更多的功能,但是那300M的庞大身躯和集成了的各色软件,我个人感觉意义都不大....毕竟PE只是用来救急的,谁用PE来处理Office甚至来聊QQ啊?这不是抽风么?所以我要求PE下至需要能够使用Ghost,能够读取NTFS文件,能够分区就足够了...加之老的PE更加能够适应一些古董的,内存低的机器,所以还是选择了最原始的PE.

剩下的就是几个Win7家族的合集了,还是采用的MSDN版本的Win7以及Win7 64bit,这俩只打算集成U版.Win 2008 R2则是采用的DreamSpark版本的,因为我本身也是用的DreamSpark的序列号,所以也只打算集成Standard版.

首先开始实现最简单的DOS启动功能.

雨林木风这版本的DOS工具箱是用DOS的软盘镜像做的,文件是一个DOS.IMA,里面已经集成了我所想要的全部软件,于是实现DOS启动也很简单.在XORLDR中增加一个启动项目,选择从文件启动,然后把启动文件的路径指向这个IMA文件,而这个路径之中是可以增加目录的,所以就很理所当然的把它放到了目录中,然后在类型中选择DOS镜像OK了.

这个改版过的DOS工具非常的方便,启动了之后会进入了一个被修改过的DOS界面,Ghost,PQ都是集成好了的.好的地方在于非常的简便,坏的地方在于每个独立的软件难于升级,不过至少现在所集成的Ghost和PQ之类都是最新版的 ,暂时不用担心这个了.

至此,很轻易的完成了DOS的安装,接下来开始实现PE的启动

PE的启动稍显复杂,主要是其一个主要文件,也就是NTDETECT.COM是放在U盘根目录的,我现在就是需要想办法把这个文件放到一个文件夹里,哪里都好..通过探索后发现,整个PE的启动文件SETUPLDR.BIN中其实指定了这个NTDETECT.COM文件的位置,当然,它同时也指定了WINNT.XPE文件的位置...于是通过Hex或者UltraEdit32之类的16位编辑器,我们查找所有的NTDETECT.COM这个ASCII字符串,然后把路径加上去就可以了,但是所需要注意的就是:必须要保证你修改了之后的字符串的长度与"NTDETECT.COM"的长度绝对相等,也就是为12个字符.当然了,这个文件的文件名你可以随便的改,比如我就把整个文件我放到了WinXP文件夹下,于是这个文件被我重命名为了"CT.COM",而加上前面的路径,我实际上就把"NTDETECTED.COM"修改为了"WinXP\CT.COM",二者都是12个字符,我在其中一共替换了4个这样的字符串...同样的,为了把WINNT.XPE的位置挪进来,我也只能同样的替换全部的"WINNT.XPE"字符串,不过这次就更加凄惨了,因为这个文件的文件名太短了,最后我不得不把这个文件从重命名为了"XPE"这三个字母...当然了,没有人规定一定要有扩展名了,反正自己能认就行了...

然后可以用普通的文本编辑器打开这个XPE文件,可以看到里面记录了WinPE镜像所在的位置,在毛桃的这个版本中,文件名为"WinPE.IS_",于是就可以很轻易的修改它,把它也放到任何文件夹中,而原本与它在同一个目录下的OP.WIM和WINPE.INI则只需要也和它继续保持在同一个目录下就可以了,这个就不需要那么麻烦的考虑字节数量绝对相等了,但是问题随之而来.....

最初这个WinPE.IS_本身就是被放在了MiniPE这个文件夹之中的.我用上述的方法它放到我的WinXP这个目录下,我很简单的就实现了这个目标,然后PE也能正常的启动了.但是有个很重要的问题那就是在这个版本的WinPE启动的过程中,它通过其特有的PECMD,加载了一个OP.WIM镜像文件并将其虚拟为了B:\,而这个B:\中放置了我所需要的各种软件,比如Winrar,Ghost32,PM,管理控制台等等...但是当我把整个文件夹挪动到了WinXP目录下之后,这个B:\目录就变成空空如也了...起初我以为是WINPE.INI的问题,后来发现问题并不这么简单,我修改了WinPE.INI文件之后,发现其环境变量也全部失去了作用,而正是环境变量的丢失,让整个PECMD都无法正常的运作了,而我也想过了直接将地址定死(因为它本身加载的盘符基本上是一样的,系统在X:\,软件在B:\),但是我还是不大想破坏它的兼容性..于是最后还是选择牵强的把整个MiniPE文件夹挪到了U盘的根目录,回复XPE文件的原始状态.把这个作为一个可改进的项目暂时的搁置了起来,不过至少它并没有违背我的最初要求,起码这仨文件还在文件夹里~等我有精神了我再去找原因,不过应该不是很难...

之后就开始了最复杂的集成Windows 7 32bit+Windows 7 64bit+Windows 2008 R2过程了

首先,需要先集成三张Win7系列的安装文件...最初我希望把三张盘都完完整整的拷贝进去,然后通过不同的引导文件来区分它们,后来发现这个做法两个大毛病:
1.文件太大,全部拷贝进去,至少需要7G空间
2.启动文件混乱(后期会发现一个问题导致此问题无法解决)

然后到网上查询了一下,发现了本身Windows Vista和Windows 7系列就提供了快速部署的工具,名字叫Windows AIK...于是下载之...(地址)

这东西其大无比,居然有1.7G...但是其实核心文件并没有非常的大,至少我觉得是如此...安装过程也很短,而装完了之后真正用的命令行文件只有一个:那就是Imagex.exe

其实这个工具的原理很简单,我猜想应该是:解包,然后查找和目的包中相同的全部文件,舍弃它们,然后把自己的多余文件增量的补充上去,所以这样想的话,它的语法也就非常好理解了.

所要做的工作步骤如下:
  1. 首先将各个ISO文件的resource目录下的install.wim都提取出来,为了方便操作,我们可以把它们改个名字放在一起,比如命名为"win7x86.wim","win7x64.wim"和"win2008r2.wim".
  2. 然后我选择的是以Win7x86为母板,这个原理也很简单了,也就是全部的文件都以这个x86版的为比较对象,然后以附加的方式把自己的文件附加上去.这样做的好处就是可以让64bit的版本可以在Win32环境下直接安装.但是我做的这个并没有做更详细的优化,因为这个母板我直接就采用了原始的install.wim而没有把对应的子版本抽取出来,比如说我们装习惯了U版,那绝对不会去转过头来去装Starter版的,如果你有洁癖,那么就运行这个命令来更新一下母板的版本吧"imagex /export e:\win7x86.wim 5 e:\win7x86_.wim "Windows 7 X86 旗舰版""这样就只剩下U版了.然后把老的Win7x86.wim删除掉,把Win7x86_.wim改名为Win7x86.wim作为母板.
  3. 然后挨个的往上集成吧.比如集成Win7x64版,命令行如下:imagex /export e:\win7x64.wim 4 e:\win7x86.wim "Windows 7 X64 旗舰版",注意这中间的5代表着Win7 x64版本的子版本号,这个和Win7x86的版本号有点不同的,因为只有x86才有starter版.你也可以用类似的办法把专业版之类的版本都集成上去,只需要再运行一点: imagex /export e:\win7x64.wim 3 e:\win7x86.wim "Windows 7 X64 专业版"
  4. 最后还是一样依样画葫芦的把Win 2008R2版集成进去,命令也完全一样: imagex /export e:\win2008r2.wim 1 e:\win7x86.wim "Windows 2008 R2 Standard版"
  5. 这样将全部集成完毕了之后的Wim文件(大概有4.5G左右)改名为install.wim,替换到原版的Win7x86.ISO文件中,同时删除ISO文件Source目录下的ei.cfg文件(不删除这个就只能装U版X86了)...
  6. 如果你这个第五步操作是用UltraISO来做的,那么你现在可以直接把这个刻录成DVD-9了...如果是拿RAR做的,那么全部解压出来,然后用个Imagex命令也可以让它变成启动盘.具体的我就不详述了,这里还是讲U盘..把全部的文件拷贝出来放在U盘的随便哪个文件夹里,我选择放在Win7文件夹内,然后单独的把boot文件夹剪切出来放在根目录下(这又是第二个未解决的事项了...),启动XORLDR,增加一个启动项目,将Win7目录下的bootmgr文件指定为启动文件,启动类型选择Win Vista和7启动的NTLDR.
  7. 接下来开始需要更改BCD的属性了.打开CMD,然后运行bcdedit /store H:\boot\bcd,(H:\是我的U盘的盘符)可以看到它现在的属性类似这样:
    Windows 启动管理器
    --------------------
    标识符                  {bootmgr}
    description             Windows Boot Manager
    locale                  en-US
    inherit                 {globalsettings}
    default                 {default}
    displayorder            {default}
    toolsdisplayorder       {memdiag}
    timeout                 30

    Windows 启动加载器
    -------------------
    标识符                  {default}
    device                  ramdisk=[boot]\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
    path                    \windows\system32\boot\winload.exe
    description             Windows Setup
    locale                  en-US
    inherit                 {bootloadersettings}
    osdevice                ramdisk=[boot]\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
    systemroot              \windows
    detecthal               Yes
    winpe                   Yes
    ems                     Yes

    而我们所需要做的工作是把device和osdevice的前面加上我们所添加的目录,方法如下:
    bcdedit /store H:\boot\bcd /set {default} device ramdisk=[boot]\Win7\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f} 
    bcdedit /store H:\boot\bcd /set {default} osdevice ramdisk=[boot]\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f} 
    记得保留花括号中的ID内容.
  8. 调整完成之后,把我们的U盘放进去检查一下,基本上就可以顺利的进入Windows7内置的WinPE 3了,但是有个很诡异的问题就是,里面的boot.wim启动无论如何都不正常...虽然成功的添加了X:\,但是任何文件均无法读取,这样直接导致系统启动了之后无法正确的找到你的驱动...不过还是有别的办法,那就是启动了之后不要选择安装Win7,而是选择进入系统修复工具,然后进入CMD,再找到你的U盘所在的盘符,进入对应的Source目录直接运行Setup.这样就跳过了这一步骤,经测试是可以正常安装的...当然了,这个问题还在研究之中,不知道能否彻底的解决...
至此,这个超大容量的U盘就被我直接用掉了5G的容量了...如果再把常用的工具放进去(比如Office),超越一半指日可待...不过不得不说...千万别感染病毒啊T^T

评论

此博客中的热门博文

远程记录OpenWRT日志

用OpenWRT打造自动翻墙路由器(详解篇)

Python中为什么要用is None来代替== None?