Centos6系统启动详解......

一、Linux内核的组成


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

内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全功能(selinux)

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:基本输入输出系统)-->BootLoader(MBR:主引导记录)

-->Kernel(ramdisk)-->rootfs(根文件系统)-->switchchroot-->/sbin/init/(运行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。

这个界面就是大名鼎鼎的Grub了(学名叫统一资源引导器);

其对应的目录是boot目录下grub文件

Grub(GRand Unified Bootloader)是统一资源引导器,也就是引导加载器;它的工作是提供一个菜单,允许用户选择要启动的系统或不同的内核版本;把用户选定的内核装载到RAM中的特定空间中,然后解压、展开,而后把系统控制权移交给内核。

4、kernel内核实现

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

initramfs-2.6.32-642.el6.x86_64.img

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

读inittab文件由它来设定运行级别,进行初始化脚本,关闭或启动相应的程序,启动终端。

自此整个系统启动结束

boot下的grub目录下的相关文件说明:

主要是由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所在的分区上的文件系统;

注意:能看到启动菜单实际就已经过了1.5阶段了,进入2阶段

stage2:磁盘分区(/boot/grub/stage2)删除系统无法启动

根据stage2阶段文件定义内容找grub.conf文件然后根据这个文件里定义的内容找boot下的内vmlinuz...与驱动模块initramfs...,至此由bootloader到grub然后由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配置文件详解:

[[email protected] grub]# ll /etc/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 #启动内核选定的内核或操作系统是进行的认证


进入单用户模式:

1)重启按esc键选定grub菜单,然后输入e进入可选菜单

2)光标移动到kernel ...那一行,再敲入“e”进入命令行编辑

3)在选定的kernel那一行后面输入  1 ,s  或者  single

3)然后输入b键重启进入单用户模式

 6、根切换

在挂载根文件系统时为了避免内核中有bug或操作过程中有bug导致根文件系统被损坏,先只读挂载根文件系统,加载完成后才读写挂载,完成整个挂载根文件系统后,直接去找/sbin/init程序,即开始运行用户空间的第一个程序。

用户空间启动流程init

7、/sbin/init程序    

init程序主要依赖于配置文件:/etc/inittab,大体分为:设定默认启动级别 --> 设定系统初始化脚本 --> 启动对应级别的服务 --> 打印各终端登录界面(如果级别为3处理提供文本登录界面,如果级别为5还提供图形登录界面)

8、设置默认运行级别

(1)运行级别:为了系统的运行或维护等目的而设定的机制

0-6:共7个级别;

0:关机,shutdown

1:单用户模式(single user),root用户,无须认证,维护模式;

2:多用户模式(multi user),会启动网络功能,但不会启动NFS,维护模式;

3:多用户模式(multi user),完全功能模式,文本界面;

4:预留级别:目前无特别使用目的,但习惯以同3级别功能使用;

5:多用户模式(multi user),完全功能模式,图形界面;

6:重启,reboot

读取配置文件:/etc/inittab

(2)配置文件:

/etc/inittab定义了很多功能,每一行定义一种操作(action)以及与之对应的process(仅适用于CentOS 5),一行就定义了init要执行的任务,甚至是一堆任务,每一行的语法格式为: id:runlevels:action:process

id为一个任务的标识符;

runlevels:在哪些运行级别下启动此任务;例:3,2345,也可为空表示所有级别;

action:在什么条件下启动此任务;

wait:等待切换至此任务所在的级别时执行一次(刚刚切换进来时);

respawn:一旦此任务终止时,就自动重启;(如:登录终端执行logout登出后会再次启动)

initdefault:设定默认允许级别;此时process省略为空;

sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit脚本;(CentOS 5,6都用到此脚本,CentOS 7是靠systemd完成的),在CentOS 6中仅保留此配置文件中设定启动运行级别的功能。

process:具体任务;通常为应用程序,或脚本,或二进制的程序,取决于自定义。

