CentOS系统启动流程

POST-->Boot Sequence(BIOS) -->bootloader(MBR)-->Kernel-->rootfs(readonly)-->/sbin/init

POST:加电自检:CPU去特定的位置去寻找代码,而代码的贮存者ROM就应该在特定的位置。与此同时POST自检还会检测内存,主板,显卡,声卡,网卡等I/O设备,等一切没有问题则自检完成。

Boot Sequence(BIOS):按次序查找各引导设备,第一个有引导程序的设备则是本次启动要用到的设备;

BIOS:加载可选的启动设备,其中存放着各种I/O设备的信息参数、系统时间、启动寻找顺序,所以检测BIOS是否正常。

MBR:硬盘的主引导记录,存放在第0磁道第0扇区。

512bytes:前446字节用来存放bootloader

64bytes:之后64字节用来存放分区表

2bytes:最后2字节被魔数占用

bootloader:引导加载器

Windows:ntloader

Linux:

LILO:LIinux LOader

GRUB:Grand Uniform Bootloader

其中GRUB分为3步:

bootloader:1st stage

Partition:filesystem driver,1_5 stage

Psrtition:/boot/grub,2nd stage

功能:提供一个菜单,允许用户选择要启动的系统或不同的内核版本;用户选定的             内核装载到RAM中的特存空间中,解压、展开,而后把控制系统权移交给内核;

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

init程序的类型:

CentOS 5-:SysV init

配置文件:/etc/inittab

CentOS 6:Upstart

