Grub4dos for WinPE 启动菜单

今天搞了整天 Grub + WinPE,略有小成,在这里分享一下心得,哈哈。我的机子一直用的 Windows 2000,使用至今基本不知重装为何物,且不说是好是坏,至少也是事出有因吧。

一开始当然是 Ghost,标本兼治就是感觉折腾成本大了点。然后就是用 DOS 拉,大事化小就是只能删删病毒换换文件等的简单操作。接着有了 FAT32 进化为 NTFS,我们也有了 DOS4NTFS,不过 DOS 还是只能从 FAT32 格式的盘启动加载……

Grub 是 Linux 的一个载入程序,正如 NTLDR 之于 Windows NT/2K/XP。它就是为多重引导而生,而且适用于多种平台,这里说的 Windows 下的 Grub 就是 Grub4dos。自从知道了这个短小精悍的东东,它就跟我的系统共存亡了。这样在 NTFS 格式下,在 boot.ini 里添加一个 grldr 的选项,然后编辑它的启动菜单把类似 DOS.IMG 之类的文件加载进去,就算不是 FAT32 也没问题了。

可能是介于 DOS 的过时,微软在 2002 年发布了 WinPE(Windows PreInstallation Environment)预安装环境,相当于迷你的急救 XP 系统吧。目前市面上流传的较广的有老毛桃的撒手不管版、深山红叶工具箱等……其实五花八门的虽各小有见长,但基本都是大同小异,要么你多个工具,要么我多个驱动。最主要的应用当然是市面那些 DIY 的系统安装光盘,例如什么番茄花园什么猪猪猫什么深度技术等。

我原来用的是 Grub/DOS(grldr),后来装了老毛桃 WinPE 有加密功能的硬盘版(mtldr),但是折腾了很久还是无法识别 NVIDIA 的网卡驱动,而且一些功能报错(例如 MMC),外挂又是打包无法直接编辑;后来发现最帅的菜鸟专用启动光盘(RXPE.LDR)竟然能够识别 NV 网卡,但这个版本的其他功能却是非常简陋;所以最后通过深山红叶 WinPE(drldr) 的外挂包把 NV 的驱动包加载到老毛桃的硬盘版里。

不管那个版本的 WinPE,光盘版也好,硬盘版也好,启动菜单几乎都是用 grub 做的;而且多个版本都是指定了各自的 Loader,像什么 mtldr、avldr、pxldr 等,特别是很多都在 C 盘根目录放置了很多根本可以无须放根目录的东东,容易出错且一但有问题难排错。既然都是用 Grub 来做,那或许应该可以用 Grub 来统一引导启动?——其实非常简单!

先说说老毛桃 WinPE 默认的安装目录为 C:\MiniPE,默认启动文件为 C:\mtldr。正文开始:

首先,在 C:\boot.ini 里加上一行:C:\grldr=”Start WinPE with Grub4DOS”

然后,下载最新版的 grub4dos-0.4.4-2008-07-21.zip,把解压出来的 grldr 放到 C  盘根目录。用 grldr 内置菜单编辑工具 把 grldr 的启动菜单读取出来,代码为:

default 0
timeout 1
fallback 1

title find /menu.lst
find –set-root –ignore-floppies /menu.lst
configfile /menu.lst

title find /boot/grub/menu.lst
fallback 2
find –set-root –ignore-floppies /boot/grub/menu.lst
configfile /boot/grub/menu.lst

title find /grub/menu.lst
fallback 3
find –set-root –ignore-floppies /grub/menu.lst
configfile /grub/menu.lst

title commandline
commandline

title reboot
reboot

title halt
halt

可以看出 grldr 会去几个位置找 menu.lst,优先放置于根目录,根目录没找到 menu.lst,就会去旧版本的位置 /boot/grub/menu.lst 找。用 GRUB 菜单密码 MD5 工具 得到某密码如 123456 的 MD5 = $1$8$pSqK8hjjgmdb73MJlsrnj1,将上面这段内容改为下面的代码并保存到刚刚的 grldr:

default 0
timeout 0
fallback 1
title WinPE with Grub4DOS
password –md5 $1$8$pSqK8hjjgmdb73MJlsrnj1
find –set-root –ignore-floppies /menu.lst
configfile /menu.lst
title Back
rootnoverify (hd0,0)
makeactive
chainloader +1

