1、首先我们先来了解一下系统在从按下电源开关到我们看到画面这个过程究竟干了些什么事情:
(1)按下电源开机-->bios(配置主板的程序,basic input and output system,加电自检,找到启动设备的编号)-->找到mbr(master bootloader record,它是属于硬盘的0磁盘0扇区)-->grub-->通过grub找到vmlinuz和initrd(驱动硬件)--> 内核启动,产生init进程-->/etc/inittab(确定系统的启动级别)-->/etc/rc.sysinit(获取主机的网络环境和主机类型,测试与载入设备,是否启动selinux,模块的加载,设置系统时间.................)--读取/etc/fstab-->按照启动的级别按顺序启动对应的服务-->/etc/rc.local----> 登录界面
(2)开机---> bios 硬件自检--->把MRB 加载内存,bois 完成了任务,把控制全转交给Bootloader(Grub) ----> 读取grub.conf配置文件,加载相应的内核,初始化镜像文件到内存,初始化镜像文件会加载一系列硬件驱动,把必要的硬件先驱动起来,最终内核理解这些硬件-->产生第一个进程init--->init 读取配置文件/etc/inittab,获取系统将要运行在哪个级别--->init 运行rc.sysinit脚本,对系统进行初始化(配置主机名,生成/dev/下所有设备文件,读取/etc/fstab进行分区挂载等)---> init 根据运行解别,运行级别对应的目录下的所有服务启动脚本-->运行rc.local---> init 根据配置文件 产生多个终端/sbin/mingetty ---> 各个终端分别运行login----> gdm ---> 图形界面的登录程序
以上两种是系统启动过程所干的事情,写法都是差不多,个人看第一种比较好理解,当然每个人的想法和看法都不一样,所以我就把两种情况都写了出来。
2、MBR
MBR=512byte=446byte启动设备的信息+64byte分区表信息+2byte结束位
3、GRUB系统引导程序
grub的全称是:Grand Unified Boot Loader ,通过翻译过来的中文意思:引导加载程序大统一。从这个字面就可以知道要想加载系统、引导系统都得靠它。
(1)我们把它托出来看看是什么高级东东:
[root@rootbug ~]# rpm -qa |grep grub
grubby-7.0.15-3.el6.x86_64
grub-0.97-77.el6.x86_64
(2)查看此软件的详细信息
[root@rootbug ~]# rpm -qi grub-0.97-77.el6.x86_64
Name : grub Relocations: (not relocatable)
Version : 0.97 Vendor: Red Hat, Inc.
Release : 77.el6 Build Date: Thu 01 Mar 2012 12:14:36 AM CST
Install Date: Tue 27 Aug 2013 06:37:52 PM CST Build Host: x86-004.build.bos.RedHat.com
Group : System Environment/Base Source RPM: grub-0.97-77.el6.src.rpm
Size : 2396735 License: GPLv2+
Signature : RSA/8, Fri 18 May 2012 08:07:02 PM CST, Key ID 199e2f91fd431d51
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
URL : http://www.gnu.org/software/grub/
Summary : Grand Unified Boot Loader.
Description :
GRUB (Grand Unified Boot Loader) is an experimental boot loader
capable of booting into most free operating systems - Linux, FreeBSD,
NetBSD, GNU Mach, and others as well as most commercial operating
systems.
(3)查看一下它的配置文件放在哪里:
[root@www ~]# ll /etc/grub.conf --发现是一个软链接文件
lrwxrwxrwx. 1 root root 22 Aug 27 18:42 /etc/grub.conf -> ../boot/grub/grub.conf
(4)打开它看看究竟是什么样的内容:
[root@rootbug ~]# vim /boot/grub/grub.conf
解释:
(1)default=0 --默认进入第一个系统
(2)timeout=5 --5秒钟不选择,则进入默认default指定的系统;如果改为-1表示等待时间无限
(2)splashimage=(hd0,0)/grub/splash.xpm.gz
----------指定grub背景图的路径;(hd0,0)表示的就是/dev/sda1,所以这个路径其实就是指/boot/grub/splash.xpm.gzhiddenmenu,如果你更改成其他图片也可以,主要将图片的格式转换成xpm格式就行了,然后放在此目录下,开机之后自动加载。不过不知道是什么原因,我修改了我的图片之后发现不行,可能是转换格式方法不对,要是哪位大哥弄成功过记得留名告诉我方法。
(3)password --encrypted $6$xXZ403WJap4tfw2n$i5JiyJ3pjcCbDCVX/ZXPvX1zHv6BKAimZVe6uB2amuRl2Ye/gztvK7xxZZxpxFxnOmhK8eV1ie3Pv8NwCBrLv0
--------此加密密码是我怕别人通过单用户破解我的服务器密码所以就把grub加密了。所以此处就有一行密钥,如果没有加密的那么就不会存在。
(4)hiddenmenu
title Red Hat Enterprise Linux (2.6.32-279.el6.x86_64)
----------此标题是在开机的时候隐藏的,你需要在开机的时候按下“e”键,那么它才会出来。当然你也可以修改成你自己的标题。
(5)root (hd0,0) ---------表示/dev/sda1,也就是/boot ,但是我们如何知道是(hd0)呢?我们可以通过如下命令可以查看:
[root@rootbug ~]# cat /boot/grub/device.map
# this device map was generated by anaconda
(hd0) /dev/sda
(6) kernel /vmlinuz-2.6.32-279.el6.x86_64 ro root=UUID=a7f245f7-9537-4fc1-ace8-48f48faa987c nomodeset rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M rd_NO_LVM rd_NO_DM rhgb quiet
-------vmlinuz是/boot分区下的,名字不能错;root=UUID=a7f245f7-9537-4fc1-ace8-48f48faa987c此处用的ID表示跟/分区;有些系统可能还有root=LABEL=/;也有些系统是root=/dev/sdax。其结果都是一样的,都是启动时要知道根/分区是谁。
(7)initrd /initramfs-2.6.32-279.el6.x86_64.img -----initrd的路径
4、如果我的/boot没有划分独立分区,那我的grub.conf又是如何的呢?结果如下,需要额为添加/boot
[root@rootbug ~]#vim /boot/grub/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz ------加/boot
title Red Hat Enterprise Linux Server (2.6.18-164.el5)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-164.el5 ro root=LABEL=/ rhgb quiet ------加boot
initrd /boot/initrd-2.6.18-164.el5.img -------加boot
5、给grub加密码 (作用是锁住不让别人进入单用户改你的ROOT密码)
[root@rootbug ~]# grub-md5-crypt -----用此命令产生一个密码加密串
Password: -----输入你想要的密码
Retype password: -----再次输入你的密码
$1$JWQIX/$tYXWeDn3HPj9LYZezTuTI/ -----输两次密码就可以产生加密串
[root@rootbug ~]#vim /boot/grub/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz ------在下面加上加密信息
password --md5 $1$JWQIX/$tYXWeDn3HPj9LYZezTuTI/
title Red Hat Enterprise Linux Server (2.6.18-164.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/1 rhgb quiet
initrd /initrd-2.6.18-164.el5.img
6、手动引导grub
手动mv grub.conf
grub>root (hd0,0) --------进到/boot分区
grub>kernel /vmlinuz-xxxxxxx ro root=/dev/sda1 ----在输入kernel之后利用TAB键进行补齐命令,/dev/sda1表示root分区,写错是无法启动的,如果出现错误可以再重新输入另外一个分区,直到正确为止。
grub>initrd /initrd-xxxxxxxx ---------可以利用TAB进行补齐
grub>boot -----boot代表启动
如果全部正确,启动之后将会进入到系统,然后再进行将grub.conf重新编写回来即可。
探索Linux系统的启动过程:http://www.linuxdiyf.com/linux/10841.html
详解Linux启动过程中硬件模块的加载:http://www.linuxdiyf.com/linux/9365.html
Linux操作系统启动过程详解:http://www.linuxdiyf.com/linux/9327.html
Linux内核启动过程和Bootloader(总述):http://www.linuxdiyf.com/linux/6077.html
RHEL6启动过程:http://www.linuxdiyf.com/linux/3187.html