装系统不求人——量身定制自己的万能启动盘

这一篇是写给有兴趣自己折腾启动盘的读者看的,没兴趣的同学直接无视它吧~ 。◕‿◕。

万能启动盘的基本制作方法和附件下载,请参考:

《装系统不求人——利用Grub4dos打造万能启动盘》
http://www.paincker.com/sysinst-create-bootable-disk

基本使用方法请参考:

《装系统不求人——万能启动盘使用简介》
http://www.paincker.com/sysinst-bootable-disk-manual

万能启动盘原理浅析

grub4dos是一个功能很全的BootLoader,也是我们的启动盘中最核心的东西。BootLoader之间可以互相加载。在我们的万能启动盘中:

  • 启动盘使用grub4dos启动ISO镜像和IMG镜像,实际上这些镜像本身就是可启动的,可以直接烧录到U盘中成为独立的启动盘(可使用UltraISO软件实现),自身也包含了BootLoader。

  • 而我们则是利用grub4dos加载了这些镜像的BootLoader,间接启动镜像,从而实现了一个启动盘中集成多个启动盘的效果。

  • grub4dos还可以直接加载硬盘上的BootLoader,从而我们的启动盘中有了“从硬盘启动”的选项,选中后会直接跳转到硬盘启动电脑。

  • 可以使用grub4dos加载Windows的BootLoader,从而启动Windows。同样,还可以利用grub4dos引导Linux系统镜像,从而安装Linux系统,在之后的文章中会有用到。

  • 通过添加想要的ISO和IMG镜像,例如Win8 PE,再修改万能启动盘中grub4dos的配置文件menu.lst,启动盘的功能可以无限扩展下去。

  • 也正因此,所以它被称为“万能启动盘”,果然是功能强大,十八般武艺样样精通啊~

定制Message文件

可以利用附件中的MsgDiyer工具自己制作message文件(message文件在U盘的boot文件夹里面)。message文件中包含了背景图片、中文字体、菜单支持等内容。

下载各种系统的镜像文件

这个我就不多说了,可以在网上找找,比如Win8 PE ISO镜像,保存到U盘~

前面说了,这些镜像本身也是可启动的。如果有兴趣,你可以从VirtualBox虚拟机直接启动Win8PE的ISO镜像,还可以用UltraISO软件将其直接烧写进U盘,做成Win8 PE启动盘。当然这会破坏万能启动盘的grub4dos,从而降级成为只有Win8 PE一项功能的启动盘。

附:UltraISO烧写镜像到U盘的方法简介

  1. 下载附件中的UltraISO并以管理员身份运行,并选择菜单-文件-打开,选中可启动的ISO文件即可打开。再选择菜单-启动-写入硬盘映像,如图。

    附件下载链接:
    http://pan.baidu.com/s/1c08NJs0

  2. 硬盘驱动器中选择U盘,写入方式一般用USB-HDD+,然后点击写入即可(写入前会格式化U盘,注意备份数据)。

修改menu.lst文件

Grub4dos默认加载menu.lst作为配置文件,用于输出选项菜单并启动相应的系统。本文给出一些menu.lst的用法示例,更具体的写法可以参考附件中grub-tools启动盘工具包中的《grub4dos初级教程》。

一个完整的menu.lst参考:

  1. timeout 20

  2. default 0

  3. gfxmenu (hd0,0)/boot/message

  4. title [1] 启动Win7PE精简网络版

  5. map (hd0,0)/boot/imgs/win7pe.iso (hd32)

  6. map --hook

  7. chainloader (hd32)

  8. boot

  9. title [2] 启动Ghost 11.0.2

  10. map --mem (hd0,0)/boot/imgs/ghost.img (fd0)

  11. map --hook

  12. chainloader (fd0)+1

  13. rootnoverify (fd0)

基本语法

  1. 使用#开头可作为注释
  2. timeout 20表示等待20s启动默认项
  3. default 0表示默认启动第一项
  4. gfxmenu (hd0,0)/boot/message加载message文件
  5. 每一条启动项菜单以title开始,表示标题,后面是要执行的操作。

文件路径写法

grub4dos使用的文件路径使用的是Linux风格的写法。

完整路径示例:(hd0,0)/boot/message,表示启动盘中boot子目录下的message文件。

  1. 设备名cd表示光驱(或USB-CDROM),fd表示软驱(或USB-FDD),hd表示硬盘(或USB-HDD)。

  2. 设备编号。每种类型的设备按照识别的顺序,编号从0开始递增。grub4dos自身所在的设备最先被识别,所以这里U盘启动盘为hd0

  3. 分区编号。分区编号可以参考《装系统不求人——硬盘的秘密》

  4. 子目录和文件

  5. 设备名、设备编号、分区编号,三者组成完整的分区,例如 (hd0,0)

  6. 如果路径中没有指定分区,则默认以root作为分区。

  7. 通过root指令可以指定root分区;还可以使用find --set-root指令自动指定root分区。例如下面的三段代码:

    1. #直接加载分区(hd0,0)中的menu2.lst文件

    2. configfile (hd0,0)/menu2.lst

    3. #指定root分区为(hd0,0)

    4. root (hd0,0)

    5. #加载root分区下的menu2.lst文件

    6. configfile /menu2.lst

    7. #按编号顺序,搜索每个分区根目录是否包含menu2.lst文件,并将最先找到的分区设为root

    8. find --set-root (hd0,0)

    9. #加载root分区下的menu2.lst文件

    10. configfile /menu2.lst

  • 启动ISO光盘镜像

    1. title 启动ISO光盘镜像:Win7PE
    2. map (hd0,0)/boot/imgs/win7pe.iso (hd32)
    3. map --hook
    4. chainloader (hd32)
    5. boot
  • 启动IMG软盘镜像

    1. title 启动IMG软盘镜像:Ghost 11.0.2
    2. map --mem (hd0,0)/boot/imgs/ghost.img (fd0)
    3. map --hook
    4. chainloader (fd0)+1
    5. rootnoverify (fd0)
  • 从硬盘启动

    1. title 从硬盘启动
    2. rootnoverify (hd1)
    3. chainloader +1
  • 加载其他配置文件

    1. title 加载配置文件:menu2.lst
    2. configfile (hd0,0)/menu2.lst
  • 进入Grub命令行

    1. title 进入GRUB命令行
    2. commandline
  • 加载BootMgr,从而启动Win 7/8

    BootMgr是Windows NT6.x系统的BootLoader,Windows NT6.x包括Win 7/8/Vista等

    这里的find --set-root /bootmgr语句,会按编号顺序,自动在所有分区根目录搜索bootmgr文件,如果找到,则将最先找到的分区设置为root

    之后所有没有指定分区的文件路径,就默认在root分区,所以chainloader /bootmgr语句,就是用chainloader指令启动了root分区下的bootmgr文件,也就是Win7/8的BootLoader。

    1. title 启动Win Vista/7/8
    2. find --set-root /bootmgr
    3. chainloader /bootmgr
    4. boot
  • 加载NTLDR,从而启动Win XP

    NTLDR是Windows NT5.x系统的BootLoader,Windows NT5.x包括Win XP等

    1. title 启动Win XP
    2. find --set-root /ntldr
    3. chainloader /ntldr
    4. boot