博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019/02/18 启动流程01
阅读量:3922 次
发布时间:2019-05-23

本文共 3336 字,大约阅读时间需要 11 分钟。

系统启动步骤,

第一步,开机加点自检post,通过检查发现硬件设备没有问题(cpu,内存,显卡等),然后进入到选择启动的第一个设备(通常是硬盘作为启动的第一个设备,去硬盘找第一个扇区mbr(446字节,中间64分区表,55aa标记位)在mbr启动的时候要找前面446字节(这个称为grub的第一阶段))在linu启动的时候,有一个程序叫bootloader(bootloader在centos6上是用的grub0.97版本,在7上用的是grub2.0,统称为bootloader启动加载器)
这个程序是处在446字节的(其中有一部分是放在446字节里),这是启动第一阶段,启动完后,加载boot分区(加载boot目录所在的分区),而boot所在的分区是放在一个文件系统里的,(所以要识别boot分区,就必须识别对应的文件系统,换句话说就是要加载文件系统驱动(boot分区所在的文件系统驱动),当然也需要加载一些必要的其他驱动,如硬盘驱动等等),但是这些驱动由于放在446字节放不下,所以需要从某个地方来找这些驱动程序,(就是我们所说的1。5阶段)
1.5阶段是在磁盘后续的某个位置,通过1.5阶段进而加载相应的驱动程序,就可以访问boot分区了,(boot分区里有一些基本的启动文件,如内核文件vmlinuz(在centos光盘发布的是就已经在光盘编译好的,是固定的文件,只不过是安装linux的时候,从光盘拷贝到你的电脑里)initramfs(这个文件也存在部分必要的驱动,这个驱动目标是,光进到boot是不行的(boot里面只是放了一些内核的必要文件,而大部分和操作系统相关的文件都是和/跟目录下一级级相关的目录里,要启动整个linux系统第一个进程都是在/sbin/里的),所以要加载操作系统的第一个进程就需要去访问/跟,而跟的文件系统和boot分区并不一定是一样的,所以就需要去找跟所在分区的文件系统,这个驱动就是有initramfs提供的,由它来加载跟的驱动,进而就可以引导后续的操作系统引导过程)在这个过程中,它就必须知道根分区是谁,而跟分区(谁控制)是在grub第二个阶段的一个配置文件,叫有配置文件/boot/grub/grub.conf文件里,存了根分区所在分区,有一行root=xxxxx,uuid设备的名称,这样我们就通过grub配置文件,就是grub第二阶段的加载到了跟,加载跟以后,通过initramfs文件加载驱动,进而跟就识别出来了,跟识别出来以后就可以访问系统的第一个进程,/sbin/init)
/sbin/init这个进程启动以后,后续还需要一些额外的初始化程序,这时候它就会去读取额外的一些配置文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6跟5的init只是名称相同,其实是完全不同的程序,开发者跟5不同,和早期的init不是一回事,只不过名字一样
upstart和init不是一个程序,但是名字一样
在这里插入图片描述
这个程序是用来控制基本进程的,下图
在这里插入图片描述
在这里插入图片描述
新老版本都有一个共同的配置文件/etc/inittab
在这里插入图片描述
系统启动先读取此文件,在根据文件里面的配置信息,进而进行后续的加载工作
inittab仅仅是被upstart 用于默认的runlevel ,这一行的作用就是开机默认设置什么模式(0-6七种模式)
但是在centos5上又不一样
在这里插入图片描述
在这里插入图片描述
7种模式,0关机模式
1 单用户模式
2 多用户模式(没有nfs功能,和3相同,只不过如果没有网络就没有nfs功能)
3.完全多用户模式(2和3本质上没有什么区别,2也可以手动启动nfs功能)除了图形界面,其他都有
4.没有使用的
5.图形界面
6.重新启动
在centos7上已经取消了runlevel的概念了
在这里插入图片描述
id 标识,这一行的标注
5运行模式的意思(意味后续的是在什么模式下生效的)
initdefault(表示这个在5模式下进行什么用途,执行什么操作的)initdefault实际就是开机默认进入什么模式
在这里插入图片描述
这一行一般都是开机进入什么模式
改成3,默认开机进入字符界面,也可以用init 5 切换回图形工具,不要改成0和6
6是重复重启
在这里插入图片描述
按 'a’修改内核参数,在后面输入1(也可以 single ,S ,s ,1)即可,(就是临时的让系统切换到单用户模式)
在这里插入图片描述
在这里插入图片描述
也可以选择直接进入5模式,直接跳到5模式,不去读取/etc/inittab文件定义的默认的6模式,绕过更改,正常启动
在这里插入图片描述
1模式在centos5和centos6上有一个很重要的作用,就是重新设置root口令,如果root口令忘记了,就可以进入1模式,来破解root口令
修改内核参数 输入1 进入单用户模式
在这里插入图片描述
因为默认进去就是root,直接可以更改口令(仅限于坐在主机前)centos7稍微麻烦点
在这里插入图片描述
(网络访问才具有安全性),本地挨着就都可以轻松破解
物理一接触机器,什么安全都没有

