grub.conf文件详解和案例

 

 

首先来看一下/boot/grub/menu.lst中的内容:

==========================================================

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE: You do not have a /boot partition. This means that

#          all kernel and initrd paths are relative to /, eg.

#          root (hd0,0)

#          kernel /boot/vmlinuz-version ro root=/dev/hda1

#          initrd /boot/initrd-version.img

#boot=/dev/hda

default=0

timeout=5

splashimage=(hd0,0)/boot/grub/splash.xpm.gz

hiddenmenu

title Fedora Core (2.6.18-1.2798.fc6)

        root (hd0,0)

        kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=LABEL=/ rhgb quiet

selinux=0

        initrd /boot/initrd-2.6.18-1.2798.fc6.img

title Windows XP

rootnoverify (hd0,3)

chainloader +1

===========================================================

其中:

1,default=0

表示默认启动的第0号的操作系统,在GRUB中,title定义了启动的操作系统,从第1个开

始,GRUB中是0,而第2个是1,依次类推...

2,timeout=5

表示的是出现GRUB界面后,无操作情况下进入default设定的操作系统的时间,如果上下

移动选择,则该选项无效

3,splashimage=(hd0,6)/boot/grub/splah.xpm.gz

表示的是允许出现的GRUB背景的path,显然(hd0,6)指定了分区(不知能否这么解释,呵

呵),而后边的则是正常的path(在例子中,用#把它注释,为一可选项)

4,hiddenmenu

表示隐藏GRUB的启动菜单,直接进入由default庙宇的操作系统中去,为一可选项.

linux类

其格式一般为:

title (......)

root (hd[0-n],x)

kernel (......)

initrd (......)

其中:

title行,是定义一个启动操作系统,而后边可以自己随便写上喜欢的名字,呵,当然最起

码你得写得要自己能认出来,没必要把linux写成windows吧?!

root行,指定相应的linux所有的/boot,如果在写分区和挂载时没有单独挂载,那么就和

/在同一个分区中,hd[0-n]表示的是第几个硬盘,而x则表示的是[第几个分区-1],即x比

分区号小1,特别要注意.

kernel行,在这里以kernel 起始,指定Linux的内核的文件所处的绝对路径(通过在终

端输入命令:ls /boot/vmlinuz*来看内核的全名);因为内核是处在/boot目录中的,

而如果/boot是独立的一个分区,则需要把boot省略,因为 /boot所在的分区在root

(hd[0-n],x)中指定了,所以就无需要再指明内核处在哪个分区了;ro 表示只读;

root=LABEL=/ 来表示Linux的根所处的分区。LABEL=/ 这是硬盘分区格式化为相应文

件系统后所加的标签;如果您不了解什么是标签,也可以直接以/dev/hd[a-z]X 或

者/dev/sd[a-z]X来表示;就看您的Linux是根分区是在哪个分区了。比如我的是

在/dev/hda3, 那这里就可以写成root=/dev/hda3;

initrd行,如果是/boot独立一个分区,initrd 一行要把/boot中省略;如果/boot不是

处于一个分区,而是和Linux的/分区处于同一分区,不应该省略;我们通过查看/boot

中的 initrd的文件名到底是什么来写这一行代码,在终端输入:ls /boot/initrd*

很容易能得到initrd文件名,然后写入.

在了解了以上情况之后,我们就很容易地理解另一种写法了:

title (......)

kernel (hd[0-n],y)(/boot)...... ro root=......

initrd (hd[0-n],y)(/boot)......

其实只是省略的root很实在地写在了kernel和initrd行中去了而已

附:

其 实在GRUB启动菜单不能工作的时候,进入GRUB命令行(可按CTRL+C键)后,我们同样可

以一步一步地把系统启动起来,其实在menu.lst中, 除title不是指令外,其余的都是

GRUB指令,我们只要一步步地输入它们(错了要从新开始),中间输入关于kernel和

initrd要利用TAB键补齐写好,最后只要boot一下就行了.

用GRUB指令引导windows:

GRUB> rootnoverify (hd0,0)

GRUB> chainloader +1

GRUB> boot

以上内容转自: from:http://hi.baidu.com/joe266/blog/item/9fe0a1ed19e91d4878f055d4.html

 

 

附:

menu.lst有时候也叫grub.conf,但是/boot/grub/下会有一个名叫menu.lst的符号链接指向它。它是grub引导系统的配置文件。 

文件基本选项:

default 0:grub的默认启动项

timeout 5: 指定一个超时值,单位为秒,若用户在grub等待的超时时间范围内没有任何操作,则启动默认项

hidemenu: 开机时是否显示多选项菜单,若被设置则启动的时候默认不显示选项菜单,否则grub启动时自动显示选项菜单

color white/blue: 指定grub菜单的默认颜色

password --md5 $1$etSG6$LlxT8irAfAv5vYQn6tZUw1: 指定一个密码,启用grub的密码保护,这个命令需要放置在title下第一行。为安全起见,一般使用md5值,这个值可以使用grub-md5-crypt或者在grub shell中使用md5crypt生成,也可以直接使用字母或者数字。当要修改加密的启动项时,需要按p键,然后输入密码。需要注意的是为了放置点击e,进入编辑模式,然后删除密码字段,再按下b启动系统,这时可以将密码设置设置在整体上,而不是放置在某一个title下,相对应的title下增加一行lock <==多了死锁的功能

产生MD5密码命令示例如

#grub-md5-crypt

Password: <==输入密码

Retype password: <==再输入一次

$1$kvlI0/$byrbNgkt/.REKPQdfg287. <==这就是产生的md5 密码!

一个启动Linux的菜单项

title Linux*:指定此菜单项的名称,既在grub列表里的名称

root  (hd0,0): 指定启动分区,注意,编号从0开始:比如第一块硬盘的第一个分区应该是(hd0,0)。启动分区的编号可以使用fdisk -l查询,但是需要root权限

kernel /boot/vmlinuz-2.6.20-16-generic: 系统内核

root=UUID=3f784cd9-516f-4808-a601-b19356f6bdea ro quiet splash locale=zh_CN vga=0x318:

指定启动的内核的绝对路径和名称,后边跟参数,一般来说root参数就是你的根文件系统,一定要有的,可以像范例中使用 uuit表示,也可以直接使用/dev/sda2或者/dev/hda1这样的表示。其实有root和kernel两行就可以启动linux了

initrd  /boot/initrd.img-2.6.20-16-generic: 指定系统启动访问真正的根文件系统前,访问的ramdisk映象

savedefault: 如果选择了这个启动项,那么下次启动时就用此项作为默认项. 在前面设置为default saved时有效

Linux kernel常用的参数

root:根文件系统的位置。 

ro:可读写,当启动分区是JFS等格式时需要使用此参数使得系统可以在启动是存放日志。 

quiet:安静模式,不显示核心检测的信息。 

splash:显示徽标。 

locale:指定locale 

vga:指定终端的显示模式。要调整tty1 ~ tty6 终端机的分辨率呢参考下面表格(此为十进制数值):彩度/分辨率bit

640x480         800x600         1024x768         1280x1024 

256         769                 771                 773                 775 8 bit

32768         784                 787                 790                 793 15 bit

65536         785                 788                 791                 794 16 bit

16.8M         786                 789                 792                 795 32 bit

b)        启动项的操作

