|
因为我一直使用Linux,硬盘上同时安装有 Windows 系统和 Linux 系统,一直使用 grub 0.97 引导各个操作系统。硬盘的第一个分区是 Linux 的 boot 分区,才100M,格式化成 xfs 文件系统格式,里面放置了 grub 0.97 启动的 stage 文件、menu.lst 文件、Linux 启动的内核、一个给grub引导的 DOS 2.88M 软盘镜像。还有很多空间,于是我想,把 Windows PE 也做个硬盘镜像,放到这个分区里面去引导。这样比安装到隐藏分区更安全,因为无论如何你在Windows下都看不到它的踪迹。
Linux 的 grub 0.97 可以识别各种文件系统格式的分区并且从里面读取文件,它支持的文件系统比 grub for dos 要多得多,比如 xfs、reiserfs、jfs 等,gnu grub 0.97 支持而 grub for dos 都不支持。而用过 linux 的人都知道,这些文件系统都比 Linux Ext2/Ext3 文件系统优秀,很多用 linux 的人都会选用这些文件系统,我个人最偏爱的是 xfs 文件系统。 所以为了读取 xfs 分区上的 WinPE 镜像,不能用 grub for dos,只能用原版的 gnu grub 0.97,也就是要把 grub 0.97 安装到硬盘的 mbr 上。这一点很简单,在 linux 下,打开终端,输入 grub,进入grub提示符后,依次输入:
root (hd0,0)
setup (hd0)
quit
这样就把grub 0.97装到了硬盘mbr上,而且指定grub读取硬盘第一分区上的启动文件。
然后就要用到 grub for dos 了,因为原版 gnu grub 0.97 没有虚拟盘的功能。gnu grub 0.97 读取并调用我们放在 xfs 分区上的 grub.exe,执行它,把启动权交给它,让他完成原版gnu grub无法完成的启动硬盘镜像的任务。具体做法如下:
1、制作包含WinPE的完整的硬盘镜像:
在linux终端中执行如下命令:
head -c 30m /dev/zero > WinPE.img
这样产生一个30M大小的文件。
qemu -fd0 DOS.img -hda WinPE.img -boot a
DOS.img 是一个可启动的软盘镜像,用qemu启动到DOS下对WinPE.img分区,格式化。只分一个区,格成fat16或fat32格式。
qemu -hda WinPE.img -cdrom xxxPE.iso -boot d
这一步用qemu启动xxxPE.iso这样一个可启动的PE的iso文件,启动后把WinPE.IS_、WINNT.XPE、NTLDR、NTDETECT.COM、LDRXPE这几个文件拷贝到WinPE.img里面的分区上。
关掉qemu,这样就制作好了包含WinPE的完整的硬盘镜像。
2、用 gnu grub 和 grub for dos 串联起来启动 Linux 分区上的 Window PE:
把grub for dos 中的 grub.exe 和上一步做好的 WinPE.img 一起拷贝到 xfs 分区根目录;
编辑 grub/menu.lst,添加如下内容:
title Microsoft Windows PE
kernel (hd0,0)/grub.exe --config-file="map --read-only (rd) (hd0); map --hook; chainloader (hd0,0)/ldrxpe; map --harddrives=1; rootnoverify (hd0)"
initrd (hd0,0)/WinPE.img
boot
保存,重启电脑,这样就可以在 gnu grub 0.97 的菜单上选择启动放置在 Linux 分区上的WinPE了。这个PE比安装到隐藏分区中的WinPE更隐藏。
最后,再补充说明一下:
grub for dos 虚拟盘功能在不带 --mem 参数时要求被虚拟的镜像文件在物理硬盘上连续存放不能有碎片,这个好办,格完新分区后一次性拷贝 WinPE.img 到新分区就办到了。xfs 分区是支持文件连续存放的。但是如果你的 linux 分区是 ext2 或 ext3 格式的分区,无论你如何拷贝都无法办到把 WinPE.img 在物理磁盘上连续存放,因为 ext2 和 ext3 文件系统是分块存储文件的,通常它都不把文件存储到连续的块上,这样只能用 --mem 参数才能把 WinPE.img 成功 map 成虚拟硬盘。因此,在ext2 或ext3 格式的 linux 分区上, grub/menu.lst 得改成下面这样才行:
title Microsoft Windows PE
kernel (hd0,0)/grub.exe --config-file="map --mem (rd) (hd0); map--hook; chainloader (hd0,0)/ldrxpe; map --harddrives=1; rootnoverify(hd0)"
initrd (hd0,0)/WinPE.img
boot
[ 本帖最后由 sxgpic 于 2007-4-9 09:14 PM 编辑 ] |
|