Linux系统启动过程:
1、 主机开机后,就是硬件检测(POST),通过后再根据BIOS里面设置的启动顺序找到启动驱动器(如硬盘,光驱等),计算机启动都要经过这一步,没什么好说的啦。
2、 读取硬盘MBR,启动系统引导程序(如grub、lilo),再由系统引导程序加载Linux的核心(kernel)
系统引导程序引导并运行核心可以分两个阶段:
一阶段:即BIOS从MBR中读入IPL(initial program loaderI),就是启动系统引导程序如grub;
二阶段:加载boot loader的所有配置文件和相关的环境参数;由于MBR只有512字节,所以系统引导工具还要从其它地方读入数据( /boot目录下的文件)
系统引导程序引导并运行核心可以分两个阶段:
一阶段:即BIOS从MBR中读入IPL(initial program loaderI),就是启动系统引导程序如grub;
二阶段:加载boot loader的所有配置文件和相关的环境参数;由于MBR只有512字节,所以系统引导工具还要从其它地方读入数据( /boot目录下的文件)
注:MBR(Master Boot Record 512 字节,0头0道1扇区),前446字节存放的是 stage1,后面存放硬盘分区表信息;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
3、 Kernel会立即初始化系统中各种设备并做相关配置工作,其中包括CPU、I/O、存储设备等,也就是加载驱动程序啦。
4、 驱动加载后,会创建一个根设备,然后将根文件系统 / 以只读的方式挂载,结束后,执行 switchroot,转到真正的根 / 上面去,同时运行 /sbin/init 程序,运行linux系统的第一号进程(init进程,也就是所有进程的父进程,PID为1)
init初始化过和参考:http://blog.chinaunix.net/u1/48373/showart_416908.html
5、 读取 /etc/inittab 配置文件
6、 执行系统初始化脚本 (/etc/rc.d/rc.sysinit )对系统进行基本配置,以读写方式挂载根文件系统及其其它文件系统;
主要工作有:
a) 取得网络环境与主机类型(/etc/sysconfig/network)、
b) 挂载 /proc 及 /sys
c)配置selinux,
d) 系统时钟,
e) 内核参数(/etc/sysctl.conf),
f) 加载用户自定义的模块( /etc/sysconfig/modules/*.modules)
主要工作有:
a) 取得网络环境与主机类型(/etc/sysconfig/network)、
b) 挂载 /proc 及 /sys
c)配置selinux,
d) 系统时钟,
e) 内核参数(/etc/sysctl.conf),
f) 加载用户自定义的模块( /etc/sysconfig/modules/*.modules)
g)hostname,
h) 使能swap分区,
I)根文件系统的检查和二次挂载(读写),
j) 激活RAID和LVM设备
k) 使能磁盘 quota
l)检查并挂载其它文件系统
等等。
h) 使能swap分区,
I)根文件系统的检查和二次挂载(读写),
j) 激活RAID和LVM设备
k) 使能磁盘 quota
l)检查并挂载其它文件系统
等等。
根据运行级别启动相应服务,具体的每个运行级别的服务状态是放在 /etc/rc.d/rcX.d (X= 0 ~ 6)目录下,所有的文件均链接到 /etc/init.d下的相应文件
/etc/rc.d/rcX.d/ 里面的文件介绍:(里面的文件都是链接文件,都是指向 /etc/init.d底下)
/etc/rc.d/rcX.d/ 里面的文件介绍:(里面的文件都是链接文件,都是指向 /etc/init.d底下)
l 以 S 为开头的文件,为开机时需要启动的服务;
l 以 K 为开头的文件,为关机时需要关闭的服务的档案连结;
l 在 S 与 K 后面接的数字,代表该档案被执行的顺序。
7、 读取 /etc/rc.d/rc.local 文件,就是启动用户自定义的一些脚本程序,所以说如果你有什么东西需要在系统启动时启的的话就往这个文件里面写就可以了。
8、 执行 /bin/login 程序,并等待用户登入
9、 系统启动完成。
参考文章:http://blog.chinaunix.net/u1/48373/showart_418407.html
知道了Linux系统的开机流程,下面再了解一下GRUB的配置文件,以RHEL5.0做参考:
该文件位置保存在 /boot/grub/grub.conf,还有一个链接文件是 /boot/grub/menu.lst 也是指向/boot/grub/grub.conf
该文件位置保存在 /boot/grub/grub.conf,还有一个链接文件是 /boot/grub/menu.lst 也是指向/boot/grub/grub.conf
[root@rhel5 ~]# vi /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda2
# initrd /initrd-version.img
#boot=/dev/had
default=0
//
默认启动第一个系统,以
title
分隔;
timeout=5
//
在启动菜单选择界面停停留时间,单位是秒;
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz
//GRUB
启动背景画面,可以不写;
hiddenmenu
//
开机时是否显示启动菜单,如果要显示的话就要注释掉;
title Red Hat Enterprise Linux Server (<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2.6.18-53.el5)
//
启动菜单显示的标题
root (hd0,0)
// root
启动文件所在置
kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
//kernel
内核所在位置和名字
initrd /initrd-2.6.18-53.el5.img
// initrd
内核镜象的名字
title windows XP //第二个操作系统的标题
rootnoverify (hd0,1) //操作系统存放在hd0,1上,不要在grub里挂载
chainloader +1 // 加载 boot loader 的定义值, 那个 +1 代表的是第一
rootnoverify (hd0,1) //操作系统存放在hd0,1上,不要在grub里挂载
chainloader +1 // 加载 boot loader 的定义值, 那个 +1 代表的是第一
个
sector
,也可以说成
Super block
注意:
kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
rhgb : 表示 redhat graphics boot ,就是会看到图片来代替启动过程中显示的文本信息,这些信息在启动后用 dmesg 也可以看到
quiet : 表示在启动过程中只有重要信息显示,类似硬件自检的消息不回显示
rhgb : 表示 redhat graphics boot ,就是会看到图片来代替启动过程中显示的文本信息,这些信息在启动后用 dmesg 也可以看到
quiet : 表示在启动过程中只有重要信息显示,类似硬件自检的消息不回显示
当你的grub.conf 配置文件出错,或者是丢失的时候,你就会发现进不了系统了。为什么?
因为Linux系统启动时,找不到Kernel 文件在哪里,所以说会启动不了。会提示以下内容:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
![](https://i-blog.csdnimg.cn/blog_migrate/96d465da476268731ed438344820a9b2.jpeg)
1)
先找到 vmlinuz 所在的分区,也就是 /boot所在分区
grub > root
(hd0,0) : Filesystem type is ext2fs , partition type 0x83
或者是
grub > find /vmlinuz-2.6.18-53el5 ( 这里可以用TAB来补全 )
(hd0, 0)
grub >
2)执行kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/rhgb quiet (用来指定linux内核)
grub > kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet (可以用TAB补全)
[Linux-bzImage,setup=0x1e00,size=0x1b3654]
3)
执行initrd /initrd-2.6.18-53.el5.img(用来指定initrd文件)
grub > initrd /initrd-2.6.18-53.el5.img (这里可以用TAB来补全)
[Linux-initrd @ 0xfc9d000, 0x242073 bytes ]
4) 执行boot
grub > boot
后看到底下的 Hed Hat这几个红字时就是OK的意思了。再下去就是启动系统啦。
![](https://i-blog.csdnimg.cn/blog_migrate/ea17fd816ab8c4b4c362698a982f5083.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/da046e3ee9cd883e19bd401eda69928a.jpeg)
转载于:https://blog.51cto.com/kyhack/192630