CentOS的启动流程
1)加载BIOS 的硬件信息,获取第一个启动设备
2)读取第一个启动设备MBR 的引导加载程序(grub) 的启动信息
3)加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4)核心执行init 程序,并获取默认的运行信息
5)init 程序执行/etc/rc.d/rc.sysinit 文件
6)启动核心的外挂模块
7)init 执行运行的各个批处理文件(scripts)
8)init 执行/etc/rc.d/rc.local
9)执行/bin/login 程序,等待用户登录
10)登录之后开始以Shell控制主机
接下来我们根据CentOS的启动流程进行一步步的详解,介绍的内容不深但是能让你对大概流程有个大概的映像。
1)步骤是加载BIOS的硬件信息,获取第一个启动设备
这个步骤的主要是: POST(power on system test):加电自检,主要步骤检测CPU、内存、硬盘等内部设备是否能够正常运行,以及外部设备是否正常存在,自检是由BIOS这个基本输入输出系统实现,它是装载在硬件芯片CMOS之上,CMOS上面有一些配置信息会去读取其他的硬件设备信息检测是否能够正常运行,接下来进行硬件设备的初始化,当初始化步骤完成以后BIOS会列出可以启动的装置,由于不同操作系统文件系统之间的不同,为了避免一个格式信息不兼容会将启动一个管理程序Boot loader,这时我们进入第二个阶段。
2)读取第一个启动设备MBR 的引导加载程序(grub) 的启动信息
3)加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
Boot loader存在于硬盘第一个扇区内就是在MBR(主引导记录)前446字节当中。boot loader的主要功能是为了识别,加载操作系统中的核心文件,并提交到内存中运行,进而来启动对应的操作系统,在boot loader中会提供菜单信息向使用这提供不同的启动项目,来加载不同的操作系统,并将启动管理功能转交给其他的加载程序。
这个时候又到了grub的阶段,在这里有三个阶段 #这个软件有好几个部分,MBR部分就是第一个阶段
primary boot loader :
1st stage #第一阶段里面存放在硬盘的第一个扇区里的446字节也就是MBR部分,这里存放这第二阶段内容的指向
[root@magedu6 ~]# hexdump -C -n /dev/sda -v #MBR的前446字节
eb 8e d0 bc b0 b8 8e d8 8e c0 |.H..............|
fb be 7c bf b9 f3 a4 ea |...|.........!..|
be be 0b c6 fe fe |.....u........u|
f3 eb b4 b0 bb 7c b2 8a |........q...q...|
...省略
000001e0 ff ff fe ff ff e2 3e fe |............>...|
000001f0 ff ff fe ff ff 5f aa |........ ..x_.U.|
1.5 stage #1.5阶段让我们识别/boot驱动446字节记录找到2阶段的内容。意思是通过1阶段里记录的2阶段的内容去模拟一个ext4的文件系统去加载第二阶段的内容。
[root@station159 boot]# ls /boot/grub
device.map grub.conf minix_stage1_5 stage2
e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 ufs2_stage1_5
fat_stage1_5 jfs_stage1_5 splash.xpm.gz vstafs_stage1_5
ffs_stage1_5 menu.lst stage1 xfs_stage1_5
secondary boot loader :2nd stage ,分区文件
这里就是boot loader的最后一个阶段了,这个时候内核可以在虚拟的根文件系统上加载合适的驱动程序来加载硬盘等设备,之后释放虚拟的根文件系统,并以只读的方式挂载磁盘上的根文件系统,之后开始正常的启动过程了 #这个时候以只读的方式挂载原因是防止一些破坏性的操作,等操作系统启动到一定步骤的时候还会重新以读写的方式重新挂载。
ramdisk :辅助的伪根系统,这个系统能够通过boot loader程序将其加载到内存当中,然后这个文件会被解压缩并且在内存中模拟一个根文件系统,这个根文件系统能够提供一个可以运行的程序,这个程序用来加载启动过程中需要的核心模块(RAID,LVM/SCSI等文件系统与磁盘的驱动程序等),加载完成后会协助内核重新呼叫/sbin/init来执行后续的正常启动,而这个程序存在/boot下,属于安装系统的时候临时生成的。这个文件是一个压缩文件
[root@station159 ~]# ll /boot
总计
-rw-r--r-- root root -- config-2.6.-.el5
drwxr-xr-x root root - : grub
-rw------- root root - : initrd-2.6.-.el5.img #CentOS 5里的伪根文件系统文件
drwx------ root root - : lost+found
-rw-r--r-- root root -- symvers-2.6.-.el5.gz
-rw-r--r-- root root -- System.map-2.6.-.el5
-rw-r--r-- root root -- vmlinuz-2.6.-.el5 [root@magedu6 ~]# ll /boot
总用量
-rw-r--r--. root root 5月 config-2.6.-.el6.x86_64
drwxr-xr-x. root root 5月 : efi
drwxr-xr-x. root root 5月 : grub
-rw-------. root root 5月 : initramfs-2.6.-.el6.x86_64.img #CentOS 6模拟出来的根文件系统的文件
-rw-r--r--. root root 5月 symvers-2.6.-.el6.x86_64.gz
-rw-r--r--. root root 5月 System.map-2.6.-.el6.x86_64
-rwxr-xr-x. root root 5月 vmlinuz-2.6.-.el6.x86_64 [root@station159 grub]# cat grub.conf
...省略
#boot=/dev/sda
default=
timeout=
splashimage=(hd0,)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.-.el5)
root (hd0,)
kernel /vmlinuz-2.6.-.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet #当内核加载完毕后启动下面的文件,进行第一次加载
initrd /initrd-2.6.-.el5.img #伪根文件系统
当这个步骤完成的时候就会去执行第四个步骤了。
4)核心执行init 程序,并获取默认的运行信息
在这里会对第四个步骤进行稍微详细的介绍
[root@station159 ~]# cat /etc/inittab
...省略一些介绍
id::initdefault: # 默认的runlevel配置,这里默认的启动级别是3
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit #系统软件运行环境的脚本
#7个不同级别的运行级别,需要启动服务的scripts放置路径。为初始化用户空间环境,会执行许多系统初始化任务。
l0::wait:/etc/rc.d/rc #/etc/rc.d/rc0.d/
...省略了几个级别 # /etc/rc.d/rc#.d
l6::wait:/etc/rc.d/rc #/etc/rc.d/rc6.d/ # Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
#使用ctrl+alt+del #重新启动的配置项目
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 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 + "Power Failure; System Shutting Down"
#当断电后会发一个广播2分钟后关机停电 # If power was restored before the shutdown kicked in, cancel it.
pr::powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
这行会告诉你如果电力恢复了可以停止关机,当然需要在断电后的两分钟以内。 # Run gettys in standard runlevels
::respawn:/sbin/mingetty tty1 #各个终端tty1~tty6由这几行决定
::respawn:/sbin/mingetty tty2 #你也可以手动添加或者注释掉
...省略
::respawn:/sbin/mingetty tty6 #从这里你也能知道了为什么1模式的时候启动不需要密码了把,因为这里没写上。 # Run xdm in runlevel
x::respawn:/etc/X11/prefdm -nodaemon
#图形化界面的模式,也就是Xwindow由这里决定,当然你也能修改成其他级别启动图形化,但是因为一些依赖文件的原因会导致一些问题
[root@magedu6 ~]# cat /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
...省略
id::initdefault:
在6里这个文件重要的一行代码只有这行,设置的默认启动级别,而它其他的配置写在了/etc/init/*.conf里了
[root@magedu6 ~]# ls /etc/init/
ck-log-system-restart.conf rcS.conf
ck-log-system-start.conf rcS-emergency.conf
ck-log-system-stop.conf rcS-sulogin.conf
control-alt-delete.conf readahead-collector.conf
init-system-dbus.conf readahead.conf
kexec-disable.conf readahead-disable-services.conf
plymouth-shutdown.conf serial.conf
prefdm.conf splash-manager.conf
quit-plymouth.conf start-ttys.conf
rc.conf tty.conf
5)init 程序执行/etc/rc.d/rc.sysinit 文件
在init执行的第二步执行系统初始化过程。
6)启动核心的外挂模块
7)init 执行运行的各个批处理文件(scripts)
在系统/etc/rc.d/rc.sysinit初始化完成系统之后,此时系统就已经可以正常工作了,只是还缺少启动时所需要的各项服务,这样主机才能提供一些我们需要的功能,如网络服务、dhcp服务等功能这里通过inittab里面提到的l3:3:wait:/etc/rc.d/rc 3配置了,而这里其实是通过/etc/rc.d/rc3.d/下所有链接文件来决定如何启动或关闭服务;素有以S开头的都被传递start参数启动,所有以K开头的,都被传递stop参数以停止。
而/etc/rc.d/rc3.d/下的所有链接文件都是在/etc/init下面的所有脚本,而这些脚本都必须至少接受四个最基本的参数,{start|stop|status|restart}
脚本在指定级别启动还是停止的控制方法:
这些脚本开头:
#chkconfig : S N N K N #这里的S N N两个N都是表示优先启动级别 而K那里的N则是停止服务时候的级别。
#description: #这一行在centos5里必须准确写,而6里能帮你识别。
而这些符号链接的创建可通过chkconfig命令来实现
-add:为某存放在/etc/init.d的服务在对应的/etc/rc.d/rc0-6.d目录添加符号链接:
-del:把指定SVC_SCRIPTS的在7个级别符号链接统统删除
[root@station159 ~]# chkconfig --list #打印列表
NetworkManager :关闭 :关闭 :关闭 :关闭 :关闭 :关闭 :关闭
acpid :关闭 :关闭 :启用 :启用 :启用 :启用 :关闭
anacron :关闭 :关闭 :启用 :启用 :启用 :启用 :关闭
....省略
ypbind :关闭 :关闭 :关闭 :关闭 :关闭 :关闭 :关闭
yum-updatesd :关闭 :关闭 :启用 :启用 :启用 :启用 :关闭
[root@station159 ~]# chkconfig nfs on #开启服务
nfs :关闭 :关闭 :启用 :启用 :启用 :启用 :关闭
[root@station159 ~]# chkconfig nfs off #关闭服务
nfs :关闭 :关闭 :关闭 :关闭 :关闭 :关闭 :关闭
[root@station159 ~]# chkconfig --level nfs on #开启指定级别的服务
[root@station159 ~]# chkconfig --list
nfs :关闭 :启用 :关闭 :启用 :关闭 :启用 :关闭 #基于 xinetd 的服务: #这里分为独立服务和非独立服务
#xinetd #被称为超级守护进程,他也是服务,被他服务的,叫非独立服务,在centos 7里全部是非独立服务了。 chargen-dgram: 关闭
...省略
time-dgram: 关闭
time-stream: 关闭 [root@station159 ~]# ls /etc/init.d/ #这里的服务都能通过chkconfig 命令修改状态,当然也能通过上面说的修改文件上面的两行。
acpid dund killall nscd single
anacron firstboot krb524 ntpd smartd
apmd functions kudzu pand squid
atd gpm libvirtd pcscd sshd
auditd haldaemon lvm2-monitor portmap syslog
autofs halt mcstrans psacct tux
avahi-daemon hidd mdmonitor rawdevices vncserver
avahi-dnsconfd hplip mdmpd rdisc wdaemon
bluetooth httpd messagebus readahead_early winbind
capi ip6tables microcode_ctl readahead_later wpa_supplicant
conman ipmi multipathd restorecond xfs
cpuspeed iptables netconsole rhnsd xinetd
crond irda netfs rpcgssd ypbind
cups irqbalance netplugd rpcidmapd yum-updatesd
cups-config-daemon iscsi network rpcsvcgssd
dc_client iscsid NetworkManager saslauthd
dc_server isdn nfs sendmail
dnsmasq kdump nfslock setroubleshoot
8)init 执行/etc/rc.d/rc.local
9)执行/bin/login 程序,等待用户登录
10)登录之后开始以Shell控制主机
启动流程的简单版本:post-mbrstage1 --stage1.5--stage2 grub.conf--vmlinuz root=/dev/sda2 , initramf---init--/etc/inittab--/etc/rc.c/rc.sysinit---/etc/rcn.d/s* k*---/etc/rc.d/rc.local--login --X
CentOS 6 启动流程:POST --> Boot Sequence(BIOS) --> Boot Loader -->Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 别 设定默认运行级别 --> 系统初始化脚本 rc.sysinit --> 务 关闭或启动对应级别的服务 --> 启动终端
CentOs 系统启动流程相关的更多相关文章
-
CentOS系统启动流程你懂否
一.Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理.内存管理.网络协议栈.文件系统.驱动程序. IPC(Inter-Process Communicati ...
-
(转)CentOS系统启动流程图文详解
CentOS系统启动流程图文详解. 原文:http://www.linuxidc.com/Linux/2017-03/141966.htm 熟悉系统启动流程对于我们学习Linux系统是非常有帮助的,虽 ...
-
13.1 CentOS系统启动流程介绍
CentOS系统启动流程介绍 本章我们将学习 Linux 启动流程和内核模块管理相关的内容.通过本章我们将学习如下内容: Linux 系统的组成及特点 CentOS 系统的启动流程 开机启动成 gru ...
-
CentOS系统启动流程
CentOS系统启动流程 POST --> Boot Sequence(BIOS) --> Boot Loader(MBR) --> kernel(ramdisk) --> r ...
-
Linux:Day13(上) CentOS系统启动流程
CentOS 5和6的启动流程 Linux:kernel+rootfs kernel:进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs: glibc 库:函数集合,functi ...
-
图解CentOS系统启动流程
当我们按下开机键后,系统背后的秘密我们是否了解呢?这里,我带大家探索一下linux系统开机背后的秘密. 1.加电自检 主板在接通电源后,系统首先由POST程序来对内部各个设备进行检查,自检中如 ...
-
简述Centos系统启动流程
1. Centos5 POST开机自检 运行CMOS中的BIOS程序,加载第一个启动磁盘的Bootloader 由Bootloader读取kernel 通过挂载临时根目录initramfs加载核心模块 ...
-
Centos启动流程及grub legacy
Linux系统的组成部分:内核+根文件系统 内核的功能:进程管理.内存管理.网络管理.文件系统.驱动程序.安全功能 系统在运行时要么就是在运行内核代码,要么就是在运行应用程序代码.如果一个程序大多数时 ...
-
linux基础之CentOS启动流程
一.基本概念 内核设计流派: 单内核设计:Linux //所有功能集成于同一个程序 微内核设计:Windows,Solaris //每种功能使用一个单独子系统实现 Linux内核特点: 支持模块化:. ...
随机推荐
-
(VS TFS) Adding existing project to solution in TFS.
正常的情况话,直接加入project,然后选择"Source control" -> “Add selected projects to source control.... ...
-
转Oracle字符集问题总结
Oracle字符集问题总结 分类: Oracle2006-06-04 13:48 1298人阅读 评论(3) 收藏 举报 oracle数据库sqlcharacter存储insert 作者: vston ...
-
jdk自带发布webservice服务
1.创建要发布的类 package com.test.webserive; import javax.jws.WebService; //targetNamespace定义命名空间 @WebServi ...
-
原生js和jquery实现图片轮播特效
本文给大家分享的是使用原生JS和JQ两种方法分别实现相同的图片轮播特效,十分的实用,也非常方便大家对比学习原生js和jQuery,有需要的小伙伴可以参考下. 1)首先是页面的结构部分对于我这种左右切换 ...
-
hbase伪分布
1.编辑 conf/hbase-env.sh来告知HBase java的安装路径.在这个文件里你还可以设置HBase的运行环境,诸如 heapsize和其他 JVM有关的选项, 还有Log文件地址,等 ...
-
更换arm-linux-gcc 4.3.2编译器
先创建一个临时目录:mcx@mcx-virtual-machine:/home/work/tools$ mkdir tmp 解压到根目录:mcx@mcx-virtual-machine:/home/w ...
-
linux 下source、sh、bash、./执行脚本的区别
原文地址:http://blog.csdn.net/caesarzou/article/details/7310201 source命令用法: source FileName 作用:在当前bash环境 ...
-
Android开发艺术探索——新的征程,程序人生路漫漫!
Android开发艺术探索--新的征程,程序人生路漫漫! 偶尔写点东西分享,但是我还是比较喜欢写笔记,看书,群英传看完了,是学到了点东西,开始看这本更加深入Android的书籍了,不知道适不适合自己, ...
-
Angular 中的数据交互(get jsonp post)
Angular get 请求数据 Angular5.x 以后 get.post 和和服务器交互使用的是 HttpClientModule 模块. import {HttpClientModule} f ...
-
SQL Server 维护计划(数据库备份)
公司的项目都需要定期备份,程序备份关掉iis站点复制文件就可以了,难受的地方就是数据库的备份了.服务器上装的大都是英文版,一看见英文,操作都变得小心翼翼起来,生怕哪里搞错,第二天就要被安排写辞职申请了 ...