因为比较爱折腾,导致系统经常崩溃,也经常帮同学装机,就准备搞一个可以安装多个系统的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_image /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盘,如果成功了的话会放上来告诉大家的。