码迷,mamicode.com
首页 > 系统相关 > 详细

Linux系统开机启动流程

时间:2016-08-27 11:16:32      阅读:355      评论:0      收藏:0      [点我收藏+]

标签:

 

(来源学习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,初始化硬件:显卡、CPU、内存、硬盘等,同时也开始查找启动介质,USB、CD-ROM、HDD、PEX,即光盘、硬盘、网络、移动设备四种方式可以引导启动
技术分享
------------
BIOS简介
BIOS是英文(Basic Input Output System)的缩写,直译过来就是“基本输入输出系统”。其实,它是一组固化到计算机内主板上的一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启程序。其主要功能是为计算机提供最底层、最直接的硬件设置和控制。BIOS应该是连接软件程序和硬件设备的一座“桥梁”,负责解决硬件的即时要求。
**********
BIOS的主要作用
1)
自检及初始化程序:计算机电源接通后,系统将有一个对内部各个设备进行检查的过程,这是由一个通常称之为POST(Power on self testr/上电自检)的程序完成,这是BIOS 的一个功能。完整的自检包括对CPU,640K基本存储、1M以上的扩展内存、ROM主板、CMOS存贮器、串并口、显示卡、软硬盘子系统及键盘的测试。在自检过程中若发现问题,系统将给出提示信息或鸣笛警告。如果没有任何问题,完成自检后BIOS将按照系统CMOS设置中的顺序搜寻软、硬盘驱动器及CD-ROM、网络服务器等有效的启动驱动器,读入操作系统引导记录,然后将系统控制权交给引导记录,由引导记录完成系统的启动
2) 硬件中断处理:计算机开机的时候,BIOS会告诉CPU等硬件设备的中断号,当你操作时输入了使用某个硬件的命令后,它就会根据中断号使用相应的硬件来完成命令的工作,最后根据其中断号跳到原来的状态
3)
程序服务请求:从BIOS的定义可以知道它总是和计算机的输入输出设备打交道,它是通过最特定的数据端口发出指令,发送或接收各类外部设备的数据,从而实现软件应用程序对硬件的操作
****************
BIOS和CMOS的关系
BIOS是一个程序,CMOS是一个存数据的芯片,BIOS启动时会到CMOS里读数据。平时我们配置BIOS的参数的时候,都存在CMOS里
CMOS常指保存计算机基本启动信息(如日期、时间、启动设置等)的芯片,有时人们会把CMOS和BIOS混称,其实CMOS是主板的一块可读写的RAM芯片,是用来保存BIOS的硬件设备和用户对某些参数的设定以及系统时间日期。应该把它和BIOS芯片区别开


注意:在断电情况下,扣掉CMOS电池,可以恢复BIOS默认设置,能解决很多问题。
****************
BIOS由两部分组成:POST代码和运行时的服务
POST(power on self test):检查核心硬件是否正常
设备初始化:初始化驱动程序,分配资源
引导设备选择:使用光驱,硬盘还是PXE引导
移交执行区域:加载引导设备的第一个扇区(512字节)
**************
如何进入BIOS?
台式机:按DEL键
笔记本:品牌不同按键不一样,F1,F2,F8,F12等
服务器:F1

***************
计算机里可以设置哪些密码?有哪些作用?
BIOS密码:防止被人设置从U盘或者网络引导进入系统
grub密码:防止破密码
系统密码:防止人家进系统

**********
BIOS介绍
*基本输入输出系统
*存储计算机基本硬件的信息
*
不可以随意拔插
**************
BIOS 启动流程
技术分享
**********
BIOS的设置工具
*
PhoenixBios Setup Utility
*AWARD CMOS Setup Utility

