centos启动流程

centos启动流程

1、加电自检(power on system test POST)

加电,就是按下电源键使电脑主机通电,在诸多硬件设备中有一个被称为CMOS设备在计算机启动的过程中起到了至关重要的作用,CMOS在加电之后会启动保存在它上面的BIOS程序,即基本输入输出系统(Basic Input Output System)。自检,主要是检测各个硬件设备是否能够正常运行,如CPU,硬盘,内存等等。自检功能的实现是由BIOS控制的,BIOS程序会根据CMOS上面记录的配置信息去读取其他硬件设备信息并检测其是否存在并能正常运行,之后进行硬件设备的初始化。

在开机时按ESC键或DEL键可以进入BIOS程序的设置页面,在此页面可以设置CMOS的相关参数。

2、引导加载程序(Boot Loader)的功能

引导加载程序(Boot Loader)是一个统称,它的主要功能就是去识别、加载操作系统中的核心文件并提交到内存中运行。由于不同的操作系统的文件格式不一样,因此每种操作系统都有自己引导加载程序。既然 boot loader 是一个程序那么它必须要保存在硬件设备中,此设备一般为硬盘的第一个扇区,也就是我们常说的主引导扇区MBR(Master Boot Record)。

Windows系统的引导加载程序是 ntloader,它只能启动Windows系统 。
Linux系统的引导加载程序,早期PC机用的的是 LILO(LInux LOader) ,现在 LILO 主要用于安卓系统的启动引导;现在PC机中一般使用的是 GRUB2。

引导加载程序的主要功能:

a、提供菜单:用户可以选择不同的启动项
b、加载内核文件:直接指向可启动的程序区段来开启操作系统
c、转交其他bootloader:将引导装载功能转交个其他loader负责

在学习磁盘管理的时候,我们知道每个磁盘分区都会有一个启动扇区,操作系统默认会在这个扇区中安装bootloader程序。Windows系统默认是同时在MBR和每个磁盘分区中安装 boot loader 的,而Linux系统在安装时会询问我们是否将 bootloader 程序安装到MBR上。因此我们安装双系统时要先安装Windows在安装Linux。

3、加载系统内核(Kernel)和 ramdisk的功能

我们知道通过bootloader的管理而开始读取内核文件后,接下来,Linux会将内核解压缩到内存中,并利用内核的功能开始检查各个硬件设备,也就是说内核会自己再检测一次硬件,而不会使用BIOS检测到硬件信息,此时内核就开始接管BIOS后的工作了。

那么Linux内核文件存放在哪里呢?答案是/boot目录中,并且以 vmlinuz-VERSION 命名,但是boot目录是挂载在根(/)目录下的而此时系统还没有启动,根目录是不存在的,也就是说没有办法直接将/boot目录的内核文件加载到内存中。怎么办?

此时就要借用虚拟文件系统(InitialRAM DISK)了,简写为ramdisk,此文件系统也同样存放在/boot目录中,它作用在于启动正在的根目录。ramdisk在系统安装时会根据用户主机的硬件设备自动生成。ramdisk在不同系统的称呼不同,centos 5 中 /boot/initrd-VERSION-release.img,centos 6,7 中 /boot/initramfs-VERSION-release.img。

CentOS 5

centos启动流程

CentOS 6

centos启动流程

bootloader可以加载kernel和ramdisk至内存中,然后让ramdisk加压缩为根目录,kernel就能够借此加载适当的驱动程序,最终释放虚拟文件系统,并挂载实际的根目录文件系统(只读挂载),然后开始后续的正常启动流程。

其实,虚拟文件系统是用在当系统启动时无法挂载根目录的情况下的,比如你的根目录在特殊的磁盘接口(USB STAT SCSI)中,或者你的文件系统较为特殊(LVM RAID)。如果你的Linux系统安装在IDE接口的磁盘上,并且使用 ext2或ext3 文件系统,那么即使没有ramdisk也可以正常启动Linux,但是IDE接口的磁盘已经很少使用了。

补充:kernel初始化的功能

探测可识别到的所有硬件设备
加载硬件驱动程序(可能借助于ramdisk 加载驱动)
以只读方式挂载根文件系统
运行用户空间的第一个应用程序:/sbin/init

以上是内核空间中的启动流程。

4、启动用户空间的第一个进程/sbin/init

