Linux系统开机启动流程
(来源学习Linux时,自己做的笔记)
Linux系统有7个运行级别(runlevel)
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
运行级别的原理:
1。在目录/etc/rc.d/init.d下有许多服务器脚本程序,一般称为服务(service)
2。在/etc/rc.d下有7个名为rcN.d的目录,对应系统的7个运行级别
3。rcN.d目录下都是一些符号链接文件,这些链接文件都指向init.d目录下的service脚本文件,命名规则为K+nn+服务名或S+nn+服务名,其中nn为两位数字。
4。系统会根据指定的运行级别进入对应的rcN.d目录,并按照文件名顺序检索目录下的链接文件
对于以K开头的文件,系统将终止对应的服务
对于以S开头的文件,系统将启动对应的服务
5。查看运行级别用:runlevel
6。进入其它运行级别用:init N
7。另外init0为关机,init 6为重启系统
由于现在的Linux系统安装完后就运行在第5个级别,即系统启动后直接进入图形界面,而不用在字符模式下登录后用startx或者xinit 来起动图形界面。建议在系统安装完成后把系统的默认运行等级设置在第3级,在字符终端登录后,再手工输入startx 命令起动图形界面。可以用如下的方法修改:
用文本编辑器修改 /etc/inittab文件,把代码:
id:5:initdefault:这一行,修改成
代码:
id:3:initdefault:保存后就reboot重起,系统就默认起动到字符界面。不同运行级别之间的 差别的在于系统默认起动的服务的不同,如运行级别3默认不启动X图形界面服务,而运行级别5 却默认起动。本质上是没有区别的,更无所谓不同级别间功能强弱的问题。用户完全可自给定义不同级别的默认服务。在任何运行级别,用户都可用init 命令来切换到其他运行级别。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*Linux系统引导流程
*开机自检
*MBR引导
*GRUB
*加载linux内核和image映像
*INIT进程初始化
-------------------流程简介
1. 加载 BIOS 的硬件信息、进行自我测试,并依据设定获得第一个可开机的设备;
2. 读取并执行第一个开机设备内 MBR 的 boot Loader(grub 等程序);
3. 依据 boot loader 的设置加载 Kernel,Kernel 会开始检测硬件与加载驱动程序;
4. 内核启动 init;
5. 系统初始化:(/etc/init/rcS.conf exec /etc/rc.d/rc.sysinit);
6. init 找到/etc/inittab 文件,确定默认的运行级别(X) (/etc/init/rcS.conf exec telinit $runlevel);
7. 触发相应的 runlevel 事件(/etc/init/rc.conf exec /etc/rc.d/rc $RUNLEVEL);
8. 开始运行/etc/rc.d/rc,传入参数 X;
9. /etc/rc.d/rc 脚本进行一系列设置,最后运行相应的/etc/rcX.d/中的脚本;
10. /etc/rcX.d/中的脚本按事先设定的优先级依次启动;
11. 最后执行/etc/rc.d/rc.local;
12. 加载终端或 X-Window 接口。
------------------------------
一、开机流程
1. Power on开启电源
-----
2. 启动主板上的BOIS,初始化硬件:。init是所有进程的发起者和控制者。因为在任何基于Linux的系统中,它都是第一个运行的进程,所以init进程的编号(PID)永远是 1
init进程有以下两个作用:
1) init进程的第一个作用是扮演终结父进程的角色。因为init进程永远不会被终止,所有系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况,此时那些失去父进程的子进程就都会以init作为它们的父进程
2) init的第二个作用是在进入某个特定的运行级别时运行相应的程序,以此对各种运行级别
init的工作是根据/etc/inittable 来执行相应的脚本,进行系统初始化,如设置键盘、字体、装载模块、设置网络
-------------------/etc/inittable只实现开机的运行级别
/etc/rc.d/rc.sysinit:由init执行的第一个脚本
init在一开始会先判断所要进入的runlevel为1~6的哪一种模式,跟着就直接进入rc.sysinit文件设置大部分和系统相关的环境。
rc.sysinit完成设置网络、主机名、加载文件系统等初始化工作
1) 获取网络环境和主机类型
首先读取网络配置文件/etc/sysconfig/network,获取主机名称与默认网关(GATEWAY)等网络环境
2) 测试与载入内存设备/proc及USB设备/sys
除载入内存设备/proc之外,还会主动检测系统上是否有USB的设备,若有,则会主动加载USB设备的驱动程序,并且尝试载入USB的文件系统
3) 决定是否启动SELINUX
4) 接口设备的检测与即插即用(PnP)参数测试
5) 用户自定义模块的加载
用户可以在/etc/sysconfig/modules/*.modules 加入自定义的模块,此时会加载到系统中
6) 加载核心的相关配置
系统会自动去读取/etc/sysctl.conf文件的设置值,使核心功能复合我们的要求
7) 设置系统时间(clock)
8) 设置终端控制台(console)的字形
9) 设置RAID和LVM等硬盘功能
10) 以FSCK检验磁盘文件系统
11) 进入磁盘配额 quota 功能(非必要)
12) 重新以可读取模式载入系统磁盘
13) 启动 quota功能
14) 启动系统随机数设备
15) 清除启动过程中的临时文件
16) 将启动相关信息加载到/var/log/dmesg文件中
/var/log/dmesg文件中能查看到系统开机的一系列流程
[root@lcl ~]# dmesg | more
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 2.6.32-279.el6.x86_64 (mockbuild@x86-008.build.bos.redhat.com) (gc
c version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Wed Jun 13 18:24:36 ED
T 2012
Command line: ro root=UUID=d43052a2-de68-41ae-9bc1-4de0e3c379d3 rd_NO_LUKS KEYB
OARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_
NO_DM rhgb quiet
KERNEL supported cpus:
Intel GenuineIntel
AMD AuthenticAMD
Centaur CentaurHauls
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cdce0000 (usable)
...
------------------------------------------
重启后出现error15,表明stage1,stage1_5,stage2被破坏
-------------------------
删除内核镜像文件和初始化虚拟磁盘文件,下图是重启后出现的现象修复
先mount /dev/cdrom /mnt---------------------
系统启动硬件信息
1./etc/rc.d/rc.sysinit
*由init进程调用执行
*完成设置网络、主机名、加载文件系统等初始化工作
2./etc/rc.d/rc脚本文件
*由init进程调用执行
*根据指定的运行级别,加载或终止相应的系统服务
3.红帽企业版linux服务脚本位于/etc/rc.d/init.d中
4. /etc/rc.d/rcn.d目录中
包含运行级别n执行服务状态配置的符号连接
/init = /bin/bash
Linux系统有7个运行级别(runlevel)
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
运行级别的原理:
1。在目录/etc/rc.d/init.d下有许多服务器脚本程序,一般称为服务(service)
2。在/etc/rc.d下有7个名为rcN.d的目录,对应系统的7个运行级别
3。rcN.d目录下都是一些符号链接文件,这些链接文件都指向init.d目录下的service脚本文件,命名规则为K+nn+服务名或S+nn+服务名,其中nn为两位数字。
4。系统会根据指定的运行级别进入对应的rcN.d目录,并按照文件名顺序检索目录下的链接文件
对于以K开头的文件,系统将终止对应的服务
对于以S开头的文件,系统将启动对应的服务
5。查看运行级别用:runlevel
6。进入其它运行级别用:init N
7。另外init0为关机,init 6为重启系统
由于现在的Linux系统安装完后就运行在第5个级别,即系统启动后直接进入图形界面,而不用在字符模式下登录后用startx或者xinit 来起动图形界面。建议在系统安装完成后把系统的默认运行等级设置在第3级,在字符终端登录后,再手工输入startx 命令起动图形界面。可以用如下的方法修改:
用文本编辑器修改 /etc/inittab文件,把代码:
id:5:initdefault:这一行,修改成
代码:
id:3:initdefault:保存后就reboot重起,系统就默认起动到字符界面。不同运行级别之间的 差别的在于系统默认起动的服务的不同,如运行级别3默认不启动X图形界面服务,而运行级别5 却默认起动。本质上是没有区别的,更无所谓不同级别间功能强弱的问题。用户完全可自给定义不同级别的默认服务。在任何运行级别,用户都可用init 命令来切换到其他运行级别。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*Linux系统引导流程
*开机自检
*MBR引导
*GRUB
*加载linux内核和image映像
*INIT进程初始化
-------------------
流程简介
1. 加载 BIOS 的硬件信息、进行自我测试,并依据设定获得第一个可开机的设备;
2. 读取并执行第一个开机设备内 MBR 的 boot Loader(grub 等程序);
3. 依据 boot loader 的设置加载 Kernel,Kernel 会开始检测硬件与加载驱动程序;
4. 内核启动 init;
5. 系统初始化:(/etc/init/rcS.conf exec /etc/rc.d/rc.sysinit);
6. init 找到/etc/inittab 文件,确定默认的运行级别(X) (/etc/init/rcS.conf exec telinit $runlevel);
7. 触发相应的 runlevel 事件(/etc/init/rc.conf exec /etc/rc.d/rc $RUNLEVEL);
8. 开始运行/etc/rc.d/rc,传入参数 X;
9. /etc/rc.d/rc 脚本进行一系列设置,最后运行相应的/etc/rcX.d/中的脚本;
10. /etc/rcX.d/中的脚本按事先设定的优先级依次启动;
11. 最后执行/etc/rc.d/rc.local;
12. 加载终端或 X-Window 接口。
------------------------------
一、开机流程
1. Power on开启电源
-----
2. 启动主板上的BOIS,初始化硬件:。init是所有进程的发起者和控制者。因为在任何基于Linux的系统中,它都是第一个运行的进程,所以init进程的编号(PID)永远是 1
init进程有以下两个作用:
1) init进程的第一个作用是扮演终结父进程的角色。因为init进程永远不会被终止,所有系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况,此时那些失去父进程的子进程就都会以init作为它们的父进程
2) init的第二个作用是在进入某个特定的运行级别时运行相应的程序,以此对各种运行级别
init的工作是根据/etc/inittable 来执行相应的脚本,进行系统初始化,如设置键盘、字体、装载模块、设置网络
-------------------
/etc/inittable只实现开机的运行级别
/etc/rc.d/rc.sysinit:由init执行的第一个脚本
init在一开始会先判断所要进入的runlevel为1~6的哪一种模式,跟着就直接进入rc.sysinit文件设置大部分和系统相关的环境。
rc.sysinit完成设置网络、主机名、加载文件系统等初始化工作
1) 获取网络环境和主机类型
首先读取网络配置文件/etc/sysconfig/network,获取主机名称与默认网关(GATEWAY)等网络环境
2) 测试与载入内存设备/proc及USB设备/sys
除载入内存设备/proc之外,还会主动检测系统上是否有USB的设备,若有,则会主动加载USB设备的驱动程序,并且尝试载入USB的文件系统
3) 决定是否启动SELINUX
4) 接口设备的检测与即插即用(PnP)参数测试
5) 用户自定义模块的加载
用户可以在/etc/sysconfig/modules/*.modules 加入自定义的模块,此时会加载到系统中
6) 加载核心的相关配置
系统会自动去读取/etc/sysctl.conf文件的设置值,使核心功能复合我们的要求
7) 设置系统时间(clock)
8) 设置终端控制台(console)的字形
9) 设置RAID和LVM等硬盘功能
10) 以FSCK检验磁盘文件系统
11) 进入磁盘配额 quota 功能(非必要)
12) 重新以可读取模式载入系统磁盘
13) 启动 quota功能
14) 启动系统随机数设备
15) 清除启动过程中的临时文件
16) 将启动相关信息加载到/var/log/dmesg文件中
/var/log/dmesg文件中能查看到系统开机的一系列流程
[root@lcl ~]# dmesg | more
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 2.6.32-279.el6.x86_64 (mockbuild@x86-008.build.bos.redhat.com) (gc
c version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Wed Jun 13 18:24:36 ED
T 2012
Command line: ro root=UUID=d43052a2-de68-41ae-9bc1-4de0e3c379d3 rd_NO_LUKS KEYB
OARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_
NO_DM rhgb quiet
KERNEL supported cpus:
Intel GenuineIntel
AMD AuthenticAMD
Centaur CentaurHauls
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cdce0000 (usable)
...
------------------------------------------
重启后出现error15,表明stage1,stage1_5,stage2被破坏
-------------------------
删除内核镜像文件和初始化虚拟磁盘文件,下图是重启后出现的现象
修复
先mount /dev/cdrom /mnt
---------------------
系统启动硬件信息
1./etc/rc.d/rc.sysinit
*由init进程调用执行
*完成设置网络、主机名、加载文件系统等初始化工作
2./etc/rc.d/rc脚本文件
*由init进程调用执行
*根据指定的运行级别,加载或终止相应的系统服务
3.红帽企业版linux服务脚本位于/etc/rc.d/init.d中
4. /etc/rc.d/rcn.d目录中
包含运行级别n执行服务状态配置的符号连接



/init = /bin/bash

Linux系统开机启动流程的更多相关文章
- Linux系统的启动流程
Linux系统的启动流程: 1.通电(通常按下电源键,开始通电) 2.加载BIOS (通常看到显示器提示按F2进入主板) 3.读取MBR (MBR硬盘的入口地址,用来装载引导) 4.进入引导 (通常有 ...
- Linux的开机启动流程
Linux的开机启动流程 1.开机BIOS自检 --> 检查CPU,硬盘等硬件信息 2.MBR[Major ...
- linux系统的启动流程梳理
1. 不同版本的linux系统的启动流程 1.1 centos6.x系统的启动流程 其详细启动步骤如下: 1)开机,BIOS自检,检查各个硬件是否正常 2)读取硬盘MBR信息,引导系统启动 3)加载g ...
- 2021年3月-第01阶段-Linux基础-Linux系统的启动流程
Linux系统的启动流程 理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进而解决问题. 上图为Linux操作系统启动流程 1.加载BIOS 计算机 ...
- Linux系统开机启动时的工作原理
Linux系统开机启动时的工作原理也是深入了解Linux系统核心工作原理的一个很好的途径. 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至 ...
- 原创:四种Linux系统开机启动项优命令超给力超详细详解
老葵花哥哥又开课了 接下来是你们的齐天大圣孙悟空给你们带来的详细版Linux系统开机启动优化四种命令 第一种方法是很正常的 第二种有点难理解 第三种来自我的一个奇思妙想 本文档秉承 不要钱也不要臀部的 ...
- Linux 系统开机启动项清理
一般情况下,常规用途的 Linux 发行版在开机启动时拉起各种相关服务进程,包括许多你可能无需使用的服务,例如蓝牙bluetooth.Avahi. 调制解调管理器ModemManager.ppp-dn ...
- [转] 浅谈Linux系统的启动流程
原文:http://blog.csdn.net/justdb/article/details/9621271 版权声明:本文为博主原创文章. Linux系统的启动时通过读取不同的配置文件,执行相应的S ...
- 浅谈Linux系统的启动流程
Linux系统的启动时通过读取不同的配置文件,执行相应的Shell脚本完成的.当然本文只是简单的从文件的角度分析,更深层次的本文没涉及. 主要读取了以下文件: /boot/grub/grub.con ...
随机推荐
- make 命令执行时,报错“missing separator stop”
在Makefile文件中,命令必须以[tab]键开始.
- SQL Server 2008 2005删除或压缩数据库日志的方法
由于数据库日志增长被设置为“无限制”,所以时间一长日志文件必然会很大,一个400G的数据库居然有600G的LOG文件,严重占用了磁盘空间.由于主要是做OLAP,所以数据库本身不会有大变动,所以日志也就 ...
- java模式:模板模式的简单理解
1.模板模式就是用虚类作为基类将几个要执行差不多操作中相同的部分提取出来,不同的部分各自实现! 2.下面给出简单栗子: 我要进行的操作是将大象和狐狸放入冰箱,放入大象和狐狸有相同的步骤:开冰箱和关冰箱 ...
- POJ 2186 Popular Cows tarjan缩点算法
题意:给出一个有向图代表牛和牛喜欢的关系,且喜欢关系具有传递性,求出能被所有牛喜欢的牛的总数(除了它自己以外的牛,或者它很自恋). 思路:这个的难处在于这是一个有环的图,对此我们可以使用tarjan算 ...
- PAT (Advanced Level) 1114. Family Property (25)
简单DFS. #include<cstdio> #include<cstring> #include<cmath> #include<vector> # ...
- 在MFC对话框中添加状态栏
如果我们想实现在MFC对话框中添加状态栏显示,如何例如分状态栏为两列,第一列显示鼠标的当前位置,第二列显示当前的时间,(如上图). 1. 首先,打开在资源视图的String Table并添加两个ID: ...
- js跨域总结
一.通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的. 比如 ...
- opencv ,亮度调整【【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整
http://blog.csdn.net/poem_qianmo/article/details/21479533 [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调 ...
- typedef void far *LPVOID 的具体定义
首先这里的far,在32位系统已经废除不用了.它是C/C++语言在16位系统中用以标明指针是个远指针的修饰符. 远指针是说指针所指向的地址已经超出了64K(2的十六次方),所以需要使用DS加偏移量的方 ...
- 剑指offer 重建二叉树
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...