CentOS系统启动流程
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系统启动流程相关推荐
- CentOS系统启动流程及GRUB文件说明
CentOS系统启动流程及GRUB文件说明 时间:2013-10-24 01:33来源:"过程就是为了实现结果" 博客 作者:本站 举报 点击:1114次 id="ifr ...
- CentOS系统启动流程和系统初始化
CentOS系统启动流程和系统初始化 时间:2014-03-04 00:49来源:51cto.com 作者:"西风瘦猪" 博客 举报 点击:1955次 id="ifram ...
- CentOS系统启动流程你懂否
一.Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理.内存管理.网络协议栈.文件系统.驱动程序. IPC(Inter-Process Communicati ...
- 学习笔记之centos系统启动流程
CentOS 系统的启动流程: 简介: (内核级别)POST -读取-> BootSequence(在BIOS中) --> BootLoader(在MBR中)--> Kernel( ...
- 图解CentOS系统启动流程
当我们按下开机键后,系统背后的秘密我们是否了解呢?这里,我带大家探索一下linux系统开机背后的秘密. 1.加电自检 主板在接通电源后,系统首先由POST程序来对内部各个设备进行检查,自检中如发现有错 ...
- CentOS 6系统启动流程细微解读,不可忽略引导扇区的1.5阶段。
一.Linux内核的组成 Linux系统的组成部分:内核+根文件系统 内核:进程管理.内存管理.网络协议栈.文件系统.驱动程序.安全功能(selinux) IPC(Inter-Process Comm ...
- +++++++X86平台系统启动流程
操作系统的组成.内核的功能.库.函数.头文件.函数名.Linux内核.X86平台系统启动流程 忘记密码如何登陆系统 操作系统的组成:kernel + rootfs , kernel + 应用程序 ke ...
- 内核电源管理器已启动关机转换_Linux系统启动流程
Linux系统启动流程 电源开关 (手动操作按钮 / 加电自启动 ) 加载bios : 最接近硬件的软件 各家厂商都会开发适合自己主板的bios BIOS加电自检 只有硬件没有问题的情况下才能运行软件 ...
- Linux系统启动流程(4)制作自定义linux之一
Linux系统启动流程(4)制作自定义linux之一 平时使用的服务器类型的linux系统一般都会装载各种软件与服务,而在某些情况下,并不能一直直接使用公司管理的系统,一是可能会出现故障,二是在处理一 ...
最新文章
- PMP®考试是什么机构
- Android Studio编译卡死
- MySQL常用维护管理工具
- React 16 Jest单元测试 之 Jest工具
- CSS文件添加 @charset utf-8; 可能会引起样式在IE6下失效
- 【计算机网络】TCP/IP 模型与OSI参考模型的比较
- jvm感知docker容器参数
- OpenResty实现LNMP的缓存前移(到达nginx前端层面)
- TopCoder SRM502 Div1 1000 动态规划
- AutoMapper搬运工之初探AutoMapper
- 敏感词过滤和谐社会1.0版
- OJ1047: 对数表(C语言)
- 智能电视linux刷安卓,智能电视安卓盒子刷机ROOT成砖的解决办法
- 【Android 视频硬件编码】在Native层实现MediaCodec H264 编码 Demon
- html教程:网页字体的设置
- Javafx Scene Builder使用教程
- Docker官方文档学习笔记(二):Docker Desktop入门
- MarkDown图片缩放
- Visitor模式实践
- window操作系统下的句柄机制说明
热门文章
- 配置hibernate手动配置
- 函数组:BUSG(SAP 商业图形库)
- 触手可得的云原生 | 阿里云中间件发布多项新功能
- details和summary
- Centos 编译安装sphinx-0.9.9全文检索
- 【JAVA集合类(大公司面试喜欢问的) 】
- PMP考前复习题 系列三
- Android深入浅出系列之实例应用—简单的手指拖动图片,图片滑来滑去显示应用Gallery和BaseAdapter以及ImageView的使用...
- “平头哥”半导体公司
- 20018-05-16 第十天