配置文件:/etc/inittab;/etc/init/*.conf

CentOS 7:Systemd

配置文件:/usr/lib/systemd/system/, /etc/systemd/system/

/sbin/init:被内核第一个调用的程序,CentOS 5 :SysV init;配置文件为/etc/inittab。

[root@localhost ~]# cat /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used 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:3:initdefault:

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

[root@localhost rc.d]# ll
total 60
drwxr-xr-x. 2 root root  4096 Dec 29 12:01 init.d
-rwxr-xr-x. 1 root root  2617 Jul 24 16:14 rc
drwxr-xr-x. 2 root root  4096 Dec 29 12:01 rc0.d
drwxr-xr-x. 2 root root  4096 Dec 29 12:01 rc1.d
drwxr-xr-x. 2 root root  4096 Dec 29 12:01 rc2.d
drwxr-xr-x. 2 root root  4096 Dec 29 12:01 rc3.d
drwxr-xr-x. 2 root root  4096 Dec 29 12:01 rc4.d
drwxr-xr-x. 2 root root  4096 Dec 29 12:01 rc5.d
drwxr-xr-x. 2 root root  4096 Dec 29 12:01 rc6.d
-rwxr-xr-x. 1 root root   220 Jul 24 16:14 rc.local
-rwxr-xr-x. 1 root root 20097 Jul 24 16:14 rc.sysinit

0-6:7个级别;

0:关机, shutdown

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

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

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

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

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

6:重启,reboot

其中3,5是默认级别

级别切换:init # (0-6)

级别查看:who -r

runlevel

每行定义一种action以及与之对应的process

id:runlevels:action:process

id:一个任务的标识符;

runlevels:在哪些级别启动此任务;#,###,也可以为空,表示所有级别;

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

process:任务;

action:

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

respawn:一旦此任务终止,就自动重新启动之;

initdefault:设定默认运行级别;此时,process省略;

sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit脚本;

例如:

id:3:initdefault:  :设定默认级别为3;

si::sysinit:/etc/rc.d/rc.sysinit  :设定系统初始化方式

[root@localhost rc3.d]# ll
total 0
lrwxrwxrwx. 1 root root 16 Dec  6 12:28 K01smartd -> ../init.d/smartd
lrwxrwxrwx. 1 root root 17 Dec  6 12:31 K05wdaemon -> ../init.d/wdaemon
lrwxrwxrwx. 1 root root 16 Dec  6 12:29 K10psacct -> ../init.d/psacct
lrwxrwxrwx. 1 root root 19 Dec  6 12:25 K10saslauthd -> ../init.d/saslauthd
lrwxrwxrwx. 1 root root 22 Dec  6 12:25 K15htcacheclean -> ../init.d/htcacheclean
lrwxrwxrwx. 1 root root 15 Dec  6 12:25 K15httpd -> ../init.d/httpd
lrwxrwxrwx  1 root root 18 Dec 29 12:01 K15svnserve -> ../init.d/svnserve
lrwxrwxrwx. 1 root root 24 Dec  6 12:28 K30spice-vdagentd -> ../init.d/spice-vdagentd
lrwxrwxrwx  1 root root 19 Dec 29 08:55 K35vncserver -> ../init.d/vncserver
lrwxrwxrwx. 1 root root 17 Dec  6 12:25 K50dnsmasq -> ../init.d/dnsmasq
lrwxrwxrwx. 1 root root 13 Dec  6 12:25 K60nfs -> ../init.d/nfs
lrwxrwxrwx. 1 root root 18 Dec  6 12:28 K61nfs-rdma -> ../init.d/nfs-rdma
lrwxrwxrwx. 1 root root 20 Dec  6 12:25 K69rpcsvcgssd -> ../init.d/rpcsvcgssd
lrwxrwxrwx. 1 root root 17 Dec  6 12:22 K73winbind -> ../init.d/winbind
lrwxrwxrwx. 1 root root 14 Dec  6 12:25 K74ntpd -> ../init.d/ntpd
lrwxrwxrwx. 1 root root 17 Dec  6 12:25 K75ntpdate -> ../init.d/ntpdate
lrwxrwxrwx. 1 root root 19 Dec  6 12:28 K75quota_nld -> ../init.d/quota_nld
lrwxrwxrwx  1 root root 24 Dec 29 12:01 K84wpa_supplicant -> ../init.d/wpa_supplicant
lrwxrwxrwx  1 root root 20 Dec 29 08:55 K87multipathd -> ../init.d/multipathd
lrwxrwxrwx. 1 root root 21 Dec  6 12:21 K87restorecond -> ../init.d/restorecond
lrwxrwxrwx. 1 root root 20 Dec  6 12:21 K89netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 15 Dec  6 12:21 K89rdisc -> ../init.d/rdisc
lrwxrwxrwx. 1 root root 22 Dec  6 12:25 K92pppoe-server -> ../init.d/pppoe-server
lrwxrwxrwx. 1 root root 14 Dec  6 12:28 K95rdma -> ../init.d/rdma
lrwxrwxrwx. 1 root root 14 Dec  6 12:28 K99rngd -> ../init.d/rngd
lrwxrwxrwx. 1 root root 17 Dec  6 12:27 S01sysstat -> ../init.d/sysstat
lrwxrwxrwx. 1 root root 22 Dec  6 12:27 S02lvm2-monitor -> ../init.d/lvm2-monitor
lrwxrwxrwx  1 root root 16 Dec 29 08:55 S07iscsid -> ../init.d/iscsid
lrwxrwxrwx. 1 root root 19 Dec  6 12:25 S08ip6tables -> ../init.d/ip6tables
lrwxrwxrwx. 1 root root 18 Dec  6 12:21 S08iptables -> ../init.d/iptables
lrwxrwxrwx. 1 root root 17 Dec  6 12:21 S10network -> ../init.d/network
lrwxrwxrwx. 1 root root 16 Dec  6 12:29 S11auditd -> ../init.d/auditd
lrwxrwxrwx. 1 root root 21 Dec  6 12:09 S11portreserve -> ../init.d/portreserve
lrwxrwxrwx. 1 root root 17 Dec  6 12:25 S12rsyslog -> ../init.d/rsyslog
lrwxrwxrwx. 1 root root 18 Dec  6 12:28 S13cpuspeed -> ../init.d/cpuspeed
lrwxrwxrwx. 1 root root 20 Dec  6 12:26 S13irqbalance -> ../init.d/irqbalance
lrwxrwxrwx  1 root root 15 Dec 29 12:01 S13iscsi -> ../init.d/iscsi
lrwxrwxrwx. 1 root root 17 Dec  6 12:13 S13rpcbind -> ../init.d/rpcbind
lrwxrwxrwx. 1 root root 19 Dec  6 12:22 S15mdmonitor -> ../init.d/mdmonitor
lrwxrwxrwx  1 root root 16 Dec 29 08:55 S20lldpad -> ../init.d/lldpad
lrwxrwxrwx  1 root root 14 Dec 29 08:55 S21fcoe -> ../init.d/fcoe
lrwxrwxrwx. 1 root root 20 Dec  6 12:05 S22messagebus -> ../init.d/messagebus
lrwxrwxrwx. 1 root root 24 Dec  6 12:25 S23NetworkManager -> ../init.d/NetworkManager
lrwxrwxrwx  1 root root 17 Dec 29 12:01 S24nfslock -> ../init.d/nfslock
lrwxrwxrwx  1 root root 17 Dec 29 12:01 S24rpcgssd -> ../init.d/rpcgssd
lrwxrwxrwx. 1 root root 26 Dec  6 12:27 S25blk-availability -> ../init.d/blk-availability
lrwxrwxrwx. 1 root root 14 Dec  6 12:21 S25cups -> ../init.d/cups
lrwxrwxrwx. 1 root root 15 Dec  6 12:21 S25netfs -> ../init.d/netfs
lrwxrwxrwx. 1 root root 15 Dec  6 12:28 S26acpid -> ../init.d/acpid
lrwxrwxrwx. 1 root root 19 Dec  6 12:24 S26haldaemon -> ../init.d/haldaemon
lrwxrwxrwx. 1 root root 19 Dec  6 12:21 S26udev-post -> ../init.d/udev-post
lrwxrwxrwx. 1 root root 16 Dec  6 12:26 S28autofs -> ../init.d/autofs
lrwxrwxrwx. 1 root root 19 Dec  6 12:26 S50bluetooth -> ../init.d/bluetooth
lrwxrwxrwx  1 root root 15 Dec 29 12:01 S50kdump -> ../init.d/kdump
lrwxrwxrwx. 1 root root 14 Dec  6 12:28 S55sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 17 Dec  6 12:25 S80postfix -> ../init.d/postfix
lrwxrwxrwx. 1 root root 19 Dec  6 12:15 S82abrt-ccpp -> ../init.d/abrt-ccpp
lrwxrwxrwx. 1 root root 15 Dec  6 12:15 S82abrtd -> ../init.d/abrtd
lrwxrwxrwx. 1 root root 15 Dec  6 12:25 S90crond -> ../init.d/crond
lrwxrwxrwx. 1 root root 13 Dec  6 12:25 S95atd -> ../init.d/atd
lrwxrwxrwx. 1 root root 19 Dec  6 12:27 S99firstboot -> ../init.d/firstboot
lrwxrwxrwx. 1 root root 11 Dec  6 12:21 S99local -> ../rc.local

l0:0:wait:/etc/rc.d/rc  0

l1:1:wait:/etc/rc.d/rc  1

…………

l6:6:wait:/etc/rc.d/rc  6

意味着去启动或关闭/etc/rc.d/rc3.d/目录下的服务脚本所控制服务;

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

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

其中rc脚本框架如下:

for  srv  in  /etc/rc.d/rc#.d/K*; do

$srv stop

done

for  srv  in  /etc/rc.d/rc#.d/S*; do

$srv  start

done

chkconfig命令:管控/etc/init.d/下的每个服务脚本在各级别下的启动或关闭状态:

查看:chkconfig --list [name]

添加:chkconfig --add name

被添加的服务脚本的定义格式之一:

#!/bin/bash

#

# chkconfig 级别 启动优先级 关闭优先级

# description

删除:chkconfig --del name

修改指定链接类型:

chkconfig [--level LEVELS] name <on|off|reset>

--level LEVELS:指定要控制的级别:默认为2345;                     注意:正常级别下,最后启动的一个服务S99local没有链接至/etc/init.d下的               某脚本,而是链接至了/etc/rc.d/rc.local (/etc/rc.local)脚本;因此,不               便或不需写为服务脚本的程序期望能开机自动运行时,直接放置于此脚本文件中               即可。

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

[root@localhost rc.d]# cat rc.sysinit
#!/bin/bash
#
# /etc/rc.d/rc.sysinit - run once at boot time
#
# Taken in part from Miquel van Smoorenburg's bcheckrc.
#HOSTNAME=$(/bin/hostname)set -mif [ -f /etc/sysconfig/network ]; then. /etc/sysconfig/network
fi
if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; thenHOSTNAME=localhost
......

(1) 设置主机名;

(2) 设置欢迎信息;

(3) 激活udev和selinux;

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

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

(6) 设置系统时钟;

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

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

(9) 激活swap设备;

(10) 加载额外设备的驱动程序;

(11) 清理操作

总结(用户空间的启动流程): /sbin/init (/etc/inittab)

设置默认运行级别 --> 运行系统初始化脚本,完成系统初始化 --> 关闭对应级别下需要         停止的服务,启动对应级别下需要开启的服务--> 设置登录终端 [--> 启动图形终端]

CentOS 6:

init程序:upstart,但依然为/sbin/init,其配置文件:

/etc/init/*.conf, /etc/inittab(仅用于定义默认运行级别)

注意:*.conf为upstart风格的配置文件;

CentOS 7:

init程序:systemd,配置文件:/usr/lib/systemd/system/*,  /etc/systemd/system/*

完全兼容SysV脚本机制;因此,service命令依然可用;不过,建议使用systemctl命           令来控制服务;

# systemctl  {start|stop|restart|status}  name[.service]

转载于:https://blog.51cto.com/yaoliang83/1730916

CentOS系统启动流程相关推荐

  1. CentOS系统启动流程及GRUB文件说明

    CentOS系统启动流程及GRUB文件说明 时间:2013-10-24 01:33来源:"过程就是为了实现结果" 博客 作者:本站 举报 点击:1114次 id="ifr ...

  2. CentOS系统启动流程和系统初始化

    CentOS系统启动流程和系统初始化 时间:2014-03-04 00:49来源:51cto.com 作者:"西风瘦猪" 博客 举报 点击:1955次 id="ifram ...

  3. CentOS系统启动流程你懂否

    一.Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理.内存管理.网络协议栈.文件系统.驱动程序. IPC(Inter-Process Communicati ...

  4. 学习笔记之centos系统启动流程

     CentOS 系统的启动流程: 简介: (内核级别)POST -读取-> BootSequence(在BIOS中) --> BootLoader(在MBR中)--> Kernel( ...

  5. 图解CentOS系统启动流程

    当我们按下开机键后,系统背后的秘密我们是否了解呢?这里,我带大家探索一下linux系统开机背后的秘密. 1.加电自检 主板在接通电源后,系统首先由POST程序来对内部各个设备进行检查,自检中如发现有错 ...

  6. CentOS 6系统启动流程细微解读,不可忽略引导扇区的1.5阶段。

    一.Linux内核的组成 Linux系统的组成部分:内核+根文件系统 内核:进程管理.内存管理.网络协议栈.文件系统.驱动程序.安全功能(selinux) IPC(Inter-Process Comm ...

  7. +++++++X86平台系统启动流程

    操作系统的组成.内核的功能.库.函数.头文件.函数名.Linux内核.X86平台系统启动流程 忘记密码如何登陆系统 操作系统的组成:kernel + rootfs , kernel + 应用程序 ke ...

  8. 内核电源管理器已启动关机转换_Linux系统启动流程

    Linux系统启动流程 电源开关 (手动操作按钮 / 加电自启动 ) 加载bios : 最接近硬件的软件 各家厂商都会开发适合自己主板的bios BIOS加电自检 只有硬件没有问题的情况下才能运行软件 ...

  9. Linux系统启动流程(4)制作自定义linux之一

    Linux系统启动流程(4)制作自定义linux之一 平时使用的服务器类型的linux系统一般都会装载各种软件与服务,而在某些情况下,并不能一直直接使用公司管理的系统,一是可能会出现故障,二是在处理一 ...

最新文章

  1. PMP®考试是什么机构
  2. Android Studio编译卡死
  3. MySQL常用维护管理工具
  4. React 16 Jest单元测试 之 Jest工具
  5. CSS文件添加 @charset utf-8; 可能会引起样式在IE6下失效
  6. 【计算机网络】TCP/IP 模型与OSI参考模型的比较
  7. jvm感知docker容器参数
  8. OpenResty实现LNMP的缓存前移(到达nginx前端层面)
  9. TopCoder SRM502 Div1 1000 动态规划
  10. AutoMapper搬运工之初探AutoMapper
  11. 敏感词过滤和谐社会1.0版
  12. OJ1047: 对数表(C语言)
  13. 智能电视linux刷安卓,智能电视安卓盒子刷机ROOT成砖的解决办法
  14. 【Android 视频硬件编码】在Native层实现MediaCodec H264 编码 Demon
  15. html教程:网页字体的设置
  16. Javafx Scene Builder使用教程
  17. Docker官方文档学习笔记(二):Docker Desktop入门
  18. MarkDown图片缩放
  19. Visitor模式实践
  20. window操作系统下的句柄机制说明

热门文章

  1. 配置hibernate手动配置
  2. 函数组:BUSG(SAP 商业图形库)
  3. 触手可得的云原生 | 阿里云中间件发布多项新功能
  4. details和summary
  5. Centos 编译安装sphinx-0.9.9全文检索
  6. 【JAVA集合类(大公司面试喜欢问的) 】
  7. PMP考前复习题 系列三
  8. Android深入浅出系列之实例应用—简单的手指拖动图片,图片滑来滑去显示应用Gallery和BaseAdapter以及ImageView的使用...
  9. “平头哥”半导体公司
  10. 20018-05-16 第十天