引导加载程序(Boot loader)是在计算机在加载操作系统内核之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境加载到一个适合的状态,以便为最终调用操作系统内核做好准备。通常,引导加载的程序依赖于硬件实现,早期的Linux系统常见的引导加载程序有2种,即Grub和Lilo,现如今Grub已经成为了主流(类似Windows下的boot.ini引导文件)。
引导加载程序读取grub.conf文件的配置信息,然后根据对应配置信息来启动不同的操作系统, 管理员可以从三个路径查看grub.conf的配置信息,具体如下所示:
[root@oldboy boot]# cat /etc/grub.conf
#<==也可读取/boot/grub/menu.lst(软链接)或/boot/grub/grub.conf(真实文件)。
...省略多行注释信息,其实这里的注释已经解释的蛮清楚了,只是90%的初学者看不见这里...
default=0
#<==默认情况下如何加载系统,0表示加载菜单中对应的第一个名字,多系统时可以调节默认加载项。
timeout=5
#<==表示多少秒之后开始加载默认的系统,给管理员提前选择的时间。
splashimage=(hd0,0)/grub/splash.xpm.gz
#<==启动时显示的背景图标,在(hd0,0)代表/boot分区。
hiddenmenu
#<==系统启动时,会隐藏启动菜单信息,按默认设置启动系统,除非用户按键干预。
password [–md5|–encrypted ] STRING
#<==当编辑grub菜单时需要输入密码认证,Linux基础优化之一,默认没有。
title CentOS 6 (2.6.32-696.el6.x86_64)
#<==要启动的系统对应的项目名称,可按需修改。
root (hd0,0)
#<==引导内核文件和内核所需驱动文件所在的分区,(hd0,0)代表/boot分区。
#<==其中hd0表示计算机的第一块磁盘,(hd0,0)中逗号后面的0表示第一个分区,即(hd0,0)表示第一块磁盘的第一个分区,即/dev/sda1(分区通常最先独立分出的/boot分区,对应的设备名就是sda1)。
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=491eabe5-e6c0-4457-9bdb-b37cc6751308 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
#<==整行表示加载内核,即读取boot分区上的内核文件及一堆可选内核参数。
#<==/vmlinuz-2.6.32-696.el6.x86_64为内核文件。root=UUID=后面一串数字表示根对应的设备信息(/dev/sda3),其他介绍的作用不大,忽略即可。
initrd /initramfs-2.6.32-696.el6.x86_64.img #<==内核启动所需的驱动文件的所在地,存在于boot区。
提示:这个grub.conf的知识其实在企业Linux运维中用途不是很大,讲解grub的目的是,希望读者能了解Linux系统的整个启动流程做铺垫,RHCE认证课程会有修复grub.conf的考题,其实没什么大用,因为在IT网站运维工作中,极少在线处理问题,出问题也是直接切换服务了,之后在慢慢研究修复还是重装都可以。