因为比较爱折腾,导致系统经常崩溃,也经常帮同学装机,就准备搞一个可以安装多个系统的U盘,网上关于Grub4dos安装在U盘的方法很多,但是 觉得Grub4dos的背景实在是不好看,所以决定用GRUB2,由于原来没有太多关于引导的知识,加上人比较笨,经过几个小时的百度、google,总 算是弄出来了,但是安装WIN XP还是只能用GRUB2引导进GRUB4DOS后安装 ,还没有发现更好的方法,现在把过程上传上来,方便和我一样的初学者学习。

先上个截图:

 

背景图片有一点奇怪,没关系,我们继续。

安装环境:Ubuntu

准备工具:1、GRUB2(如果需要安装WINDOWS,还需要Grub4dos)

               2、各种系统的ISO镜像

安装:

1、系统应该会有GRUB2,不用重新安装,不行的话就sudo apt-get install grub2确认一下。

2、终端输入sudo su

     输入密码

     fdisk -l

     查看你的U盘是哪个设备,这里放上我的结果

Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0003beba

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13       96256   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              13       14594   117122049    5  Extended
/dev/sda5              13        1228     9764864   83  Linux
/dev/sda6            1229        5955    37969596   83  Linux
/dev/sda7            8523       10954    19529728   83  Linux
/dev/sda8           10955       11203     1998848   82  Linux swap / Solaris
/dev/sda9           11203       14448    26061824   83  Linux
/dev/sda10          14448       14594     1169408   82  Linux swap / Solaris

Disk /dev/sdb: 8004 MB, 8004304896 bytes
255 heads, 63 sectors/track, 973 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004a222

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1         973     7815591    b  W95 FAT32

 

那么这里的/dev/sdb就是我的U盘了,不确定的朋友可以先拔出U盘查一次,再插上U盘查一次,确认一下。

如果你要安装win7,请确定你的U盘为NTFS格式。

如果你的分区没有激活,先运行

fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help):a

Partition number (1-4): 1

Command (m for help): w

 

3、挂载

mkdir /mnt

mount /dev/sdb1 /mnt

4、安装

注意,如果你想要安装win7的话,请先跳转到“配置”中的第4步,然后再执行下面的命令。

       grub-install --force --no-floppy --root-directory=/mnt /dev/sdb #注意,这里一定要写成sdb而非sdb1,否则不会重写MBR

5、到这里grub2已经安装好,但是这样是没有图形菜单,只能用命令行,还需要配置一 下,在/mnt/boot/grub/这个目录下新建一个grub.cfg。如果需要中文字体的话,还要到硬盘的/usr/share/grub/中复制 unicode.pf2到/mnt/boot/grub/目录下。

6、将你的iso镜像放入U盘中,不用解压,这里我是全部放入根目录下的。

配置:

1、主要就是针对grub.cfg文件的编写,首先是grub.cfg的开头部分编写

 

set default=0   #这里是默认选项,0就是第一个
set timeout= 10   #这里是默认等待时间
insmod fat  #加载fat模块,如果你的U盘是其他格式请对应更换,如insmod ntfs
search --set -f /winxp.iso  #搜索根目录下有winxp.iso的硬盘设定为root分区,你也可以改为你在U盘根目录下放置的文件,但注意这个文件其他硬盘的根目录不能有,其实可以不加这一行,为了保险我加上了
loadfont /boot/grub/unicode.pf2  #这里是设置字体文件,也就是前面我们拷贝的unicode.pf2
set gfxmode=1024x768  #设置分辨率
set gfxpayload=keep  #这一句不太清除,网上没有找到相关资料,加上保险
insmod gfxterm  #启用gfxterm模块,分辨率什么的,都靠它
insmod vbe  #加载vbe模块,作用不是很清楚,呵呵
terminal_output gfxterm  #将终端设置为gfxterm模式,也就是使上面的分辨率什么的生效

#以下是设置背景图片,不喜欢的朋友可以不用
insmod png  #开启png模块,比如你的图片是jpeg的,那就写成insmod jpeg,具体模块有没有到/boot/grub目录下查
background_p_w_picpath /boot/grub/111.png ; then  #指定背景图片的路径
set color_normal=black/black  #菜单中未选中项目的字体颜色
set color_highlight=magenta/black  #选中项目的字体颜色

 

