了解Linux下的Grub

来源:岁月联盟 编辑:exp 时间:2011-09-06

grub相关配置文件:
[root@lyy grub]# ll
总计 199
-rw-r--r-- 1 root root     60 10-26 20:05 device.map        #grub装置对应文件
-rw-r--r-- 1 root root   7584 10-26 20:05 e2fs_stage1_5    #ext2/ext3文件系统之定义档
-rw-r--r-- 1 root root   7456 10-26 20:05 fat_stage1_5    #FAT文件系统之定义档
-rw-r--r-- 1 root root   6720 10-26 20:05 ffs_stage1_5    #FFS文件系统之定义档
-rw-r--r-- 2 root root    195 11-20 12:21 grub.conf        #grub 在Red Hat的配置文件
-rw-r--r-- 1 root root   6720 10-26 20:05 iso9660_stage1_5    #光驱文件系统之定义档
-rw-r--r-- 1 root root   8192 10-26 20:05 jfs_stage1_5    #文件系统之定义档
-rw-r--r-- 2 root root    195 11-20 12:21 menu.lst        #开机菜单配置文件
-rw-r--r-- 1 root root   6880 10-26 20:05 minix_stage1_5    #文件系统之定义档
-rw-r--r-- 1 root root   9248 10-26 20:05 reiserfs_stage1_5    #文件系统之定义档
-rw-r--r-- 1 root root    512 10-26 20:05 stage1
-rw-r--r-- 1 root root 104988 10-26 20:05 stage2
-rw-r--r-- 1 root root   7072 10-26 20:05 ufs2_stage1_5    #文件系统之定义档
-rw-r--r-- 1 root root   6272 10-26 20:05 vstafs_stage1_5    #文件系统之定义档
-rw-r--r-- 1 root root   8904 10-26 20:05 xfs_stage1_5
硬盘与分区在grub中的代号
grub主程序主要是从磁盘中加载核心档案,所以它必须认识硬盘。grub对硬盘的代号设定与
传统的linux磁盘代号可完全是不同的,如:
    (hd0,0)
硬盘代号以小括号()包起来;
硬盘以hd表示,后面会接一组数字;
以【搜寻顺序】做为硬盘的编号,而不是依照硬盘线的排序;
第一个搜寻的硬盘为0号,第二个为1号,以此类推;
每颗硬盘的第一个分区代号为0,依序类推。
第一颗硬盘的第一个逻辑分区代号为(hd0,4)。
/boot/grub/menu.lst配置文件
[root@lyy grub]# cat menu.lst
default=0    #默认开机,预设第一个title项目
timeout=5    #停留五秒,末动键盘选择黙认
splashimage=(hd0,0)/grub/splash.xpm.gz        #背景图示所在档案
hiddenmenu    #预设隐藏完整的开机菜单
title redhat enterprise server 5.4
      root (hd0,0)        #核心档案的分区
      kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/ rhgb quiet rhgb
      initrd /initrd-2.6.18-164.el5.img
root(hd0,0) 核心档案的分区,而不是根目录。
kernel 后接核心名之后就是核心参数。 root=LABEL=/ 挂载/目录 rhgb为彩色显示 quiet安静模式
initrd 后接虚拟文件系统名
其中 root=LABEL=/ 可以写成 root=/dev/hda2
一、测试与grub安装
使用grub-install 将一些必要的档案复制到/boot/grub里面去。
例:将grub安装在目前系统的MBR下,我的系统为:/dev/hda
[root@lyy grub]# grub-install /dev/hda
如果grub发生错误,连grub 都无法启动,可以利用具有grub开机的CD来开,然后再以CD的grub
的在线编辑功能使用硬盘上面的核心档案来开机。
二、为个别选单加上密码
例:给系统第一个开机菜单加上用MD5的密码,同时锁定在线编辑功能。
1.建立用MD加密过的密码
[root@lyy ~]# grub-md5-crypt
Password:
Retype password:
$1$vX3Mu/$msyisCLVKaZh1offoGYF2.    #经过MD5处理的密码
2.把生成的密码加入到/boot/grub/menu.lst
[root@lyy grub]# vi menu.lst
default=0
timeout=5
hiddenmenu
title redhat enterprise server 5.4
      password --md5 $1$eU4Mu/$0BvMemF2AVPO.BYbh3/e2/
      root (hd0,0)_
      kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/ rhgb quiet rhgb
      initrd /initrd-2.6.18-164.el5.img
注意这个密码加在title以下的第一行
3.经过以上简单的步骤,就完成了密码,但grub的在线编辑功能还是可以跳过密码,所以我们
要把在线编辑功能锁住。
default=0
timeout=5
password --md5 $1$eU4Mu/$0BvMemF2AVPO.BYbh3/e2/    #控制全局
hiddenmenu
title redhat enterprise server 5.4
      lock        #加上了这个功能
      root (hd0,0)_
      kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/ rhgb quiet rhgb
      initrd /initrd-2.6.18-164.el5.img
三、解决init配置文件错误
我们都知道 run level 0-6 都会读取/etc/inittab ,如果些文件配置错误,导致无法读取,单用户
run level也无法读取/etc/inittab进行开机,这时,我们可以告诉核心不要执行init 改呼叫bash。
例:开机在grub菜单中用在线编辑功能,修改以下
grub edit> kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet init=/bin/bash
这样系统呼叫的第一个程序就改成了/bin/bash,因此/sbin/init就不会执行了。
但此时除了根目录外,其他目录没有被挂载而且根目录成为了只读状态,我们还需要以下命令
来重复挂载根目录
mount -o remount,rw /    #重新挂载成为可擦写
mount -a         #根据/etc/fstab的内容重新挂载文件系统

作者“Liyy学习笔记”