首先来看一下/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
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhuliting/archive/2010/04/19/5502636.aspx
本文出自 “Linux Enthusiasts” 博客,谢绝转载!