GRUB是一款非常优秀的系统引导器,它的功能非常强大。ubuntu的/boot/grub下没有grub.conf这个
文件(一般linux系统下都是这个
文件),跟它等价的
文件是menu.lst,他们的参数
设置基本是一样的,下面以menu.lst的内容来了解下各参数的意义,首先我们来看一下/boot/grub/menu.lst中的内容:
default=0
timeout=5
#splashimage=(hd0,6)/boot/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.11-1.1369_FC4)
root (hd0,6)
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
initrd /boot/initrd-2.6.11-1.1369_FC4.img
title Windows XP
rootnoverify (hd0,0)
chainloader +1
其中:
a,default=0
表示默认启动的第0号的
操作系统,在GRUB中,title定义了启动的
操作系统,从第1个开始,GRUB中是0,而第2个是1,依次类推...
b,timeout=5
表示的是出现GRUB界面后,无操作情况下进入default设定的操作系统的时间,如果上下移动选择,则该选项无效;如果将timeout参数删除或者将等于号后的数字改为负数,将会使该项彻底失效,GRUB将一直停留在引导页面等待用户选择。
c,splashimage=(hd0,6)/boot/grub/splah.xpm.gz
表示的是允许出现的GRUB背景的path,当进入GRUB引导界面的时候,可以看见一副背景图片,这个参数提供的就是这个功能。为了使GRUB引导更加个性化,大家也可以自己准备一张XPM图片,然后将图片压缩成gz格式,最后修改splashimage参数中的文件路径即可,此项为一可选项,所以上面将它用#注释了。
d,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文件名,然后写入.
除了上面一些参数外,还有password这个参数,它也是比较重要的一个参数。
众所周知,通过编辑GRUB启动参数可以轻松的进入单用户模式从而修改root
密码,这对于一台多用户的
计算机或
服务器来说,无疑增加了安全隐患。大家一定很像为自己的GRUB加一把锁吧,大家可以通过GRUB的password参数对GRUB设置
密码。
GRUB的密码设置可分为全局密码和菜单密码。
为了防止他人通过GRUB修改root密码大家需要设置一个全局密码。vi /boot/grub/grub.conf(或menu.lst)在splashimage这个参数的下一行可以加上password=密码,保存后重新启动计算机,再次登录到 GRUB菜单页面的时候就会发现,这时已经不能直接使用e命令编辑启动标签了,须先使用p命令,输入正确的密码后才能够对启动标签进行编辑;虽然我们设置了全局密码,但是如果他人得到了全局密码后仍然可以修改 GRUB启动标签从而修改root密码;这样我们就可以设置菜单密码,设置菜单密码也非常简单,我们只需要在title的下一行加上password=密码,然后保存退出。这样即使有了全局密码也必需输入菜单密码才能够引导系统。此外,如果直接对GRUB进行明文加密也是非常不安全的,所以就要使用MD5 对其进行加密。在终端中输入grub-md5-crypt回车,这时系统会要求输入两次相同的密码,之后系统便会输出MD5码。大家只需要将生成的MD5 密文复制下来,然后在按照password --md5 MD5密文这个格式设置全局或者菜单密码,保存退出,重启计算机即可。
附:
其实在GRUB启动菜单不能工作的时候,进入GRUB命令行(可按CTRL+C键)后,我们同样可以一步一步地把系统启动起来,其实在menu.lst 中,除title不是指令外,其余的都是GRUB指令,我们只要一步步地输入它们(错了要从新开始),中间输入关于kernel和 initrd要利用TAB键补齐写好,最后只要boot一下就行了.
解决问题:
像上面说的当GRUB不工作的时候,可以进入GRUB命令行一步步的解决,这样作的前提是你知道问题出在那里!当不知道问题在那时,还是使用livecd 进入系统,查看出问题在那里,然后修改grub.conf或者menu.lst。在查找问题时,先进入终端在grub下用find /boot/grub/stage1命令找到内核文件的真正的位置,然后参考下面系统
配置文件/etc/fstab修改grub.conf或者menu.lst,这里最好使用各文件系统盘的UUID;当然也有可能出现别的问题:像内核丢失;grub.conf或者menu.lst丢失,那就另当别论了。
修改后的menu.lst部分内容:
title
Ubuntu 8.04.1, kernel 2.6.24-19-generic
root (hd0,2)
kernel /boot/vmlinuz-2.6.24-19-generic root=UUID=2312ec5d-592c-450f-8590-010efd1fd4a6 ro quiet splash i locale=zh_CN xforcevesa
initrd /boot/initrd.img-2.6.24-19-generic
quiet
title Ubuntu 8.04.1, kernel 2.6.24-19-generic (recovery mode)
root (hd0,2)
kernel /boot/vmlinuz-2.6.24-19-generic root=UUID=2312ec5d-592c-450f-8590-010efd1fd4a6 ro single
initrd /boot/initrd.img-2.6.24-19-generic
title Microsoft Windows XP Professional
root (hd0,0)
makeactive
chainloader +1