『学了就忘』Linux启动引导与修复 — 70、grub启动引导程序的配置文件说明
1、grub中分区的表示方法
在说grub
启动引导程序的配置文件之前,我们还需要了解一下,在grub
中分区的表示方法。
从下图中我们可以看到,Linux系统的分区中是/dev/
目录下自动识别设备分区名称,关于Linux系统的分区命名请看之前文章中的介绍。但是在grub
的分区中,是有自己一套独立的标识方式,无论是SATA接口的硬盘还是IDE接口的硬盘,都用hd
来表示硬盘(不再像Linux系统分区,识别成hd
和sd
了)。括号中第一位数表示第几块硬盘,第二位表示硬盘中的分区号。
如下图所示:
2、grub的配置文件
上一篇文章我们说过,grub
启动引导程序的配置文件有三个,源文件是/boot/grub/grub.conf
,而/boot/grub/menu.lst
和/etc/grub. conf
文件是/boot/grub/grub.conf
文件的两个软链接文件,说白了三个文件就是一个文件。
查看grub
的配置文件,内容如下:
执行命令:[root@localhost ~]# vim /boot/grub/grub.conf
结果如下图所示:
在实际工作中的服务器上,不可能安装多系统,原因:
- 第一、选择需要进入的系统需要在本机上选择,而我们的服务器往往远处。
- 第二、多个系统占用过多的系统资源。
- 第三、虚拟机比真实机使用起来方便很多,比如系统崩溃了,恢复快照就可以等,根本没有必要安装多系统。
3、grub的配置文件内容说明
(1)grub的整体设置
1)default属性
default=0
:默认启动第一个系统。也就是如果在等待时间结束后,用户没有选择进入哪一个系统,那么系统会默认进入第一个系统。如果有多系统并存,那么每个系统都会有自己的title
字段,如果想要默认进入第二个系统,这里就可以设为 default=1
,以此类推。
2)timeout属性
timeout=5
:等待时间,默认是5秒。也就是进入系统时,如果5秒内用户没有按下任意键,那么系统会进入default
字段定义的系统。当然可以手工修改这个等待时间,如果timeout=0
则不会等待直接进入系统,timeout=-1
则是--直等待用户输入,而不会自动进入系统。
说明:
在进入Linux系统的时候,会出现如下画面:
此画面读秒的时候,按下任意键,就可以进入到grub
启动引导程序,选择需要启动的系统。
如下图所示:
这个timeout=5
就是图1中的读秒数。
这里还有要注意一点,在图2界面的时候,Linux系统是没有启动好的,网卡此时并没有加载好, 所以远程终端是无法连接的,这就是上面说的只有到本机上才能操作。
3)splashimage属性
splashimage=hd(0,0)/grub/splash.xpm.gz
:这里是指定grub
启动时的背景图像文件的保存位置的。记得CentOS 6.X
启动时后台的蓝色图像吧,就是这个文件的作用。hd(0,0)
代表第一个硬盘的第一个分区,而我们在系统安装时,/boot
分区就是第一个分区,所以这个背景图像的实际位置就是/boot/grub/splash.xpm.gz
(说明hd(0,0)=/boot
)。
4)hiddenmenu属性
hiddenmenu
:隐藏菜单。启动时默认只能看到读秒,而不能看到菜单,如果想要看到菜单需要按任意键。
如果注释了这句话,那么启动时就能直接看到菜单了。
以上就是grub
的整体设置,个人觉得除了default
属性,其他的都没有什么好修改的。
(2)CentOS系统的启动设置
接下来介绍CentOS系统的启动设置。
1)title属性
title CentOS(2.6.32-279.el6.i686)
:title
就是标题的意思,也就是说在title
后面写入的是什么,那么系统启动时在grub
的启动菜单中看到的就是什么,如上图中的选项名称。
如果有多个系统,每个系统都会有一个title
属性。
2)root属性
root hd(0,0)
:是指启动程序的保存分区(也可以说是主启动目录的位置)。这里要注意啊,这个root
并不是管理员用户,也不是根目录同级的root
目录,而是主启动目录的位置。在我的系统中,/boot
分区是独立划分的,而且设备文件名为/dev/sda1
,所以在grub
中,就被描述为hd(0,0)
,也就是说root
是/boot
分区下的根目录。
3)kernel属性
kernel属性就是描述内核加载的选项,下面简单说明一下:
/vmlinuz-2.6.32-279.el6.i686
:指定了内核文件的位置,这里的/是指/boot
分区。ro
:启动时以只读方式挂载根文件系统,这是为了不让启动过程影响磁盘内的文件系统。(这些选项都是在系统启动过程中的选择)root=UUID=b9a7a1a8-767f-4a87-8a2b-a535edb362c9
:指定根文件系统的所在位置。这里和以前的Linux版本不太一样了,不再是通过分区的设备文件名或卷标号来指定,而是通过分区的UUID来进行指定。那么如何查询分区的UUID号呢?方法有很多种,最简单的办法就是查询/etc/fstab
文件,命令如下:
可以看到/
分区的UUID和kernel
行中的UUID是匹配的。
注意一下,grep
命令后的·/
,在/
后是有空格的。rd_NO_LUKS
:禁用LUKS
,LUKS
用于给磁盘加密。rd_NO_MD
:禁用软RAID
。rd_NO_DM
:禁用硬RAID
。rd_NO_LVM
:禁用LVM
。以上禁用都只是在启动过程中禁用,是为了加速系统启动的。(启动完了自动开启,所以这些属性我们不必太关注)KEYBOARDTYPE=pc KEYTABLE=us
:键盘类型。crashkernel=auto
:自动为crashkernel
预留内存。LANG=zh_CN.UTF-8
:语言环境。rhgb
:(redhat graphics boot
)用图片来代替启动过程中的文字信息。启动完成之后可以使用dmesg
命令来查看这些文字信息。(如启动时候的百分比等)quiet
:隐藏启动信息,只显示重要信息。(系统启动的时候按ESC键,可以查看隐藏的信息)
提示:以上这么多信息,我们平时真的用不到,大概知道什么意思就可以了。
4)initrd属性
initrd /initramfs-2.6.32-279.el6.i686.img
:加载虚拟文件系统,指定了initramfs
内存文件系统镜像文件的所在位置。
5)总结
以上四条属性,title
、root
、kernel
、initrd
都是自动生成的,我再新安装一个操作系统,这四个属性也是自动生成,能看懂就好,这四个属性不用我们修改。