******************
案例一:由于软驱已不再使用,某些BIOS在启动时检测不到软驱会提示错误,需要将其屏蔽
技术分享
案例三:管理员不记得某个电脑的BIOS密码了,先需要清空BIOS密码
技术分享
*****************
根据显示信息排除故障
*POST信息,包括检测过程和错误提示
1) 计算机启动时显示“
CMOS battery faild” :表示主板电力不足,需要更换新电池
2)计算机启动时显示“
Floppy disks fail Press F1 to Continue,Del to setup”:表示无法驱动软驱,按F1键继续
根据警报音排除故障
*根据警报音识别故障硬件
1)
蜂鸣器长鸣:表示内存错误,清理灰层,或更换一条插槽
---------------------
3. 读取MBR(master boot record,主引导记录),又叫主引导扇区
(1)计算机访问硬盘时所必须读取的首个扇区(
0柱面、0磁道,1扇区)
MBR中的主引导加载程序是一个512 字节大小的映像,前446个字节是主引导加载程序,其中包含可执行代码和错误消息文本。接下来的64个字节是分区表,其中包含4个分区记录(每个记录的大小是16个字节)。MBR以两个特殊数字的字节(0x55AA)结束,这个数字会用来进行MBR的有效性检查

技术分享
(2)系统如果要启动,就必须要启动内核,而MBR远远放不下Linux的内核,为了能顺利的找到放在其他位置上的内核,人们想出了一个办法就在446字节里写一个小程序,当BIOS试着启动操作系统时就会执行这个小程序,然后再由小程序来载入其他位置的内核。这个小程序就是启动载入器(boot loader)。
linux的
boot loader 常见的有两种:LILO(已淘汰)和GRUB。
MBR(512字节)不属于任何分区

-----------------------
4. 加载grub(grand unified boot loader)通过GRUB来加载Linux内核
(1) GRUB是一个将引导加载程序安装到主引导记录的程序,主引导记录位于一个硬盘开始的扇区。
它允许位于主引导记录区中特定的命令来加载一个GRUB菜单或GRUB的命令环境。这使得用户能够开始操作系统的选择,在内核引导时传递特定命令给内核,或是在内核引导前确定一些系统参数(如可用的RAM大小)。GRUB支持直接和链式加载的引导方法。GRUB能用于几乎所有操作系统、绝大多数流行的文件系统以及几乎所有的系统BIOS所有识别的硬盘
(2) GRUB有几个重要的文件:
Stage1、Stage1.5、Stage2
*
stage1:通常放在MBR中;作用:在系统启动时用于装载Stage2并将控制权交给它
*
Stage2:GRUB的核心,所有功能都由它实现
*
Stage1.5:介于stage1和stage2之间,是它们的桥梁,因为stage2较大,通常都是放在一个文件系统当中的,但是stage 1并不能识别文件系统格式,所以才需要stage1.5来引导位于某个文件系统当中的stage2.根据文件系统格式的不同,stage1.5也需要相应的文件,如:e2fs_stage1_5,fat_stage1_5,分别用于识别ext和fat的文件系统格式。它存放于1-63的扇区之间
(3) GRUB的配置是通过位于
/boot/grub/grub.conf的一个配置文件来完成的
(4)
/boot目录下的stage1、stage1.5、stage2都是备份的,防止grub被破坏后,可以拿来修改grub程序
(5) 引导顺序:
stage1->stage1.5->stage2
(6)引导程序功能
*编写内核命令行
*装载初始化虚拟磁盘
*将控制权交给Linux内核