在这里插入图片描述

centos6把一些相关的启动流程放在一些配置文件,但是过程5和6是类似的
在这里插入图片描述
id:5:initdefault:定义了启动模式
#system initialization 系统初始化
si::sysinit:/etc/rc.d/rc.sysinit初始化是通过/etc/rc.d/rc.sysinit这个脚本来实现的(是我们启动系统跑的第一个脚本)
在这里插入图片描述在这里插入图片描述
定义swap分区在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
/etc/rc.d/rc.sysinit初始化脚本执行完后执行如下
在这里插入图片描述
如果前面是5模式就会对应运行5 /etc/rc.d/rc 5(rc是脚本,5是参数)在这里插入图片描述
这个脚本运行的就是,根据你提供的参数来决定到底运行的哪个目录下的相应程序
在这里插入图片描述如果是5模式就应该进入到/etc/rc5.d
在这里插入图片描述
stop就相当于给这些脚本的stop参数
在这里插入图片描述
在这里插入图片描述
如果是s开头就在后面加start参数
ls列出的就是将来的执行次序,所以加上数字
k数字 【对应的后台服务】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
服务分为了独立服务(开机的时候可以自动的启动,也可以不启动,和别的没有关系,并不依赖于别的服务来管理它
非独立服务
/etc/rc5.d这些其实是软连接,真正指向的是下面的/etc/init.d(独立服务
在这里插入图片描述 在这里插入图片描述
除了functions ,其他全是对应的服务脚本,这些脚本去调用此服务的二进制程序
在这里插入图片描述
在这里插入图片描述
说明在1模式下cups是不启动 的
在这里插入图片描述
在这里插入图片描述
在5模式下就能启动
在这里插入图片描述
之前reboot是 在1模式下修复的,就是因为1模式下是默认关闭k开头的的
在这里插入图片描述
如果出现某个服务 起不来,单用户模式都能解决

在这里插入图片描述

ntsysv可以定义或者查看当前运行模式下某个服务的启动状态有*号代表开机启动,没有就不启动
在这里插入图片描述
可以通过ntsyv 也可以通过改文件名的方式,修改开机是否启动
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
表示要改三模式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改回去s
在这里插入图片描述
但是一次只能改一个模式,所以淘汰了,就喜欢用chkconfig --list atd(功能比ntsysv更强大,可以查看某个服务什么模式1-7种模式一目了然)在这里插入图片描述
修改atd 3 5模式 修改为off
在这里插入图片描述
省略写法,不写模式就默认给2345off(因为2345用的多
在这里插入图片描述
文件有就执行下面的命令没有叫跳过
在这里插入图片描述
-f判断文件,如果存在进行后续的操作,如果不存在,就跳出,后续不执行,这个文件就存放着服务名,只是判断这个文件是否存在
在这里插入图片描述
在这里插入图片描述
service是判断的pid是否存在,服务在不在运行
机器第一次开机没必要执行K打头的文件
系统i根据此文件存在不存在来判断开机是否启动
所以第一次开机启动的时候就不会去执行K,等于无用功,如果init切换,因为原来就已经启动,所以就需要stop

在这里插入图片描述

刚才删除了atd,现在切换到3模式下,因为3模式需要启动,所以原本关闭的atd就启动了
/etc/rc数字.d 根据里面的次序来按段先关闭谁,打开谁
在这里插入图片描述
次序很重要,服务好像是独立,但是事实上有可能是依赖性的,比如httpd(对外提供web服务),nfs(通过网络对外提供的),sshd(远程经常用的服务)依赖于网络的服务实际应该都是依赖于network服务的
在这里插入图片描述
network在前,sshd在后,
在这里插入图片描述
不是按照数字排序,是按照字符排序
在这里插入图片描述
如果是依赖性较强的服务,关闭的时候就先关闭那些依赖于它的服务
一般先启动的服务,都是后关闭的
在这里插入图片描述
就可以写一个源码编译的脚本来启动服务,关闭服务
比如httpd开启自动启动
在这里插入图片描述

转载地址:http://swkgn.baihongyu.com/

你可能感兴趣的文章
php输出日志
查看>>
php输出日志
查看>>
一次springmvc+mybatis+log4j日志不输出SQL语句问题的排查经历
查看>>
关于ThreadLocal的浅谈
查看>>
java发邮件eclipse中测试没问题,部署到tomcat上收到的是乱码问题排查
查看>>
nginx配置https之后,https请求被调转到http问题
查看>>
PageHelper的简单追踪
查看>>
根据参数值的不同,调用不同实现类
查看>>
1、Annotation
查看>>
2、Annotation的实现
查看>>
CyclicBarrier && CountDownLatch
查看>>
java.lang.Object
查看>>
mqtt的messageId是怎么回事
查看>>
记一次线上CPU持续飙升的问题排查
查看>>
java.util.Stack
查看>>
java.lang.Class
查看>>
设计模式之恋
查看>>
手写spring
查看>>
使用redis分布式锁实现一个秒杀业务
查看>>
工厂方法模式(Factory Method)
查看>>