挺不错grub2详细说明,放在这里备用

 

系统安装完成后,用户就会发现/boot/grub/grub.cfg文件只有root权限可读,如果要直

接修改grub.cfg文件,要先修改其权限。好不容易把grub.cfg修改好了,系统内核

或grub升级时,会自动执行update-grub,grub.cfg文件就会被打回原形,如何保证修

改后的配置文件能一直保留下来呢?

其实不用修改grub.cfg,只要把个性化配置写入/etc/default/目录下的grub和/etc/

gurb.d目录下的脚本文件,以后不管升级内核或者是升级grub所执行的update-grub,

都会按要求创建个性化的grub.cfg。

1、首先看下 /etc/default/grub,先从应用程序-附件里打开终端,输入

sudo gedit /etc/default/grub

用户密码

看看打开的文件可作什么修改:

# If you change this file, run 'update-grub' afterwards to update

# /boot/grub/grub.cfg.

GRUB_DEFAULT=0 -------->设置默认启动项,按menuentry顺序。比如要默认从第

四个菜单项启动,数字改为3,若改为 saved,则默认为上次启动项。

GRUB_HIDDEN_TIMEOUT=0

默认为0,单系统时启动菜单自动隐藏,要取消自

动隐藏菜单,改为大于0再sudo update-grub。

GRUB_HIDDEN_TIMEOUT_QUIET=true

GRUB_TIMEOUT="3"

----------->设置进入默认启动项的等候时间,默认值10

秒,按自己需要修改

GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

----------->添加内核启动参

数,这个为默认

GRUB_CMDLINE_LINUX="noresume"

--------->手动添加内核启动参数,比

如 acpi=off noapic等可在这里添加,加 text 参数启动进入字符模式

参数启动进入字符模式。

# Uncomment to disable graphical terminal (grub-pc only)

#GRUB_TERMINAL=console

---------->设置是否使用图形介面。去除前面#,仅使

用控制台终端,不使用图形介面

# The resolution used on graphical terminal

# note that you can use only modes which your graphic card supports via VBE

# you can see them in real GRUB with the command `vbeinfo'

#GRUB_GFXMODE=640x480 设定图形介面分辨率,如不使用默认,把前面#去掉,

把分辨率改为800x600或1024x768

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux

#GRUB_DISABLE_LINUX_UUID=true

---------->设置grub命令是否使用UUID,去

掉#,使用root=/dev/sdax而不用root=UUDI=xxx

# Uncomment to disable generation of recovery mode menu entrys

#GRUB_DISABLE_LINUX_RECOVERY="true"

----------->设定是否创建修复模式

菜单项

2、再看下/etc/grub.d目录下的脚本文件:

00_header,05_debian_theme,10_linux,20_memtest86+,30_os- prober,

40_custom这五个脚本对应grub.cfg上的各个部分,有的版本的grub可能把30_os-

prober分出另一部分为 30_os-others,这并不影响。怎样修改这些脚本文件才能保证

不会破坏update-grub的运行,又能让生成的grub.cfg合乎意愿呢? 其实很简单,只要

在脚本文件中找到

cat << EOF

********

********

********

EOF

这类语句,EOF中间的文本会直接写入grub.cfg中相应位置,所以个性化的语句添加

在这地方就可以了。

其他使用变量的语句不要随变做修改,除非你清楚修改后会有什么结果。

1)看看00_header,一样在终端中打开sudo gedit /etc/grub.d/00_header,找到这部分

cat << EOF

load_env ->加载由save_env保存在grubenv的变量

set default="${GRUB_DEFAULT}"

---------->使用/etc/default/grub中的设定值

if [ \${prev_saved_entry} ]; then

saved_entry=\${prev_saved_entry}

save_env saved_entry

prev_saved_entry=

------------>变里设置的变量由下句保存到grubenv

save_env prev_saved_entry

fi -------->这里回车添加新行后可插入需要添加的模块

insmod jpeg

------->添加背景图片格式支持,如jpeg,png,tga等。

insmod fat

-------->添加文件系统格式支持如fat,ntfs,也可在menuentry下添加

EOF

再看看最后这一段

cat << EOF

if [ \${recordfail} = 1 ]; then

set timeout=-1 -------->设定为若有启动失败记录,不倒计时,不会进入默认启动,

需手动选择才能启动选择项,若要设置为即使曾启动错误也进行默认启动,可把时间

设为

合适的正值,如 set timeout=5

else

set timeout=${GRUB_TIMEOUT}

------>使用/etc/default/grub中的设定值

fi

-------->这行后添加行

background_image (hd0,7)/boot/images/002.jpg

-------->添加背景图片的绝对路

径,可以按05_debian_theme修改图片路径。

EOF

2)05_debian_theme修改字体及背景颜色、添加背景图片

先打开文件 sudo gedit /etc/grub.d/05_debian_theme

看这里

cat << EOF

set menu_color_normal=white/black

set menu_color_highlight=black/white

EOF

------->设置菜单全局的字体和背景颜色

------->设置选择项的字体和背景颜色。

可供使用菜单颜色有:

black(当背景色时为透明),blue,green,cyan,red,magenta,brown,light-

gray,dark-gray,light-blue,light-green,

light-cyan,light-red,light-magenta,yellow,white

添加背景图片,看这一段

source /usr/lib/grub/grub-mkconfig_lib

