grub2基础教程.docx

上传人:b****8 文档编号:27914822 上传时间:2023-07-06 格式:DOCX 页数:24 大小:293.33KB
下载 相关 举报
grub2基础教程.docx_第1页
第1页 / 共24页
grub2基础教程.docx_第2页
第2页 / 共24页
grub2基础教程.docx_第3页
第3页 / 共24页
grub2基础教程.docx_第4页
第4页 / 共24页
grub2基础教程.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

grub2基础教程.docx

《grub2基础教程.docx》由会员分享,可在线阅读,更多相关《grub2基础教程.docx(24页珍藏版)》请在冰豆网上搜索。

grub2基础教程.docx

grub2基础教程

grub2基础教程-修订

     

                                smallapple

目录

一、grub2新特性

二、grub2安装与启动

三、grub2配置文件详解

四、脚本修改

五、使用grub2常见错误及修复方法

一、grub2新特性

1、grub2和grub有很多不同的地方:

a)图形接口

b)使用了模块机制,通过动态加载需要的模块来扩展功能

c)支持脚本语言,例如条件判断,循环、变量和函数

d)支持rescue模式,可用于系统无法引导的情况

e)国际化语言。

包括支持非ASCII的字符集和类似gettext的消息分类,字体,图形控制台等等

f)有一个灵活的命令行接口。

如果没有配置文件存在,GRUB会自动进入命令模式

g)针对文件系统、文件、设备、驱动、终端、命令、分区表、osloder的模块化、层次化、基于对象的框架

h)支持多种文件系统格式

i)可访问已经安装的设备上的数据

j)支持自动解压

2、设备的命名

grub2同样以fd表示软盘,hd表示硬盘(包含IDE和SCSI硬盘)。

设备是从0开始编号,分区则是从1开始,主分区从1-4,逻辑分区从5开始,而grub分区编号是从0开始的。

下面给出几个例子:

(fd0):

表示整个软盘

(hd0,1):

表示BIOS中的第一个硬盘的第1个分区

(hd0,5)/boot/vmlinuz:

表示BIOS中的第一个硬盘的第一个逻辑分区下的boot目录下的vmlinuz文件

二、grub2安装与启动

1、安装ubuntu9.10时,grub默认安装在第一硬盘(hd0)的mbr,其实就是把引导文件boot.img写入硬盘的mbr,当然,用户也可以选择不写入硬盘mbr而是写入linux分区的引导扇区。

启动时根据mbr所提供信息找到启动分区后,加载分区内的grub核心文件core.img和配置文件grub.cfg,进入选择菜单画面,在菜单画面,按上下箭号选择需要系统菜单项,按Enter进入选项。

 

按e进入己选择菜单的编辑状态,在编辑状态下,由上下左右箭号来移动光标,enter键换行,ctrl+x以编辑的内容启动,ctrl+c进命令行状态,按Esc退出,回到菜单项。

在需要使用额外的内核参数启动时,比如要加上acpi=off时,把光标移动到linux这一行最后,在splash后加上一空格再输入acpi=off,然后按ctrl+x启动。

按c进入命令行状态,按Tab键可查看所有可用的命令。

在命令行状态,可以根据需要加载或移除相应模块,也可用来启动在菜单没有显现的的系统。

比如,在第一硬盘的第一分区上装有windowsxp系统,但在菜单上没显示出来,我们可以命令行状态下输入命令启动:

   grub>setroot=(hd0,1)

   grub>chainloader+1

   grub>boot

又比如启动第二硬盘第一逻辑分区上的ubuntu系统:

   grub>setroot=(hd1,5)

   grub>linux/boot/vmlinuz-xxx-xxxroot=/dev/sdb5

   grub>initrd/boot/initrd.img-xxx-xxx

   grub>boot

其中内核vmlinuz和initrd.img的版本号可用按Tab键自动查看。

2、下面介绍下在grub2中一些常用的命令

   1)help

      查看命令用法,如

   helpsearch:

查看search命令详细用法

   2)set

      设置变量值,如

   setdefault=0

   settimeout=5

   setroot=(hd0,3)等等

      需要调用变量AA的值时,使用${AA},如setroot=(hd1,1),则${root}=(hd1,1)

   3)default

      定义默认引导的操作系统。

0表示第一个操作系统,1表示第2个,依此类推

   4)timeout

      定义在时间内用户没有按下键盘上的某个按键,自动引导default指定的操作系统。

   5)root

      指定用于启动系统的分区。

   6)insmod和rmmod

      加载或移除某模块,如

insmodjpeg

insmodpng

insmodntfs

rmmodpng

 等

 7)drivemap

 drivemap兼容grub的map,主要用于只能从第一硬盘(hd0)引导启动的系统如win2000xp2003,比如要添加第二硬盘第一分区上的xp系统:

 menuentry"WindowsXP"{

 setroot=(hd1,1)

 drivemap-s(hd0)${root}

 chainloader+1

 }

   8)ls

      列出当前的所有设备。

