服务报价 | 域名主机 | 网络营销 | 软件工具| [加入收藏]
 热线电话: #
当前位置: 主页 > 开发教程 > linux教程 >

CentOS系统启动流程你懂否

时间:2016-09-03 10:06来源:未知 作者:最模板 点击:
一、Linux内核的组成 1)进程管理 2)内存管理 3)网络协议栈 4)文件系统 5)驱动程序 6)安全功能(selinux) 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理、内存管

一、Linux内核的组成

1)进程管理

2)内存管理

3)网络协议栈

4)文件系统

5)驱动程序

6)安全功能(selinux)

 

 

相关概念:

   Linux系统的组成部分:内核+根文件系统

   内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序。

   IPC(Inter-Process Communication进程间通信):就是指多个进程之间相互通信,交换信息的方法。Linux IPC基本上都是从Unix平台上继承而来的。主要包括最初的Unix IPC,System V IPC以及基于Socket的IPC。另外,Linux也支持POSIX IPC。

   运行中的系统环境可分为两层:内核空间、用户空间;

      内核空间:内核代码(系统调用)

      用户空间:应用程序(进程或线程)

   内核设计流派:

      单内核设计:把所有的功能集成于同一个程序;(Linux)

      微内核设计:每种功能都使用一个单独的子系统实现;(Windows solarls)

   Linux内核特点:

     (1)支持模块化:.KO(kernel object)

     (2)支持模块运动时动态装载或卸载

   组成部分:

      核心文件:/boot/Vmliuz-VERSION-release      

 ramdirk:

    CentOS5:/boot/initrd-VERSION-release.img

    CentOS6,7:/boot/initramfs-VERSION-release.img

 

二、CentOS系统启动流程

总体启动顺序:

POST(加点自检)-->Boot Sequence(BIOS:基本输入输出系统)-->Boot Loader(MBR:主引导记录)-->Kernel(ramdisk)-->rootfs(根文件系统)-->switchchroot-->/sbin/init/(/etc/inittab /etc/init/*.conf)-->设定运行级别-->系统初始化脚本-->关闭启动相应服务-->启动终端 

 

各流程细化说明: 

1、POST加电自检  

主要是检测硬件设别是否能正常的运行,然而实现自检功能主要是由镶嵌在主板芯片(CMOS)上的BIOS(basic input output system)程序,检测没问题之后进行硬件设备的初始化。   

 

2、Boot Sequence(启动管理程序):选择启动顺序加载MBR

Boot Sequence是一个程序,它依赖于某个硬盘硬件,准确的说是第一个硬盘扇区的MBR,从而按次序查找各引导设备。

 

3、MBR引导,bootloader引导加载器,启动程序   

MBR(Master Boot Record):此记录在0磁道1扇区,总共为512字节,前446字节为bootloder,后64字节为分区表信息,主分区加上扩展分区不能大于四个,最后2个字节为校验信息,为55AA。提供一个菜单,允许用户选择要启动的系统或不同的内核版本;把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核。

 

4、kernel内核实现  

kernel自身初始化,实现功能,借助ramdisk探测可识别的程序,以自读方式挂载根文件系统,运行应用程序:/sbin/init

    

5、/sbin/init/管理用户空间服务进程     

设定运行级别,进行初始化脚本,关闭或启动相应的程序,启动终端。  

     

 

演示:


1
2
3
4
5
6
7
8
9
10
11
12
[root@centos6 boot]# ll
总用量 37025
-rw-r--r--. 1 root root   108103 5月  11 01:32 config-2.6.32-642.el6.x86_64
drwxr-xr-x. 3 root root     1024 8月  11 03:23 efi
drwxr-xr-x. 2 root root     1024 8月  11 03:29 grub
-rw-------. 1 root root 25622112 8月  11 03:26 initramfs-2.6.32-642.el6.x86_64.img
-rw-------. 1 root root  5061850 8月  11 03:32 initrd-2.6.32-642.el6.x86_64kdump.img
drwx------. 2 root root    12288 8月  11 03:04 lost+found
-rw-r--r--. 1 root root   215559 5月  11 01:32 symvers-2.6.32-642.el6.x86_64.gz
-rw-r--r--. 1 root root  2615003 5月  11 01:32 System.map-2.6.32-642.el6.x86_64
-rwxr-xr-x. 1 root root  4264528 5月  11 01:32 vmlinuz-2.6.32-642.el6.x86_64
[root@centos6 boot]#

GRUB(GRand Unified Bootloader)加载内核,就是MBR中的前 446 个字节,是BooTLoader的一种,它的作用是要选择要启动的内核。  

GRUB相关说明: 

………………………………………………………………………………………………………………………

wKiom1fBSmDiNqIKAACmJQfPUoI324.png

 


主要是由device.map,menulst,stage1,stage2,以及一系列的stage1_5组成。

device.map:存放的是内核文件的根分区

menu.lis:为菜单列表,里面为可选择的菜单列表,存放于stage2中。

stage:用于grub引导程序过大,所以分2段引导,第一段存放在MBR中,第二段存放于内核文件系统中,第一段引导完成后可以找到第二段。 但是,第二段是存放于内核文件系统中的,此时还没有格式化文件系统,如何可以访问到第二段的menu.lst,就需要借助于中间层 stage1_5,有它来协助 stage1 段来访问stage2阶段。stage1_5通常位于stage1 字段后的 63 个扇区。 由于stage2 在内存中存放可以使用的文件系统不确定,所以这就是有多个stage1_5 的原因。

 

 

Grub Legacy:分三阶段

stage1:存放在MBR上

stage1_5:存放在MBR之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;

stage2:磁盘分区(/boot/grub/)

   引导加载程序先读取MBR上的gurb第一阶段,由于MBR很小只有512字节采用grub这种方式引导程序,随后读取扇区中的stage1.5阶段,读取1.5阶段以后从而就能驱动第二阶段stage2所在的磁盘分区,stage2是存放在磁盘分区上的还包括了内核文件及ramdisk等都在这个分区上存放的;这就是为什么通过Bootloader之grub就能够加载内核文件的原因。

  注意:当前硬件平台,主板BIOS必须能识别硬盘,然后BIOS才能加载硬盘中的Bootloader,磁盘中的Bootloader自身加载完以后,就能够识别当前主机上的硬盘设备了。

但硬盘设备能识别,并不代表硬盘上的文件系统能识别,因为文件系统是额外附加的一层软件组织的文件结构,所以要能够对接一种文件系统,必须要用到文件系统驱动;对应的应用程序必须能识别和理解这样的文件系统才可以,这种程序就称为文件系统驱动;grub的1.5阶段就是给gurb提供了文件系统驱动的,从而就能够访问对应的第二阶段和内核所在的分区了,这通常是一个基本磁盘分区;所以grub第二阶段以及内核和ramdisk文件通常都会放在一个基本磁盘分区上;因为grub驱动不了逻辑卷这种高级接口。

 stage2一般是挂载至/boot/grub/目录下;grub也有自己的配置文件:/boot/grub/grub.conf且通常有个符号链接文件:/etc/grub.conf;

 stage2的功用:

 (1)提供菜单或交互式接口;

 (2)能加载用户选择的内核或操作系统;

 (3)为菜单通过了保护机制。

 

/boot/grub/grub.conf配置文件详解:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@centos6 grub]# ll /etc/grub.conf #/etc/grub.conf /boot/grub/grub.conf为连接文件
lrwxrwxrwx. 1 root root 22 8月  11 03:29 /etc/grub.conf -> ../boot/grub/grub.conf
[root@centos6 grub]# cat /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/sda2
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0 #设定默认启动菜单项,默认为0开始
timeout=5 #指定菜单等待选择的时长 
splashimage=(hd0,0)/grub/splash.xpm.gz #指定菜单的背景图片的路径,为xpm格式,采用gzip压缩
hiddenmenu #是否影藏菜单
password [--md5] $1$JO0kw$z.qtBMH.KL4A6qZ7dK4N30 #菜单编辑认证
title CentOS 6 (2.6.32-642.el6.x86_64) #定义菜单项
root (hd0,0) #本次grub查找stage2及其kernel文件所在设备分区,指定grub的根
kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=240533cf-b37f-4460-974f-702bab867da5 nomodeset rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet #需要启动的内核 
initrd /initramfs-2.6.32-642.el6.x86_64.img #内核匹配的ramfs文件 
password [--md5] STRING #启动内核选定的内核或操作系统是进行的认证 
[root@centos6 grub]#

(责任编辑:最模板)

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------