9、系统初始化脚本

系统初始化脚本:/etc/rc.d/rc.sysinit

(1)设置主机名;

(2)设置欢迎信息;

(3)激活udev和selinux;

(4)挂载/etc/fstab文件中定义的所有文件系统;

(5)检测根文件系统,并以读写方式重新挂载根文件系统;(重新挂载是指根文件检测完之后)

(6)设置系统时钟;

(7)根据/etc/sysctl.conf文件来设置内核参数;

(8)激活lvm即软raid设备;

(9)激活swap设备;

(10)加载额外设备的驱动程序;(内核加载驱动只加载根文件系统的)

(11)清理操作;

注意:在init配置文件:/etc/inittab中,有一行内容是定义/etc/rc.d/rc.sysinit,此脚本文件是负责完成系统初始化的脚本文件。

10、关闭/启动对应级别下的服务

脚本文件/etc/rc.d/rc作用为当级别切换时启动或停止服务;此脚本接受传递的参数给脚本中$runlevel变量,然后,读取/etc/rc$runlevel.d/K*和/etc/rc$runlevel.d/S*所有文件,这些文件就是为什么开机启动后,有些服务会自动启动,有些服务没有启动的原因。

K*:要停止的服务,K##*,优先级,数字越小,越优先关闭,依赖的服务先关闭,然后再关闭被依赖的。

S*:要启动的服务,S##*,优先级,数字越小,越是优先启动,被依赖的服务先启动,而依赖的服务后启动。

/etc/rc.d/init.d目录还有个链接目录为/etc/init.d目录,这两目录下文件相同。

如上诉定义将会启动3级别下的以S打头的进程:

图示:

11、启动终端(图形终端)

操作系统启动完成

三、系统启动流程总结

内核级别:

1.POST做开机启动时候的硬件检测功能

2.BootSequence(BIOS)启动加载主引导分区MBR中的引导加载器程序BootLoader

在LInux现行的BootLoader是三段划分(打破446字节限制)的GRUB程序,

第1段写在BootLoader中

第1.5段在其后扇区用于文件系统的引导

第2段在boot/grub中提供内部接口和调用系统内核kernel

3.Kernel识别硬件、加载驱动、只读挂载根文件系统、同时交付给用户空间第一个程序/sbin/init

此处特别要注意,系统发行商为了适应多种硬件接口驱动调用,会在第一次安装系统时候,自动识别硬件接口,并调用唯一驱动程序来生成ramdisk文件,以内存当磁盘做虚根,驱动接口后会切换到真实的根文件系统上

CentOS 5系列是initrd,当磁盘映像文件会造成二次缓存缓冲

CentOS 6/7系列改进为initramfs,以文件系统形式可以不二次占用缓存和缓冲

用户空间级别

4./sbin/init接管后更具其配置文件来初始化

5.根据/sbin/init中的配置会设置默认运行级别,以及一些在/etc/init.d/设置的开机服务

6./etc/rc.d/rc.sysinit运行系统初始化脚本,完成系统初始化

7.关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务

8.设置登录终端

done !!!

时间: 2024-09-29 17:40:19

Centos6系统启动详解......的相关文章

10.Linux系统启动详解

10.Linux系统启动详解 ·1.BIOS,负责检查硬件并且查找可启动设备, ·2.MBR:Boot Code, ·bios找到可启动设备后执行其引导代码,MBR的前446字节, ·/boot/grub/stage1内容为当前硬盘MBR的镜像, ·3.执行引导程序-GRUB ·grub是现在Linux使用的主流引导程序,可以用来引导大多数主流系统, ·Linux的grub可以识别windows的启动程序,但windows的会覆盖Linux的,故先windows后Linux, ·grub相关文件

Linux系统启动详解(二)

