在讲解grub之前,应该对linux的启动流程有一个清晰的了解,在此只做简单的介绍:
POST(上电自检)-->BIOS(确定第一启动设备)-->boot loader(LILO,grub等程序)-->kernel(initrd)-->init(/etc/inittab)-->login
其中boot loader是存在于系统的第一启动设备的MBR(446 Byte)中的一个加载程序,简单的说其功能就是加载系统内核(kernel),grub是当前主流的boot loader,功能非常强大,可以引导多种操作系统(linux、windows等),由于受限于MBR(仅有446B)的限制,grub采用了非常精巧的设计,分段引导分为两个阶段:stage1、stage2。stage1位于MBR(446B)中,主要功能是加载stage2;stage2位于/boot/grub/目录中,这样就可以利用stage2去引导加载系统,摆脱了MBR(446B)的限制,提供更加强大的功能。
1.在grub的命令模式下安装。
这种方式只会安装grub的stage1中的文件,即:只安装MBR中446字节的内容。当然对于stage2的内容,可以通过复制/usr/share/grub/目录中的文件得到,即:将/usr/share/grub/目录中的文件复制到/boot/grub/下即可。具体安装步骤如下:
(1)在命令行模式下输入grub命令,如下图所示:
(2)在grub>中输入root(hd0,0),在这root代表的是kernel所在的分区,而不是根文件系统。而后在输入setup(hd0),在此只需指定磁盘,具体步骤如下所示:
2.在命令行下输入grub-install安装
例如:如果你在/dev/sda中安装grub可以使用如下命令:
#grub-install /dev/sda
这样在/dev/sda上就安装了grub。
但是如果你在一块新的硬盘上安装grub,一定要按如下步骤操作:
(1)分区
(2)将内核所在的分区挂载至:/mnt/boot目录中
(3)利用grub命令安装:grub -install --root-directory=/mnt /dev/sdb(--root-directory是指定根目录,安装的磁盘是/dev/sdb)
grub的配置文件(grub.conf)是在安装系统的时候生成的,并不是安装完grub后生成的。grub.conf在/boot/grub/目录中,其具体内容如下:
1 # grub.conf generated by anaconda
2 #
3 # Note that you do not have to rerun grub after making changes to this file
4 # NOTICE: You have a /boot partition. This means that
5 # all kernel and initrd paths are relative to /boot/, eg.
6 # root (hd0,0)
7 # kernel /vmlinuz-version ro root=/dev/vol0/root
8 # initrd /initrd-version.img
9 # boot=/dev/sda
10 default=0
11 timeout=5
12 splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz
13 hiddenmenu
14 title Red Hat Enterprise Linux Server (2.6.28.10-qingmuversion1)
15 root (hd0,0)
16 kernel /vmlinuz-2.6.28.10-qingmuversion1 ro root=/dev/vol0/root rhgb quiet
17 initrd /initrd-2.6.28.10-qingmuversion1.img
下面是各项的具体的介绍:
(1)default=0:这与title作为对照,有几个title启动时就可以选择几个菜单,默认是以0代表第一个title选项启动,它的意思是如果在读秒时间前没有按键,默认使用第一个(在此为0号)title启动。
(2)timeout=5,代表进入系统前的读秒时间。在此处是指读秒时间为5秒。
(3)splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz
这一项用来设置系统启动时的背景图片,例如redhat启动时,在读秒时其背景图片是一种红色的背景图片。在此表示此图片是在(hd0,0)分区中/grub/splash.xpm.gz图片,redhat对图片的要求是:
①640*480 ②14bit ③ .gz格式
(4)hiddenmenu:是指是否隐藏菜单,就是是否隐藏title这一项的内容。在此表示隐藏title后面Red Hat Enterprise Linux Server (2.6.28.10-qingmuversion1)的内容。
(5)root:代表内核文件放在哪个分区中,而不是根目录。
(6)kernel:这一项的后面的接的是内核的文件名,后面接的是内核的参数。在此:代表内核的文件名是:/vmlinuz-2.6.28.10-qingmuversion1;ro:代表只读挂载;root:代表linux的根目录在哪个分区;rhgb为颜色显示;quiet代表安静模式(即不输出内核的检测信息)。
(7)initrd:代表RAM disk;其主要功能是用于切换到真正的根分区。在此表示此RAM disk 为initrd /initrd-2.6.28.10-qingmuversion1.img。