这样 ntldr 加载 boot.ini 后,当我们选择“Start WinPE with Grub4DOS”时,grldr 就会出现上面我们编辑好的菜单(因为延时 0 秒所以基本不可见),因为默认是第 0 个选项,所以来到输入密码的界面;如果密码输入错误或菜单文件放置有误,则会 fallback 回第 1 个选项(即回到第一块硬盘的第一个分区也就是 C 盘)。当正确输入 123456 并菜单放置正确后,grldr 会自动找到并加载我们编辑好的新的菜单,/menu.lst

color black/cyan yellow/cyan
timeout 20
default 0

title 00. Start WinPE (LaoMaoTao)
find –set-root /boot/winpe.iso
map –mem /boot/winpe.iso (hd32)
map –hook
chainloader (hd32)
boot

title 01. Start Power WinPE (Data/File)
find –set-root /boot/powerpe.iso
map –mem /boot/powerpe.iso (hd32)
map –hook
chainloader (hd32)
boot

title 02. Start WinPE (Network/Kaspersky)
find –set-root /boot/reboot.iso
map –mem /boot/reboot.iso (hd32)
map –hook
chainloader (hd32)
boot

title 03. Start Rescue DOS (MSDOS v7.1)
find –set-root /boot/rdos.img
map –mem /boot/rdos.img (fd0)
map –hook
chainloader (fd0)+1
rootnoverify (fd0)

title 04. Start Recovery DOS (Ghost/DishGenis)
find –set-root /boot/ghost.img
map –mem /boot/ghost.img (fd0)
map –hook
chainloader (fd0)+1
rootnoverify (fd0)

title 05. Start Ram Windows XP
find –set-root –ignore-floppies /boot/ramxp/ramxp.dsk
kernel /boot/ramxp/memdisk raw
initrd /boot/ramxp/ramxp.dsk

title 06. Load MemTest-86 Program
kernel (hd0,8)/boot/memtest.bin

title 07. Load from other Menu.lst
find –set-root /grldr
configfile /boot/menu.lst

title 08. Find/Load Windows NT/2K/XP (NTLDR)
find –set-root /ntldr
chainloader /ntldr

#title Find/Load Windows 9x/Me (IO.SYS)
#find –set-root /io.sys
#chainloader /io.sys

title 09. Boot from CDROM
find –set-root /boot/sbootmgr.dsk
map –mem /boot/sbootmgr.dsk (fd0)
map –hook
chainloader (fd0)+1
rootnoverify (fd0)

title 10. Boot from HardDisk #1 (HD0,0)
root (hd0,0)
chainloader +1

title 11. Boot from HardDisk #2 (HD1,0)
root (hd1,0)
chainloader (hd1,0)+1

#title (?) Grub Command Line
#commandline

title (!) Reboot
reboot

title (x) Shutdown
halt

title <=== Back ====
rootnoverify (hd0,0)
makeactive
chainloader +1

更新了下:

  1. 把 boot 目录放到其他盘(C 盘根目录就只有 grldr 和 menu.lst 两个文件了)。预防万一 C 盘没拉,辛苦制作的硬盘版启动文件还在。
  2. 把老毛桃和深山红叶和最帅菜鸟的 ISO 直接加载;他们的外挂则是放置在 ISO 所在分区:/MiniPE、/BOOT、/RXPF 目录下——经过多次测试能完美解决 grub 加载 ISO 无法使用外置程序(其实无论外置还是内置,现在都是OK的)的问题。
  3. 加了个 RamXP,哈哈,目录任意,效果挺不错。其实没什么用,就试下效果。dsk 格式的文件挺不错。找不到有什么编辑工具。

菜单的样子大概如下图(VMware 下的调试状态,未一一对应以上菜单代码):

grub4dos with winpe

高级应用:在这个界面,高亮你要选择的选项后:按“b”键或回车启动;按“e”键可以进入编辑状态;按“c”键进入命令行模式。进入选项编辑状态后,还可以继续“e”进入内容编辑状态,按“Esc”取消修改;按“Enter”应用修改。——其实这些已经是相当于 Linux/Ubuntu 的启动了。

这里还有个问题:在 boot.ini 菜单可以添加 C:\bootsect.cdr=”Boot from CDROM”,利用 512 字节的光驱引导文件 bootsect.cdr 来启动光驱,但这个文件在 grub4dos 无法应用。甚至用“scdrom –install”和“scdrom –bootcd”都无法解决,报无法识别。算了,留点缺陷美才是完美!?

相关连接:

grub4dos普及之grub启动光盘制作入门
http://bbs.myjxtx.com/read.php?tid=62737

WINPE多合一简单集成教程
http://bbs.wuyou.com/viewthread.php?tid=100737

——将本页面分享到——

One thought on “Grub4dos for WinPE 启动菜单

  1. Link

    最新下载:http://download.gna.org/grub4dos/