
grub2 基础教程(续)
- jxhow
- 帖子: 5859
- 注册时间: 2008-10-24 22:02
- 来自: 浙江
- smallapple
- 论坛版主
- 帖子: 7868
- 注册时间: 2009-03-28 15:12
Re: grub2配置文件详解及部分命令用法介绍
五、grub2几种修复方法
1. 双系统重装windows造成grub2被改写的修复
方法一 grub4dos0.4.4
在Windows启动项上加上grub4dos启动(不多说了,看置顶贴),重启选择进入grub,在命令行下输入(/boot单独分区的去掉 /boot)
进入grub2菜单,进入系统后再执行
方法二 进入Livecd 后修复(感谢billbear)
这时就可以调出 /boot/grub/grub.cfg,修改相应uuid,
改到命令行下
grub>insmod /boot/grub/linux.mod
grub>set root=hd?,?
grub>linux /boot/vmlinuz-*** root=/dev/sd??
grub>initrd /boot/initrg.img-****
进入系统
hd?,? 是grub文件所在分区 sda? 是/分区。
3. grub模块和配置文件grub.cfg受损无法启动时修复
Livcd启动进入试用
1. 双系统重装windows造成grub2被改写的修复
方法一 grub4dos0.4.4
在Windows启动项上加上grub4dos启动(不多说了,看置顶贴),重启选择进入grub,在命令行下输入(/boot单独分区的去掉 /boot)
代码: 全选
grub>find --set-root /boot/grub/core.img
grub>kernel /boot/grub/core.img
grub>boot
代码: 全选
sudo grub-install /dev/sd?
2. 由于root分区uuid改变造成的不能正常启动,只能进入grub rescue模式的修复sudo -i
mount 你的根分区 /mnt
mount 你的/boot 分区 /mnt/boot #如果有的话
#挂载你其他的分区,如果有的话
# 重建grub到sda的mbr
grub-install --root-directory=/mnt /dev/sda
代码: 全选
grub rescue>set
grub rescue>prefix=(hd?,?)/grub
grub rescue>root=hd?,?
grub rescue>set root=hd?,?
grub rescue>set prefix=(hd?,?)/boot/grub
grub rescue>set
grub rescue>root=hd?,?
grub rescue>prefix=(hd?,?)/boot/grub
grub rescue>insmod /boot/grub/normal.mod
grub rescue>normal
改到命令行下
grub>insmod /boot/grub/linux.mod
grub>set root=hd?,?
grub>linux /boot/vmlinuz-*** root=/dev/sd??
grub>initrd /boot/initrg.img-****
进入系统
hd?,? 是grub文件所在分区 sda? 是/分区。
3. grub模块和配置文件grub.cfg受损无法启动时修复
Livcd启动进入试用
sudo -i
mount 你的根分区 /mnt
mount 你的/boot 分区 /mnt/boot #如果有的话
# 挂载你其他的分区,如果有的话
# 重建grub到sda的mbr
grub-install --root-directory=/mnt /dev/sda
# 重建grub.cfg
mount --bind /proc /mnt/proc
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
chroot /mnt update-grub
umount /mnt/sys
umount /mnt/dev
umount /mnt/proc
上次由 smallapple 在 2009-09-15 20:50,总共编辑 4 次。
- photor
- 论坛版主
- 帖子: 11004
- 注册时间: 2008-04-26 12:41
Re: grub2配置文件详解及部分命令用法介绍
前有比尔熊,后有小苹果,坛子里的grub高手是越来越多了啊 