如(hd0),(hd0,1),(hd0,5),(hd1),(hd1,1),(hd1,2)等

   ls-l

      详细列出当前的所有设备。

对于分区,会显示其label及uuid。

   ls/

      列出当前设为root的分区下的文件

   ls(hd1,1)/

      列出(hd1,1)分区根目录的文件

   9)search

   search-f/ntldr

      列出根目录里包含ntldr文件的分区,返回为分区号

   search-lLINUX

      搜索label是LINUX的分区。

   search–set-f/ntldr

      搜索根目录包含ntldr文件的分区并设为root,注意如果多个分区含有ntldr文件,

   set失去作用。

   10)loopback

   loopback命令可用于建立回放设备,如

   loopbacklo0(hd1,1)/abc.iso

      可以使用lo0设备来访问abc.iso里的内容,比如说,可以从abc.iso里的软盘映像中启动

   loopbacklo0(hd1,1)/aa.iso

   linux(lo0)/memdisk

   initrd(lo0)/abc.img

      要删除某一回放设备,可以使用-d参数:

   loopback-dlo0

   11)pager

      分页显示。

   setpager=1

      显示满一页时暂停,按space继续

   setpager=0

      取消分页显示

   12)linux

      用linux命令取代grub中的kernel命令

   13)chainloader

      调用另一个启动器,如

   chainloader(hd0,1)+1

      调用第一硬盘第一分区引导扇区内的启动器,可以是windows或linux的启动器

三、grub2配置文件详解

   grub2改用grub.cfg为配置文件,配置文件包含以下基本内容:

(红色为解释部分)

###BEGIN/etc/grub.d/00_header###

load_env

#加载变量,如果在grubenv保存变量,则启动时装载

setdefault="0"

#设置默认引导项,默认值为0

insmodext2

#插入文件系统支持的模块,除了用作启动的分区外,其他分区格式可在menuentry底下再添加

setroot=(hd0,8)

#指定系统root分区,也就是/分区

search–no-floppy–fs-uuid–set2d61e5f9-1d2a-4167-a6f1-b991ba00878b

#指定uuid=2d61e5f9-1d2a-4167-a6f1-b991ba00878b的分区为root分区,如果前面的分区号(hd0,8)的#uuid与这里的uuid一致,这两句作用一样,如果不一致,则指定uuid的起作用。

ifloadfont/usr/share/grub/unicode.pf2;then

#设置终端字体,unicode.pf2支持中文字符显示

setgfxmode=640×480

#设置显示分辨率,默认为640×480,可用800×600,1024×768,建议跟你想设定的图片大小一致

insmodgfxterm

#插入终端模块gfxterm,支持中文字符显示和支持24位图像

insmodvbe

#插入vbe模块,GRUB2引入模块化机制,要使用它,需要在这里加入

ifterminal_outputgfxterm;thentrue;else

#Forbackwardcompatibilitywithversionsofterminal.modthatdon’t

#understandterminal_output

terminalgfxterm

#设定grub2终端为gfxterm

fi

fi

settimeout=10

#设定默认启动前等待时间,默认为10秒

###END/etc/grub.d/00_header###

###BEGIN/etc/grub.d/05_debian_theme###

setmenu_color_normal=white/black

#设定菜单字体及背景颜色

setmenu_color_highlight=black/blue

#设定选择项字体及背景颜色

#如果使用默认,背景将完全被蓝色挡住了,需要修改blue为black,背景图片才能显示

###END/etc/grub.d/05_debian_theme###

###BEGIN/etc/grub.d/10_linux###

#10_linux为系统自动添加的当前root分区linux引导项

#每个菜单项要包括menuentry双引号""和大括号{}才完整,否则不显示菜单

menuentry"Ubuntu,Linux2.6.31-10-generic"{

setquiet=1

insmodext2

setroot=(hd0,8)

search–no-floppy–fs-uuid–set2d61e5f9-1d2a-4167-a6f1-b991ba00878b

#这句与setroot=(hd0,8)效果一样,可删除其一,二者不一致以这句为准

linux/boot/vmlinuz-2.6.31-10-genericroot=UUID=2d61e5f9-1d2a-4167-a6f1-b991ba00878broquietsplash

#不喜欢看到一长串的,roo=UUID=***可用root=/dev/sda8(/分区的分区号)代替

initrd/boot/initrd.img-2.6.31-10-generic

}

###END/etc/grub.d/10_linux###

#20_memtest86+为系统自动添加的内存测试菜单项

###BEGIN/etc/grub.d/20_memtest86+###

menuentry"Memorytest(memtest86+)"{

linux16/boot/memtest86+.bin

}

menuentry"Memorytest(memtest86+,serialconsole115200)"{

linux16/boot/memtest86+.binconsole=ttyS0,115200n8

}

###END/etc/grub.d/20_memtest86+###

