CentOs 系统启动流程相关
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内核特点: 支持模块化:. ...
随机推荐
- Akka(25): Stream:对接外部系统-Integration
在现实应用中akka-stream往往需要集成其它的外部系统形成完整的应用.这些外部系统可能是akka系列系统或者其它类型的系统.所以,akka-stream必须提供一些函数和方法来实现与各种不同类型 ...
- Lucene第二篇【抽取工具类、索引库优化、分词器、高亮、摘要、排序、多条件搜索】
对Lucene代码优化 我们再次看回我们上一篇快速入门写过的代码,我来截取一些有代表性的: 以下代码在把数据填充到索引库,和从索引库查询数据的时候,都出现了.是重复代码! Directory dire ...
- String ua = request.getHeader("user-agent")---ua值为null
最近在修改错误日志,发现总报空指针,追踪代码发现这个ua的值有时候会为null,上网查了半天也无果,按常理说ua的值不可能为null,俩小时没找到原因,只是将ua判null了一下,记录一下,如果有大虾 ...
- 用static声明的函数和变量小结
static 声明的变量在C语言中有两方面的特征: 1).变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值.这一点是它与堆栈变量和堆变量的区别. 2).变量用static ...
- javaWeb正则表达式
对于web来说,字符串的处理特别重要,而正则表达式是对字符串处理的利器,在字符过滤,验证方面都能看到她的身影. 今天需要处理一段json字符串,在用String.replaceAll的过程中,遇到了正 ...
- 初识 JShell
Java9 现在吵得热火朝天,赶紧顺势学习一波喽! JDK9 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk9-dow ...
- java学习——java中的反射学习笔记
Java--reflect 一.Class类的使用 什么是Class类? 1:在面向对象的世界中,万事万物皆对象. java语言中,静态的成员,普通数据类型类是不是对象呢? 是,对象!是类的对象! 类 ...
- 代理模式与java中的动态代理
前言 代理模式又分为静态代理与动态代理,其中动态代理是Java各大框架中运用的最为广泛的一种模式之一,下面就用简单的例子来说明静态代理与动态代理. 场景 李雷是一个唱片公司的大老板,很忙, ...
- B树、B+树、B*树
二叉搜索树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如 ...
- python堆栈实现
百度百科定义: 堆栈是一个在计算机科学中经常使用的抽象数据类型.堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列. 堆栈中定义了一些操作 ...