对于多个启动项,可以选择启动项后,点击e进入编辑状态,完成后可以是点击b按键进行引导。万一/boot/grub/menu.lst 设定错误,或者是因为安装的缘故,或者是因为核心档案的缘故,导致无法顺利开机时,记得啊,可以在grub 的选单部分, 使用grub shell 的方式去查询(find) 或者是直接指定核心档案,就能够开机。

c)        救援模式:

当系统连单用户模式都无法进入时或出现GRUB命令行也不能解决的引导问题,我们就需要使用Linux救援模式来进行故障排除了。步骤如下:

1、将Linux安装光盘放入光驱,F2进入BIOS设置为光盘引导,F10保存退出,当Linux安装画面出现后,在“boot:”提示符后输入“linux rescue”回车进入救援模式。(F5键查看模式详细信息)

2、系统会检测硬件,引导光盘上的Linux环境,提示选择救援模式下使用的语言,选择英文,中文为乱码;键盘设置用默认的“us”就好;网络设置暂不用。

3、接下来系统将试图查找根分区。默认在救援模式,硬盘的根分区将挂载到光盘Linux环境的/mnt/sysimage目录下,默认选项“continue”表示挂载权限为读写; “Read-only”为只读,如果出现检测失败可以选择“skip”跳过。此处,因为要对系统进行修复,所以需要有读写权限,一般选择默认选项 “continue”。进入下一步后,系统提示执行“chroot /mnt/sysimage”命令,可以将根目录挂载到我们硬盘系统的根目录中去。

4、修改引导配置文件vim /boot/grub/grub.conf,输入grub命令可以修复引导程序

grub> root (hd0,0) 和title下的root一致

grub>setup (hd0) 真正的修复

grub>quit 退出

案例一:双系统启动修复

当我们安装双系统环境,先安装Linux再安装Windows;或者已经安装好双系统环境的Windows损坏,在重新安装Windows后,保存 GRUB的MBR(Master Boot Record,主引导记录)会被Windows系统的自举程序NTLDR所覆盖,造成Linux系统无法引导。

1、如果要恢复双系统引导,首先用上述方法进入救援模式,执行chroot命令如下:

sh-3.1# chroot /mnt/sysimage

2、将根目录切换到硬盘系统的根目录中,然后执行grub-install命令重新安装GRUB:

sh-3.1# grub-install /dev/hda

“/dev/hda”为硬盘名称,如使用SCSI硬盘或Linux安装在第二块IDE硬盘,此项设置要做相应调整。

3、然后依次执行exit命令,退出chroot模式及救援模式(执行两次exit命令):

sh-3.1# exit

sh-3.1# exit

系统重启后,将恢复GRUB引导的双系统启动。

案例二:系统配置文件丢失修复