#30_os-prober或30_others为系统自动查找并添加其他系统菜单项,按windows,linux,macos顺序

#查找并添加,支持windows7识别

###BEGIN/etc/grub.d/30_os-prober###

###END/etc/grub.d/30_os-prober###

###BEGIN/etc/grub.d/30_otheros###

#ThisentryautomaticallyaddedbytheDebianinstallerforanon-linuxOS

#on/dev/sda1

menuentry"MicrosoftWindowsXPProfessional"{

setroot=(hd0,1)

search–no-floppy–fs-uuid–sete852-230b

drivemap-s(hd0)$root

#对以ntldr引导的系统如win2000,xp,win2003,因其引导机制只能从第一硬盘启动,系统会自动添加#映射命令,对vista和win7就没有这句命令

chainloader+1

}

###END/etc/grub.d/30_otheros###

#40_custom为自定义的启动项,如启动cdlinux

###BEGIN/etc/grub.d/40_custom###

menuentry"CDLinux"{

setroot=(hd0,8)

linux/CDlinux/bzImageroot=/dev/ram0vga=791CDL_LANG=zh_CN.UTF-8

initrd/CDlinux/initrd

}

###END/etc/grub.d/40_custom###

定制个性化的配置文件,可以加入背景图片,使用中文字符,让启动画面独具特色,而不是单调的黑、白、蓝三色。

下面是一张经美化启动画面:

 

四、脚本修改

该怎样定制个性化的配置文件呢?

系统安装完成后,用户就会发现/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,先从应用程序-附件里打开终端,输入

         sudogedit/etc/default/grub

              用户密码

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

#Ifyouchangethisfile,run‘update-grub’afterwardstoupdate

#/boot/grub/grub.cfg.

GRUB_DEFAULT=0->设置默认启动项,按menuentry顺序。

比如要默认从第四个菜单项启动,数字改为3

GRUB_HIDDEN_TIMEOUT=0

GRUB_HIDDEN_TIMEOUT_QUIET=true->隐藏菜单,grub2不再使用,不管

GRUB_TIMEOUT="3"->设置进入默认启动项的等候时间,默认值10秒,按自己需要修改

GRUB_DISTRIBUTOR=`lsb_release-i-s2>/dev/null||echoDebian`

GRUB_CMDLINE_LINUX_DEFAULT="quietsplash"->添加内核启动参数,这个为默认

GRUB_CMDLINE_LINUX="noresume"->手动添加内核启动参数,比如acpi=offnoapic等可在这里添加

#Uncommenttodisablegraphicalterminal(grub-pconly)

#GRUB_TERMINAL=console->设置是否使用图形介面。

去除前面#,仅使用控制台终端,不使用图形介面

#Theresolutionusedongraphicalterminal

#notethatyoucanuseonlymodeswhichyourgraphiccardsupportsviaVBE

#youcanseetheminrealGRUBwiththecommand`vbeinfo’

#GRUB_GFXMODE=640×480设定图形介面分辨率,如不使用默认,把前面#去掉,把分辨率改为800×600或1024×768

#Uncommentifyoudon’twantGRUBtopass"root=UUID=xxx"parametertoLinux

#GRUB_DISABLE_LINUX_UUID=true->设置grub命令是否使用UUID,去掉#,使用root=/dev/sdax而不用root=UUDI=xxx

#Uncommenttodisablegenerationofrecoverymodemenuentrys

#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中间的文本会直接写入grub.cfg中相应位置,所以个性化的语句添加在这地方就可以了。

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

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

cat<

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

setdefault="${GRUB_DEFAULT}"->使用/etc/default/grub中的设定值

if[\${prev_saved_entry}];then

 saved_entry=\${prev_saved_entry}

 save_envsaved_entry

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

 save_envprev_saved_entry

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

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

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

EOF

再看看最后这一段

cat<

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

 settimeout=-1->设定为若有启动失败记录,就显示菜单,需手动选择才能启动选择项

else

 settimeout=${GRUB_TIMEOUT}->使用/etc/default/grub中的设定值

fi->这行后添加行

background_image(hd0,7)/boot/images/002.jpg->添加背景图片的绝对路径

EOF

2)05_debian_theme修改字体及背景颜色

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

看这里

 cat<

setmenu_color_normal=white/black->设置菜单项的字体和背景颜色

setmenu_color_highlight=black/white->设置选择项的字体和背景颜色。

EOF

3)10_linux这部分是自动搜索当前系统,建立当前系统的启动菜单,包括系统头,内核等信息,不要随便修改,要使用个性菜单名,比如中文菜单,可适当添加:

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

      cat<

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

       recordfail=1

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

EOF

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

   cat<

   setquiet=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}(recoverymode)"\->可改为linux_entry"启动Ubuntu,Linux${version}(修复模式)"\

   "single${GRUB_CMDLINE_LINUX}"

 fi

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

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

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

 cat<

menuentry"Memorytest(memtest86+

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1