上节讲到了Linux启动大体流程,及grub的作用,本节主要扯扯initramfs的那些事,并且通过简单修改initramfs,将整体操作系统运行到了内存中. 3       initramfs 3.1     简述 在2.4内核中initrd为boot loader initialized RAM Disk,linux启动前boot loader先将initrd文件解压,并加载到内存中.boot loader加载内核后,会先运行initrd,再switch_root到真正root fs. 在2

linux系统启动详解

要学习linux的命令,我们需要先了解linux系统是如何工作的,这里我们先了解linux是如何在一台电脑上启动加载的!! linux系统启动过程 第一步.  BIOS初始化  1.  BIOS检测所有的外置设备,查看有哪些外围设备在活动区  2.  开始寻找启动磁盘--根据BIOS的设置导找启动文件存放的位置 第二步.执行启动加载器  1. 先到MBR(主引导记录)磁盘导找启动文件,比如:grub /LILO  2. 到boot partition(启动分区)去找启动文件-比如:grub /L

Linux系统启动详解(一)

本篇主要以Centos为例,讲述整个Linux系统启动过程,包括了grub引导,initramfs流程,/sbin/init执行rc.sysinit及rc的大体流程. 另外,本篇有一个实例来说明,将整个操作系统运行在内存的实例(系统默认是使用一块物理磁盘存储操作系统). 1       概述 Linux系统从软件角度,启动大致过程如下: 1)         硬件及BIOS加载,通过启动项找到MBR,读取MBR中的boot loader,即我们常用的grub工具. 2)         boot

Linux入门-8 Linux系统启动详解

系统启动流程 BIOS MBR GRUB KERNEL INIT 单用户修改root密码 GRUB加密 系统启动流程 BIOS MBR: Boot Code 执行引导程序 - GRUB 加载内核 执行init runlevel BIOS Basic Input Output System,一般保存在主板的BIOS芯片中 计算机启动时首先运行BIOS,负责检查硬件并且查找可启动设备 可启动设备在BIOS设置中进行定义,如USB, CDROM, HD MBR 不同的系统有不同的MBR BIOS找到可

Linux系统启动详解(三)

上节已系统initramfs已启动完成,将系统控制权交给了真正的rootfs的/sbin/init,下面就是/sbin/init干活的时间了. 4       /sbin/init initramfs的init脚本,通过switch_root命令,切换到真正的root fs后,执行的第一个程序就是root fs下的/sbin/init, 4.1     switch_root swith_root newroot init [arg] eg: initramfs中切换到真正的rootfs命令是s

Linux的启动流程以及GRUB详解

 一.Linux引导和启动流程       概述,计算机电源接通后通过BISO之后,没有问题,就会去硬盘上找到MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁道0柱面1扇区,它记录着主引导记录中包含了硬盘的一系列参数和一段引导程序,其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序(GRUB).GRUB启动引导器是计算机启动过程中运行的第一个真正的软件,GRUB负责加载启动硬盘分区中的操作

CentOS 5,6 系统启动流程详解

一.linux 组成介绍 1.linux 组成: Linux: kernel+rootfs(根文件系统) kernel: 进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs: 程序和glibc 库:函数集合, function, 调用接口(头文件负责描述) 过程调用: procedure,无返回值 函数调用: function 程序:二进制执行文件 2.内核设计流派: 单内核(monolithic kernel): Linux 把所有功能集成于同一个程序 微内核(micro

使用U盘安装CentOS6.2过程详解

很多人都有安装Linux的经历,无非就是插张光盘或者USB到主机上,然后按照提示一步一步进行配置,完了重启一遍,OK.但是这个过程中,系统到底做了些什么事情呢?下面就简单地来说一说. 1. 可启动盘的历史 普通的光盘是基于ISO-9660的标准发展起来的,在光盘上数据被组织为帧和扇区,一个扇区包含98帧,共2352字节,一个700M的CD大概包含了360000个扇区.在大约1994~1995年的时候,凤凰科技(Phoenix Technologies)和IBM的两个牛人(Curtis Steve