- smallapple
- 论坛版主
- 帖子: 7868
- 注册时间: 2009-03-28 15:12
Re: grub2配置文件详解及部分命令用法介绍
六、 一些补充说明
1. chainloader
grub2将支持 chainloader /file 的用法。
目前支持的文件只有 grub2 的 boot.img 和 grub4dos 的grldr 和 grub.exe。希望正式版能支持 ntldr bootmgr peldr 等文件。
2. drivemap
drivemap 兼容 grub 的 map,主要用于只能从 (hd0) 引导启动的系统如 win2000 xp 2003,可以象 map 用法一样如:
menuentry "Windows XP" {
insmod ntfs
drivemap (hd0) (hd1)
drivemap (hd1) (hd0)
set root=(hd1,1)
chainloader +1
}
实际上 drivemap 有了更方便的用法:
menuentry "Windows XP" {
insmod ntfs
set root=(hd1,1)
drivemap -s (hd0) ${root}
chainloader +1
}
3. grub2 引导软盘img镜像启动
比如要加载(hd1,1)根目录下的 a.img 镜像,先把 memdisk 从 memdisk.gz 中解压出来,用法是:
linux (hd1,1)/memdisk #镜像文件超过2.88M要加上 c=* h=* s=*
initrd (hd1,1)/a.img
boot
现在有bug,加载memdisk会自动重启,beta2还没修正。
目前只学习到这些,如有新内容以后再补充。
希望各位XDJM纠错和补充,以方便准备使用grub2的朋友。
1. chainloader
grub2将支持 chainloader /file 的用法。
目前支持的文件只有 grub2 的 boot.img 和 grub4dos 的grldr 和 grub.exe。希望正式版能支持 ntldr bootmgr peldr 等文件。
2. drivemap
drivemap 兼容 grub 的 map,主要用于只能从 (hd0) 引导启动的系统如 win2000 xp 2003,可以象 map 用法一样如:
menuentry "Windows XP" {
insmod ntfs
drivemap (hd0) (hd1)
drivemap (hd1) (hd0)
set root=(hd1,1)
chainloader +1
}
实际上 drivemap 有了更方便的用法:
menuentry "Windows XP" {
insmod ntfs
set root=(hd1,1)
drivemap -s (hd0) ${root}
chainloader +1
}
3. grub2 引导软盘img镜像启动
比如要加载(hd1,1)根目录下的 a.img 镜像,先把 memdisk 从 memdisk.gz 中解压出来,用法是:
linux (hd1,1)/memdisk #镜像文件超过2.88M要加上 c=* h=* s=*
initrd (hd1,1)/a.img
boot
现在有bug,加载memdisk会自动重启,beta2还没修正。
目前只学习到这些,如有新内容以后再补充。
希望各位XDJM纠错和补充,以方便准备使用grub2的朋友。