注意:stage2是grub的核心,不是linux的核心,grub加载以后,目的就是加载linux内核
-------------------------
下面的的都是备份文件
技术分享
系统启动读取文件顺序:/etc/profile--->/etc/profile.d/*.sh-->.bash_profile-->.bashrc-->/etc/bashrc
----------------
修复grub的方法:
1)
grub-install /dev/sdx :修复/boot/grub目录下的stage1,stage2,*stage1_5这些文件,/dev/sdx为/boot所在硬盘
2)
root (hdx,x) ;setup <hdx>setup主要是将stage1.5做成功能块嵌进硬盘
--------

在系统没有执行过grub-install命令时stage1.5记录stage2在磁盘上的位置
系统经过grub-install修复后stage1.5记录stage2文件的位置
---------------
5.grub.conf----加载vmlinuz内核镜像------加载initramfs挂在伪根至内存-----加载各种模块和驱动-----加载INIT进程
6.加载Shell,进行验证用户和登录

-------------------------------------------------------
INIT进程初始化
init进程是系统所有进程的起点,内核在完成核内引导后,即在本进程空间内加载init程序,它的进程号是
1init是所有进程的发起者和控制者。因为在任何基于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,初始化硬件:显卡、CPU、内存、硬盘等,同时也开始查找启动介质,USB、CD-ROM、HDD、PEX,即光盘、硬盘、网络、移动设备四种方式可以引导启动
技术分享
------------
BIOS简介
BIOS是英文(Basic Input Output System)的缩写,直译过来就是“基本输入输出系统”。其实,它是一组固化到计算机内主板上的一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启程序。其主要功能是为计算机提供最底层、最直接的硬件设置和控制。BIOS应该是连接软件程序和硬件设备的一座“桥梁”,负责解决硬件的即时要求。
**********
BIOS的主要作用
1)
自检及初始化程序:计算机电源接通后,系统将有一个对内部各个设备进行检查的过程,这是由一个通常称之为POST(Power on self testr/上电自检)的程序完成,这是BIOS 的一个功能。完整的自检包括对CPU,640K基本存储、1M以上的扩展内存、ROM主板、CMOS存贮器、串并口、显示卡、软硬盘子系统及键盘的测试。在自检过程中若发现问题,系统将给出提示信息或鸣笛警告。如果没有任何问题,完成自检后BIOS将按照系统CMOS设置中的顺序搜寻软、硬盘驱动器及CD-ROM、网络服务器等有效的启动驱动器,读入操作系统引导记录,然后将系统控制权交给引导记录,由引导记录完成系统的启动
2) 硬件中断处理:计算机开机的时候,BIOS会告诉CPU等硬件设备的中断号,当你操作时输入了使用某个硬件的命令后,它就会根据中断号使用相应的硬件来完成命令的工作,最后根据其中断号跳到原来的状态
3)
程序服务请求:从BIOS的定义可以知道它总是和计算机的输入输出设备打交道,它是通过最特定的数据端口发出指令,发送或接收各类外部设备的数据,从而实现软件应用程序对硬件的操作
****************
BIOS和CMOS的关系
BIOS是一个程序,CMOS是一个存数据的芯片,BIOS启动时会到CMOS里读数据。平时我们配置BIOS的参数的时候,都存在CMOS里
CMOS常指保存计算机基本启动信息(如日期、时间、启动设置等)的芯片,有时人们会把CMOS和BIOS混称,其实CMOS是主板的一块可读写的RAM芯片,是用来保存BIOS的硬件设备和用户对某些参数的设定以及系统时间日期。应该把它和BIOS芯片区别开


注意:在断电情况下,扣掉CMOS电池,可以恢复BIOS默认设置,能解决很多问题。
****************
BIOS由两部分组成:POST代码和运行时的服务
POST(power on self test):检查核心硬件是否正常
设备初始化:初始化驱动程序,分配资源
引导设备选择:使用光驱,硬盘还是PXE引导
移交执行区域:加载引导设备的第一个扇区(512字节)
**************
如何进入BIOS?
台式机:按DEL键
笔记本:品牌不同按键不一样,F1,F2,F8,F12等
服务器:F1

***************
计算机里可以设置哪些密码?有哪些作用?
BIOS密码:防止被人设置从U盘或者网络引导进入系统
grub密码:防止破密码
系统密码:防止人家进系统

**********
BIOS介绍
*基本输入输出系统
*存储计算机基本硬件的信息
*
不可以随意拔插
**************
BIOS 启动流程
技术分享
**********
BIOS的设置工具
*
PhoenixBios Setup Utility
*AWARD CMOS Setup Utility

******************
案例一:由于软驱已不再使用,某些BIOS在启动时检测不到软驱会提示错误,需要将其屏蔽
技术分享
案例三:管理员不记得某个电脑的BIOS密码了,先需要清空BIOS密码
技术分享
******************
根据显示信息排除故障
*POST信息,包括检测过程和错误提示
1) 计算机启动时显示“
CMOS battery faild” :表示主板电力不足,需要更换新电池
2)计算机启动时显示“
Floppy disks fail Press F1 to Continue,Del to setup”:表示无法驱动软驱,按F1键继续
根据警报音排除故障
*根据警报音识别故障硬件
1)
蜂鸣器长鸣:表示内存错误,清理灰层,或更换一条插槽
---------------------
3. 读取MBR(master boot record,主引导记录),又叫主引导扇区
(1)计算机访问硬盘时所必须读取的首个扇区(
0柱面、0磁道,1扇区)
MBR中的主引导加载程序是一个512 字节大小的映像,前446个字节是主引导加载程序,其中包含可执行代码和错误消息文本。接下来的64个字节是分区表,其中包含4个分区记录(每个记录的大小是16个字节)。MBR以两个特殊数字的字节(0x55AA)结束,这个数字会用来进行MBR的有效性检查

技术分享
(2)系统如果要启动,就必须要启动内核,而MBR远远放不下Linux的内核,为了能顺利的找到放在其他位置上的内核,人们想出了一个办法就在446字节里写一个小程序,当BIOS试着启动操作系统时就会执行这个小程序,然后再由小程序来载入其他位置的内核。这个小程序就是启动载入器(boot loader)。
linux的
boot loader 常见的有两种:LILO(已淘汰)和GRUB。
MBR(512字节)不属于任何分区

-----------------------
4. 加载grub(grand unified boot loader)通过GRUB来加载Linux内核
(1) GRUB是一个将引导加载程序安装到主引导记录的程序,主引导记录位于一个硬盘开始的扇区。
它允许位于主引导记录区中特定的命令来加载一个GRUB菜单或GRUB的命令环境。这使得用户能够开始操作系统的选择,在内核引导时传递特定命令给内核,或是在内核引导前确定一些系统参数(如可用的RAM大小)。GRUB支持直接和链式加载的引导方法。GRUB能用于几乎所有操作系统、绝大多数流行的文件系统以及几乎所有的系统BIOS所有识别的硬盘
(2) GRUB有几个重要的文件:
Stage1、Stage1.5、Stage2
*
stage1:通常放在MBR中;作用:在系统启动时用于装载Stage2并将控制权交给它
*
Stage2:GRUB的核心,所有功能都由它实现
*
Stage1.5:介于stage1和stage2之间,是它们的桥梁,因为stage2较大,通常都是放在一个文件系统当中的,但是stage 1并不能识别文件系统格式,所以才需要stage1.5来引导位于某个文件系统当中的stage2.根据文件系统格式的不同,stage1.5也需要相应的文件,如:e2fs_stage1_5,fat_stage1_5,分别用于识别ext和fat的文件系统格式。它存放于1-63的扇区之间
(3) GRUB的配置是通过位于
/boot/grub/grub.conf的一个配置文件来完成的
(4)
/boot目录下的stage1、stage1.5、stage2都是备份的,防止grub被破坏后,可以拿来修改grub程序
(5) 引导顺序:
stage1->stage1.5->stage2
(6)引导程序功能
*编写内核命令行
*装载初始化虚拟磁盘
*将控制权交给Linux内核

注意:stage2是grub的核心,不是linux的核心,grub加载以后,目的就是加载linux内核
-------------------------
下面的的都是备份文件
技术分享
系统启动读取文件顺序:/etc/profile--->/etc/profile.d/*.sh-->.bash_profile-->.bashrc-->/etc/bashrc
----------------
修复grub的方法:
1)
grub-install /dev/sdx :修复/boot/grub目录下的stage1,stage2,*stage1_5这些文件,/dev/sdx为/boot所在硬盘
2)
root (hdx,x) ;setup <hdx>setup主要是将stage1.5做成功能块嵌进硬盘
--------
技术分享

在系统没有执行过grub-install命令时stage1.5记录stage2在磁盘上的位置
系统经过grub-install修复后stage1.5记录stage2文件的位置
---------------
5.grub.conf----加载vmlinuz内核镜像------加载initramfs挂在伪根至内存-----加载各种模块和驱动-----加载INIT进程
6.加载Shell,进行验证用户和登录

-------------------------------------------------------
INIT进程初始化
init进程是系统所有进程的起点,内核在完成核内引导后,即在本进程空间内加载init程序,它的进程号是
1init是所有进程的发起者和控制者。因为在任何基于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系统开机启动流程

标签:

原文地址:http://www.cnblogs.com/losbyday/p/5812453.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!