注意:至此以后的内容都是用户空间内的操作,并且以CentOS 5为例,其实CentOS 6的用户空间的启动流程根5的是类似的,只不过它将配置文件分成多个/etc/init/*.conf,/etc/inittab(此文件仅用于定义默认运行级别)。

在内核加载完毕并进行完硬件检测与驱动程序加载后,此时内核会主动调用第一个进程/sbin/init。init程序的主要功能是:准备程序的运行环境,包括系统的主机名、网络配置、文件系统格式及其他服务的启动管理,而这些操作都是通过/etc/inittab文件来规划的,在此文件中设置了默认的启动执行等级(runlevel)。先来查看一下/etc/inittab文件的内容(以centos 5 为例)

[root@station1 boot]# cat /etc/inittab
#
# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#
# Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
#               Modified for RHS Linux by Marc Ewing and Donnie Barnes
#

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:5:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Trap CTRL-ALT-DELETE (工作中此项操作需要小心,可以用#号注释掉)
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# When our UPS tells us power has failed, assume we have a few minutes
# of power left.  Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.  
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"


# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon

从上面可以看到系统有0-6共7个运行级别(本机的默认级别为5),分别如下: 0 :关机 1 :单用户模式(root 自动登录), single, 维护模式 2 :多用户模式,启动网络功能,但不会启动NFS ;维护模式 3 :多用户模式,正常模式;文本界面 4 :预留级别;可同3 级别 5 :多用户模式,正常模式;图形界面 6 :重启

此文件每一行定义一种 action 以及与之对应的process命令。格式为 id:runlevel:action:process ,其中action的常用值有:

wait:  切换至此级别运行一次process
respawn :此process 终止,就重新启动之
ctrlalttab:代表按下Ctrl+Alt+Del三个组合键是否可以重启系统
initdefault :设定默认运行级别;process 省略
sysinit :设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit

常用的级别为3、5,1模式多用来系统维护,相当于Windows的安全模式。可以使用 runlevel 命令和 who -r 命令查看当期系统的级别。级别切换可以使用init #(#:0-6)命令

centos启动流程

5、初始化脚本(/etc/rc.d/rc.sysinit)

/etc/rc.d/rc.sysinit文件是Linux系统运行的第一个脚本,主要是用来设置系统环境的。此脚本所做的事情主要有以下几点:

(1)  设置主机名
(2)  设置欢迎信息
(3)  激活udev(Linux kernel 2.6系列的设备管理器)和 selinux
(4)  挂载/etc/fstab 文件中定义的文件系统
(5)  检测根文件系统,并以读写方式重新挂载根文件系统
(6)  设置系统时钟
(7)  激活swap 设备
(8)  根据/etc/sysctl.conf 文件设置内核参数
(9)  激活lvm 及software raid 设备
(10)  加载额外设备的驱动程序
(11)  清理操作

6、关闭或启动对应级别下的服务

在/etc/rc.d/rc.sysinit初始化系统环境后,系统将会关闭或启动对应级别下的服务,此处以/etc/inittab中默认的5级别为例。先看一下/etc/rc.d目录的内容(下图)。

centos启动流程

可以看到每个级别都有与之对应的目录,而每个目录里面就记录的就是该级别要启动或关闭的服务(下图,级别5)。

centos启动流程

以大写“K”开头的是要关闭的服务,大写“S”开头的是要启动的服务,后面接的数字为此服务关闭或开启的优先级。这些服务的文件都是链接到/etc/rc.d/init.d目录下对应的文件的。

7、启动终端

在完成了前面的所有操作之后,系统会调用/sbin/mingtty命令启动终端,用户输入了账号密码即可登录系统。至此Linux的整个启动流程结束。

原创文章,作者:pao,如若转载,请注明出处:http://www.178linux.com/45329

(0)
paopao
上一篇 2016-09-11
下一篇 2016-09-11

相关推荐

  • 联通电信双链路内网VRRP+BFD&&PPTP+MYSQL+FreeRadius实现IDC堡垒机连接IDC机房

    一、具体需求与实现 1、多wan:两条宽带接入链路,使用VRRP+BFD技术,实现链路冗余; 2、IDC机房远程管理和登录限制:使用PPTP+freeRadius+mysql实现VPN,限制指定网段或IP进行拨号认证登录IDC机房,并编写脚本检查非法用户登录IDC机房服务器情况; 3、内网VLAN划分:利于安全管理、IP分流和带宽限制; 4、内网监控:使用N…

    Linux干货 2016-08-22
  • 第八周:网络基础知识和shell脚本练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别; 网桥:是连接两个局域网的基于MAC地址数据存储转发设备,工作于数据链路层 集线器:所有端口处于同一个广播域和冲突域中,带宽共享,工作于物理层 二层交换机:多端口网桥,一个端口一个冲突域,默认所有端口位于同一个广播域中,可以划分vlan,隔离广播域,带宽独享 三层交换机:具有路由功…

    Linux干货 2016-11-21
  • 正则表达式—正则表达式详解

    grep使用正则表达式进行匹配时,将大大提高效率和精准性,正则表达式概括分为基本正则表达式和扩展正则表达式。 一、基本正则表达式   字符匹配元字符         .        &nb…

    Linux干货 2016-07-04
  • Bash的基础特性之命令执行状态返回值和命令行展开

    Bash的基础特性之命令的执行状态 Linux的命令执行结果状态有两种,分别为:1、成功2、失败bash使用特殊变量 $? 保存最近一条命令的执行状态结果使用echo $? 命令来查看命令执行状态返回值:0:成功1-255:失败 示例:         [root@localho…

    Linux干货 2016-11-04
  • KeepAlived的配置及使用!

    此篇博客主要是和大家共同了解一下keepalived的功能及基础配置,以便于牢固掌握,此篇博客共分为三个部分;                ⊙ 简述keepalived的主要功能及安装环境;           &nb…

    2017-05-13
  • N21-第二周博客

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 文件管理命令有复制、删除与移动:cp,mv,rm cp(复制档案或目录) [root@study ~]# cp [-adfilprsu] 源(source) 目标(destination) [root@study ~]# cp [options] source1 source2 s…

    Linux干货 2016-07-16