# this allows desktop-base to override our settings

f=/usr/share/desktop-base/grub_background.sh

if test -e ${f} ; then

source ${f}

else

WALLPAPER="/usr/share/images/desktop-base/moreblue-orbit-grub.png"

COLOR_NORMAL="black/black"

COLOR_HIGHLIGHT="magenta/black"

fi

这里会自动搜索背景文件,把合适的背景图片更名为 moreblue-orbit-

grub.png(moreblue-orbit-grub.tga或moreblue-orbit-grub.jpeg),再放在/usr/share/

images/desktop-base/目录 下,然后执行 sudo update-grub,会出现如下的

Generating grub.cfg ...

Found background image: moreblue-orbit-grub.png

......

再重启,漂亮的背景图片就会出现了。

3)10_linux这部分是自动搜索当前系统,建立当前系统的启动菜单,包括系统头,内

核等信息,不要随便修改,要使用个性菜单名,比如中文菜单,可适当添加:

先打开文件 sudo gedit /etc/grub.d/10_linux,找到

cat << EOF

menuentry "$1" {

-------->双引号内可添加个性化字符,$1变量也可改为定值,如

改为menuentry "启动 Ubuntu Karmic" {

recordfail=1

save_env recordfail

-------->如不要保存启动失败记录的,这两句可删除

EOF

if [ "x$3" = "xquiet" ]; then

cat << EOF

set quiet=1

EOF ->启动画面不用splash,要用跳动字符的,这段可删除

个性化菜单项也可在这里修改,即上面的menuenrty "$1"不变,修改下面的数值:

linux_entry "${OS}, Linux ${version}" \

------->可改为 linux_entry "启动 Ubuntu,

Linux ${version}"\

"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA}

${GRUB_CMDLINE_LINUX_DEFAULT}" \

quiet

if [ "x${GRUB_DISABLE_LINUX_RECOVERY}" != "xtrue" ]; then

linux_entry "${OS}, Linux ${version} (recovery mode)" \ --------->可改为

linux_entry "启动 Ubuntu, Linux ${version} (修复模式)"\

"single ${GRUB_CMDLINE_LINUX}"

fi

注意只修改引号内的字符,前面的menuentry,linux_entry和后面的\不要做修改。

4)20_memtest86+自动添加内存测试启动项

打开文件 sudo gedit /etc/grub.d/20_memtest86+,找到

cat << EOF

menuentry "Memory test (memtest86+)" {

-------->双引号内可添加个性字符如

menuentry "启动 内存测试"

linux16 $MEMTESTPATH

}

menuentry "Memory test (memtest86+, serial console 115200)" {

linux16 $MEMTESTPATH console=ttyS0,115200n8

}

EOF

上面有两内存测试项,可删除其中一个。

5)30_os-prober查找其他分区中存在的系统并建立菜单项,依次为windows,linux,

macos。

对于单系统,默认会隐藏菜单,可在这里去掉隐藏

先打开文件 sudo gedit /etc/grub.d/30_os-prober

单ubuntu系统会自动隐藏菜单,要取消隐藏菜单,可把这部份的三个timeout=0改为和

/etc/default/grub中的timeout一致,比如timeout=10。

cat <<EOF

if [ \${timeout} != -1 ]; then

if keystatus; then

if keystatus --shift; then

set timeout=-1

else

set timeout=0

fi

else

if sleep$verbose --interruptible 3 ; then

set timeout=0

fi

fi

fi

EOF

else

cat << EOF

if [ \${timeout} != -1 ]; then

if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then

set timeout=0

fi

fi

EOF

下面这段自动查找并添加windows、linux和macos启动项,可在menuentry内修改个性

字符

windows启动项

for OS in ${OSPROBED} ; do

......

if [ -z "${LONGNAME}" ] ; then

LONGNAME="${LABEL}"

fi

......

cat << EOF

menuentry "${LONGNAME} (on ${DEVICE})" {

------->比如改为menuentry "启动

Windows XP" {

EOF

linux启动项

linux)

LINUXPROBED="`linux-boot-prober ${DEVICE} 2> /dev/null | tr ' ' '^' | paste -s -d

' '`"

......

if [ -z "${LLABEL}" ] ; then

LLABEL="${LONGNAME}"

fi

cat << EOF

menuentry "${LLABEL} (on ${DEVICE})" {

-------->比如改为menuentry "启动

Mandriva" {

EOF

macos启动项

macosx)

OSXUUID="`grub-probe --target=fs_uuid --device ${DEVICE} 2> /dev/null`"

cat << EOF

menuentry "${LONGNAME} (on ${DEVICE})" {

-------->比如改为menuentry "启动

MacOS" {

EOF

6)40_custom 自定义启动项,按菜单标准格式在后面添加即可,如

#!/bin/sh

exec tail -n +3 $0

# This file provides an easy way to add custom menu entries. Simply type the

# menu entries you want to add after this comment. Be careful not to change

# the 'exec tail' line above.

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

}

3、把各项脚本修改保存后,在终端执行

sudo update-grub

再执行

sudo gedit /boot/grub/grub.cfg

看看配置文件是不是和你想要的一样了。

如果有不够满意的地方,重新修改下脚本文件,再执行sudo update-grub

你可能感兴趣的:(挺不错grub2详细说明,放在这里备用)