-
- 帖子: 3681
- 注册时间: 2008-05-03 23:42
- missing
- 帖子: 1470
- 注册时间: 2008-03-28 20:52
- 系统: QNX
-
- 帖子: 817
- 注册时间: 2008-11-13 16:03
Re: grub2配置文件详解及部分命令用法介绍(更新到19楼)
好强大啊,学习了
- smallapple
- 论坛版主
- 帖子: 7868
- 注册时间: 2009-03-28 15:12
- smallapple
- 论坛版主
- 帖子: 7868
- 注册时间: 2009-03-28 15:12
Re: grub2 基础教程(更新到19楼)
再加点料
续19楼
4. 辛苦修改的grub.cfg在upate-grub后被打回原形,怎么办?
其实,grub不用修改grub.cfg,只要把个性化配置写入 /etc/default/grub 和 /etc/gurb.d下的脚本文件,以后不管升级内核或者是升级grub所执行的update-grub,所创建的grub.cfg都会如你所愿。
先看下 /etc/default/grub,一般可能要修改的是这两处:
GRUB_DEFAULT=0 -----> 设定默认启动项,按需要修改为1, 2, ...
GRUB_TIMEOUT=10 ------->设定倒计时时间,默认10秒,一般改为3-5秒就够了。
再看下 /etc/grub.d文件夹下的什么东东:
00_header 05_debian_theme 10_linux 20_memtest86+ 30_os-prober 40_custom README
前面这五个脚本对应grub.cfg上的各个部分,怎样修改这些脚本文件才能保证不会破坏update-grub的运行,又能让grub.cfg符合你的意愿呢?其实很简单,只要找到
cat << EOF
********
********
********
EOF
这类语句,EOF中间的文本会直接写入grub.cfg中相应位置,所以个性化的语句添加在这地方就可以了。
00_header 可供修改的有两地方
cat << EOF
load_env
set default=${GRUB_DEFAULT} <----- 这里根据 /etc/default/grub中default变量设定,不用修改
if [ \${prev_saved_entry} ]; then
saved_entry=\${prev_saved_entry}
save_env saved_entry
prev_saved_entry=
save_env prev_saved_entry
fi
insmod jpeg <---------这地方加入要加载的模块,如图片支持,或系统格式支持 insmod ntfs 和 insmod fat 等
insmod png <---------
EOF
另一个在最后
cat << EOF
set timeout=${GRUB_TIMEOUT} <------- timeout 根据上面 /etc/default/grub中的timeout 变量设定,这里不用改
background_image (hd0,7)/boot/images/012.jpg <----------这里背景图片的绝对路径
EOF
05_debian_theme 修改背景颜色
cat << EOF
set menu_color_normal=white/black <--------
set menu_color_highlight=yellow/black <------- 前面字体颜色可自定,后面背景一定要设为black,不然背景色会挡住背景图片。
EOF
10_linux 这部分是自动搜索当前系统,建立当前系统的启动菜单,包括系统头,内核等信息,不要随便修改,要使用个性菜单名,比如中文菜单,可修改这里,其余地方不要做修改:
cat << EOF
menuentry "启动 $1" { <---------在 双引号 " " 和 变量 $1 这间加入个性文字,或直接把 变量$1 改为固定字符比如 Ubuntu Karmic
EOF
if [ "x$3" = "xquiet" ]; then
cat << EOF
set quiet=1
EOF
20_memtest86+ 添加内存测试启动项,可做修改的地方:
cat << EOF
menuentry "Memory test (memtest86+)" { <------可以修改为中文菜单如 menuentry "内存测试"{ ,双引号必须是英文字符
linux16 $MEMTESTPATH
}
# 下面第二个菜单项可删除
menuentry "Memory test (memtest86+)"
linux16 $MEMTESTPATH *********
}
EOF
30_os-prober 查找其他分区中存在的系统并建立菜单项,依次为 windows >> linux >> macos,这里不必修改。
或根据自己的系统修改
menuentry "${LONGNAME} (on ${DEVICE})" <-------把引号中的变量改为固定,如 windows xp ,vista 或 linux , fedora 之类的菜单项。
40_custom 自定义启动项,按菜单标准格式添加即可,update-grub后会自动添加到grub.cfg上,如:
menuentry "启动 Veket"{
set root=(hd0,8)
linux /veket/vmlinuz root=/dev/ram0 PMEDIA=hd
initrd /veket/initrd.gz
}
menuentry "启动 CDLinux"{
set root=(hd0,8)
linux /CDlinux/bzImage root=/dev/ram0 vga=791 CDL_LANG=zh_CN.UTF-8
initrd /CDlinux/initrd
}
menuentry "启动 Grub4Dos"{
set root=(hd0,8)
linux /grub.exe
}
把各项修改后保存,然后
sudo update-grub
cat /boot/grub/grub.cfg
看看配置文件是不是和你想的一样了。
不一样??? 再改,再 sudo update-grub


续19楼
4. 辛苦修改的grub.cfg在upate-grub后被打回原形,怎么办?
其实,grub不用修改grub.cfg,只要把个性化配置写入 /etc/default/grub 和 /etc/gurb.d下的脚本文件,以后不管升级内核或者是升级grub所执行的update-grub,所创建的grub.cfg都会如你所愿。
先看下 /etc/default/grub,一般可能要修改的是这两处:
GRUB_DEFAULT=0 -----> 设定默认启动项,按需要修改为1, 2, ...
GRUB_TIMEOUT=10 ------->设定倒计时时间,默认10秒,一般改为3-5秒就够了。
再看下 /etc/grub.d文件夹下的什么东东:
00_header 05_debian_theme 10_linux 20_memtest86+ 30_os-prober 40_custom README
前面这五个脚本对应grub.cfg上的各个部分,怎样修改这些脚本文件才能保证不会破坏update-grub的运行,又能让grub.cfg符合你的意愿呢?其实很简单,只要找到
cat << EOF
********
********
********
EOF
这类语句,EOF中间的文本会直接写入grub.cfg中相应位置,所以个性化的语句添加在这地方就可以了。
00_header 可供修改的有两地方
cat << EOF
load_env
set default=${GRUB_DEFAULT} <----- 这里根据 /etc/default/grub中default变量设定,不用修改
if [ \${prev_saved_entry} ]; then
saved_entry=\${prev_saved_entry}
save_env saved_entry
prev_saved_entry=
save_env prev_saved_entry
fi
insmod jpeg <---------这地方加入要加载的模块,如图片支持,或系统格式支持 insmod ntfs 和 insmod fat 等
insmod png <---------
EOF
另一个在最后
cat << EOF
set timeout=${GRUB_TIMEOUT} <------- timeout 根据上面 /etc/default/grub中的timeout 变量设定,这里不用改
background_image (hd0,7)/boot/images/012.jpg <----------这里背景图片的绝对路径
EOF
05_debian_theme 修改背景颜色
cat << EOF
set menu_color_normal=white/black <--------
set menu_color_highlight=yellow/black <------- 前面字体颜色可自定,后面背景一定要设为black,不然背景色会挡住背景图片。
EOF
10_linux 这部分是自动搜索当前系统,建立当前系统的启动菜单,包括系统头,内核等信息,不要随便修改,要使用个性菜单名,比如中文菜单,可修改这里,其余地方不要做修改:
cat << EOF
menuentry "启动 $1" { <---------在 双引号 " " 和 变量 $1 这间加入个性文字,或直接把 变量$1 改为固定字符比如 Ubuntu Karmic
EOF
if [ "x$3" = "xquiet" ]; then
cat << EOF
set quiet=1
EOF
20_memtest86+ 添加内存测试启动项,可做修改的地方:
cat << EOF
menuentry "Memory test (memtest86+)" { <------可以修改为中文菜单如 menuentry "内存测试"{ ,双引号必须是英文字符
linux16 $MEMTESTPATH
}
# 下面第二个菜单项可删除
menuentry "Memory test (memtest86+)"
linux16 $MEMTESTPATH *********
}
EOF
30_os-prober 查找其他分区中存在的系统并建立菜单项,依次为 windows >> linux >> macos,这里不必修改。
或根据自己的系统修改
menuentry "${LONGNAME} (on ${DEVICE})" <-------把引号中的变量改为固定,如 windows xp ,vista 或 linux , fedora 之类的菜单项。
40_custom 自定义启动项,按菜单标准格式添加即可,update-grub后会自动添加到grub.cfg上,如:
menuentry "启动 Veket"{
set root=(hd0,8)
linux /veket/vmlinuz root=/dev/ram0 PMEDIA=hd
initrd /veket/initrd.gz
}
menuentry "启动 CDLinux"{
set root=(hd0,8)
linux /CDlinux/bzImage root=/dev/ram0 vga=791 CDL_LANG=zh_CN.UTF-8
initrd /CDlinux/initrd
}
menuentry "启动 Grub4Dos"{
set root=(hd0,8)
linux /grub.exe
}
把各项修改后保存,然后
sudo update-grub
cat /boot/grub/grub.cfg
看看配置文件是不是和你想的一样了。
不一样??? 再改,再 sudo update-grub

- smallapple
- 论坛版主
- 帖子: 7868
- 注册时间: 2009-03-28 15:12
Re: grub2 基础教程(更新到19楼)
5.问: 我用的是ubuntu 和windows 双系统,怎样让系统默认为从 windows 启动?
当然有人会说,修改/etc/default/grub中的GRUB_DEFAULT=? 改为windows 相应的数字就得了。
可是这样有个问题,虽然可默认从windows 启动,可启动项在中间,看起来总觉得不爽,而且如果更新了内核,又想保留旧内核以备万一,这样windwos菜单项位置又不对了,还得再改default,删除旧内核后又得改default,
如果直接把grub.cfg中的windows菜单项摆到最前面,update-grub又会复原,
怎么办???
其实还是改 /etc/grub.d 中的脚本文件最简单。
看看这几个文件名都是以数字开头,这确定了在 update-grub 时各文件内容被执行的顺序,我们只要把 30_os-prober 这个文件名的 30 改为 05到10之间的数字即可(没多少可选 06 07 08 09 取个中间 08吧),改为 08_os-prober,好了,再执行
sudo update-grub
cat /boot/grub/grub.cfg
看看windows 选项是不是排在第一位了,不用改default了吧。
当然有人会说,修改/etc/default/grub中的GRUB_DEFAULT=? 改为windows 相应的数字就得了。
可是这样有个问题,虽然可默认从windows 启动,可启动项在中间,看起来总觉得不爽,而且如果更新了内核,又想保留旧内核以备万一,这样windwos菜单项位置又不对了,还得再改default,删除旧内核后又得改default,

如果直接把grub.cfg中的windows菜单项摆到最前面,update-grub又会复原,

怎么办???


其实还是改 /etc/grub.d 中的脚本文件最简单。

看看这几个文件名都是以数字开头,这确定了在 update-grub 时各文件内容被执行的顺序,我们只要把 30_os-prober 这个文件名的 30 改为 05到10之间的数字即可(没多少可选 06 07 08 09 取个中间 08吧),改为 08_os-prober,好了,再执行
sudo update-grub
cat /boot/grub/grub.cfg
看看windows 选项是不是排在第一位了,不用改default了吧。

- wangdu2002
- 帖子: 13284
- 注册时间: 2008-12-13 19:39
- 来自: 物华天宝人杰地灵
Re: grub2 基础教程(更新到25楼)
好贴要经常顶。小苹果不要急,等910正式发布后,此贴就火啦。
此贴应当置顶。内容丰富,针对性强,前瞻性强,好好整理下,又一经典教程。小苹果,大伙都很看好你喔。

此贴应当置顶。内容丰富,针对性强,前瞻性强,好好整理下,又一经典教程。小苹果,大伙都很看好你喔。

行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!
海内生明月,天涯共此夕。
--------------------吾本独!
- smallapple
- 论坛版主
- 帖子: 7868
- 注册时间: 2009-03-28 15:12
- 白鳍豚
- 帖子: 2356
- 注册时间: 2009-01-19 23:03
Re: grub2 基础教程(更新到25楼)
收藏了,迟早得火
- smallapple
- 论坛版主
- 帖子: 7868
- 注册时间: 2009-03-28 15:12
Re: grub2 基础教程(更新到25楼)
谢谢嘟嘟鼓励。wangdu2002 写了:好贴要经常顶。小苹果不要急,等910正式发布后,此贴就火啦。![]()
此贴应当置顶。内容丰富,针对性强,前瞻性强,好好整理下,又一经典教程。小苹果,大伙都很看好你喔。
现在要全面整理为时过早。
grub 1.97 Beta2 ,官方说明文档内容太少,只能慢慢摸。

等正式版出来再说。
- hcym
- 帖子: 15634
- 注册时间: 2007-05-06 2:46
Re: grub2 基础教程(更新到25楼)
闷骚型苹果