2、引导live cd,这里我以Ubuntu 11.04为例,将

menuentry 'Ubuntu 11.04 live cd'  #项目标题
{
  loopback loop /ubuntu.iso  #建立回放设备,用loop来访问/ubuntu.iso的内容,可以理解为虚拟光驱
  linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/ubuntu.iso locale=zh_CN.UTF-8  #指定系统引导内核,我打红的地方设置为你的ISO文件中系统引导内核的位置,locale=zh_CN.UTF-8为设置为中文,部分live cd可能不支持
  initrd (loop)/casper/initrd.lz  #同样,这里设置为ISO文件中的initrd文件系统位置
    }

3、引导安装windows xp或者引导win pe,这个比较麻烦,我在这里卡了好几个小时,最终还是只有选择先引导grub4dos,再由grub4dos来引导xp的iso,如果大家有更好的办法,请告诉我 。grub4dos以及中文字体我为大家打包好了,大家要是可怜我的话就从这里下载吧,我实在是太穷了,地址

http://down.51cto.com/data/213566

下载好后我们提取fonts,grub4dos文件夹中的menu.lst以及chinese文件夹中的grub.exe,grldr放到U盘即可,这里我是放到根目录下的。

先编辑首先编辑U盘 中/boot/grub中的grub.cfg,让grub2引导grub4dos

 

menuentry '加载GRUB4DOS'
{
  linux /grub.exe  #这里改为你的grub.exe的路径

}

 

然后我们编辑再来编辑menu.lst,先放上开头:

#注意,以下都是放入menu.lst的命令,而非grub.cfg

 

color black/cyan yellow/cyan   #颜色
timeout 30   #等待时间
default /default   #默认选项
find --set-root /winxp.iso   #同grub2的search  -set -f其实可以去掉这一行,为了保险,我加上
fontfile /fonts   #设置字体文件,改为你的fonts文件路径

 

 

然后是引导windows的iso文件,这里我以windows xp为例

 

title 安装Windows XP深度技术版
fallback 1  #如果执行错误返回第1项
find --set-root /winxp.iso
map --mem /winxp.iso (hd32)   #用map将winxp.iso建立为虚拟内存盘(hd32),内存怎么也有1G吧,要是没有的话就找个精简版的XP吧。
map --hook   #使map命令立即生效
chainloader (hd32)  #读入(hd32)的引导记录

 

4、WIN7的安装需要借助WINDOWS,这里我是在虚拟机下进行的,先CMD下进入WIN7镜像下的BOOT文件夹,执行

bootsect.exe /nt60 F:  #F:是我的U盘符

然后回到Ubuntu,终端执行:

sudo dd if=/dev/sdb of=/winboot.bin bs=512 count=1

将U盘的启动扇区信息保存在winboot.bin中,然后将winboot.bin拷贝到U盘根目录,将win7的ISO镜像解压到U盘根目录。

如果你是刚才跳过来的朋友可以跳回去了,一会回来接着看下面。

接着编辑U盘下/boot/grub中的grub.cfg,加入

menuentry ‘安装WINDOWS 7’

{
insmod ntfs
chainloader /winboot.bin  #读入刚才保存的用bootsect建立的引导信息
}

 

5、重启进入BIOS设置启动顺序U盘第一位,即可。


结语:由于我是初学grub,可能有很多语句的解释不对,还望大家见谅,建议大家都先在虚拟机下进行测试,这样调试速度也比较快。

         再建议,如果是要安装winxp的朋友强烈建议先进入win pe后再ghost进行安装,因为加载win pe比整个XP碟要省时省内存得多,而且国内的winxp的“XXXX技术版““XXXX美化版“”XXXX快速装机版“实在太多,保不准有哪一个可能不 行。如果是安装win7的也建议先进入支持win7安装的win pe后再进行安装。

         我现在在试验能不能用BURG来打造这样一个U盘,如果成功了的话会放上来告诉大家的。