如果/etc/inittab误删除或修改错误,Linux将无法正常启动。此时,只有通过救援模式才可以解决此类问题。

1、有备份文件的恢复办法

进入救援模式,执行chroot命令后,如果有此文件的备份(强烈建议系统中的重要数据目录,如/etc、/boot等要进行备份),直接将备份文件拷贝回去,退出重启即可。如果是配置文件修改错误,如比较典型的/boot/grub/grub.conf及/etc/passwd的文件修改错误,也可以直接修正恢复。假设有备份文件/etc/inittab.bak,则在救援模式下执行:

sh-3.1# chroot /mnt/sysimage

sh-3.1# cp /etc/inittab.bak /etc/inittab

2、没有备份文件的恢复办法

如果一些配置文件丢失或软件误删除,且无备份,可以通过重新安装软件包来恢复,首先查找到/etc/inittab属于哪一个RPM包(即便文件丢失,因为存在RPM数据库,一样可以查找到结果):

sh-3.1# chroot /mnt/sysimage

sh-3.1# rpm -qf /etc/inittab

initscripts-8.45.3-1

退出chroot模式:

sh-3.1# exit

挂载存放RPM包的安装光盘(在救援模式下,光盘通常挂载在/mnt/source目录下):

sh-3.1# mount /dev/hdc /mnt/source

Fedora系统的RPM包存放在光盘Fedora/RPMS目录下,其他Linux存放位置大同小异,这里不一一列举;另外,因为要修复的硬盘系统的根目录在/mnt/sysimage下,需要使用--root选项指定其位置。覆盖安装/etc/inittab文件所在的RPM包:

sh-3.1# rpm -ivh --replacepkgs --root /mnt/sysimage /mnt/source/Fedora/RPMS/ initscripts-8.45.3-1.i386.rpm

其中的rpm命令选项“--replacepkgs”表示覆盖安装,执行完成后,即已经恢复了此文件。如果想只提取RPM包中的/etc/inittab文件进行恢复,可以在进入救援模式后,执行命令:

sh-3.1# rpm2cpio /mnt/source/Fedora/RPMS/initscripts-8.45.3-1.i386.rpm

| cpio -idv ./etc/inittab

sh-3.1# cp etc/inittab /mnt/sysimage/etc

注意此命令执行时不能将文件直接恢复至/etc目录,只能提取到当前目录下,且恢复的文件名称所在路径要写完整的绝对路径。提取文件成功后,将其复制到根分区所在的/mnt/sysimage目录下相应位置即可。

d)        inittab配置文件错误(/etc/inittab)

这个文件设定错误导致的无法开机!根据开机流程,我们知道runlevel 0~6 都会读取/etc/inittab文件, 因此你使用单用户模式也是要读取/etc/inittab 来进行开机的。这时是无法进入单人维护模式的,那就需要告诉核心不要执行init ,改使用bash,从而略过init,操作同样在开机进入grub 后,同样在grub edit 的情况下这样做:

grub edit> kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet init=/bin/bash

因为我们指定了核心呼叫的第一支程序(init) 变成/bin/bash,因此/sbin/init 就不会被执行。又根据开机流程的说明,我们知道此时虽然可以利用root 取得bash 来工作,但此时(1)除了根目录外,其它的目录都没有被挂载; (2)根目录被挂载成为只读状态。因此我们还需要进行一些动作才行!如下所示:

 

仅下达两个指令,『mount -o remount,rw / 』用途是将根目录重新挂载成为可写, 至于『mount -a 』则是参考/etc/fstab 的内容重新挂载档案系统!此时你又可以开机进行救援的工作了! 只是救援完毕后,你得要使用『reboot 』重新开机一次

e)如果grub.conf文件损坏,不能正常启动系统,启动时进入grub提示状态:

注意:以下grub环境可以使用Tab键补全哟!

grub>

3.  设置grub的根设备为linux内核所在分区,因为我的/boot分区安装在第一块硬盘的第一个分区,所以设置为(hd0,0),注意这里是不区分IDC硬盘与SCSI硬盘的!

grub> root (hd0,0)

4.  设置内核参数,加载内核文件,因为我是安装的独立的/boot分区,如果/boot分区是放在/分区下面,则内核文件要指定为/boot/vmlinuz-verstion!

grub>kernel /vmlinuz-2.6.18-53.el5PAE ro root=/dev/VolGroup00/LogVol00 rhgb quiet

5.  加载内核镜像文件

grub> initrd /initrd-2.6.18-53.el5PAE.img

6.  引导系统

grub>boot

7.  进入系统后,修复或者创建新的/boot/grub/grub.conf文件,确保系统下次能够正常启动;

8.如果你有光盘,还有另外一种修复方法,即进入linux rescue模式去修复grub.conf文件。

a) 光盘引导,进入linux rescue模式

boot: linux rescue

b) 根目录切换

sh-3.1#chroot /mnt/sysimage

c) 现在就可以修复或者重建grub.conf文件啦

sh-3.1# vi /boot/grub/grub.conf

 

你可能感兴趣的:(Linux)