linux启动流程详解

一、为什么要研究linux系统启动:


许有人会说,等它开机就好了,为什么还要研究它开机流程呢,其实如果服务器运行很好又没有人为的误操作等,或许不用研究,但是为了能在系统出问题后第一时
间的修复它,又或者你忘记了root密码等情况时就非常有必要研究一下linux的开机流程了,因为只有知道了它是如何运作的,才能让它更好的服务与人
类,废话不多说,正文开始

二、系统启动流程:

不同的版本的linux系统开机可能不同,但是总的来说,大同小异,下面就以centos6.8的系统为例,介绍linux的开机过程。

post加电自检---> MBR引导--> GRUB引导--->加载内核--->启动init--->各种初始化脚本运行--->执行/bin/login --->开机过程结束

1. 加电自检:  


电自检post(power on system
test):加电自检主要是检查各硬件是否存在并能正常运行,包括cpu,内存,硬盘,cpu风扇,有的甚至包括键盘鼠标的外设的检测,这一段名叫
BIOS的程序是存放在CMOS的硬件芯片上面,加电就是给CMOS
加电,由于CMOS是rom芯片,所以还有一个单独的ram芯片用来存放它的配置信息,这就是主板为什么要放一块电池的原因了。

2. 选择启动顺序加载MBR(master boot recoder)启用bootloader程序加载内核:


过一系列的硬件检测完毕后,并顺利通过后,就要加载MBR了,MBR存放在第一个可启动硬盘的第一个分区内,大小为512byte,这512个字节当中前
446byte就是bootloader,以及随后的64字节的分区表,2byte分区结束标志,第一部分的bootloader部分就是主引导记录的第
一部分,因为引导程序功能较为强大并且会有驱动文件,是446byte字节能存放,后续将介绍它的其它部分。第一部分的bootloader程序会调用
512个字节之后的一部分扇区中的数据,这些数据包括/boot分区的驱动,因为软件和硬件的连接必须通过驱动的翻译,此时通过/boot分区的驱动,加
载好了/boot,该分区中包含了grub程序的第二部分,和内核镜像文件,还有就是initramfs文件,如果此时加载  / 分区的话,因为 /
分区不一定和 /boot
分区是同一种文件系统,不同的文件系统需要的文件系统的驱动是不同的,所以grub会将initram文件加载至内存当中解压,并且此时要加载内核文件,
解压后会在该文件系统形成一个类似于 / 的文件系统 在此时的 “/” 中的lib中有系统真正的 /
的各种文件系统驱动,此时就可以加载根文件系统了

3. 启动init以及各种启动脚本:


载好根文件系统就要启动用户的第一个执行程序/sbin/init*, 其中包括/etc/inittab
,/etc/init/*.conf(在centos5中是直接一个/inittab文件,顺序执行,速度较慢,到了6时许多被依赖的程序服务等先执行,
并且没有依赖关系的也同时执行,到了7时配置文件变成了/usr/lib/systemd/*
此时系统的启动就已经非常快了,许多服务都可以同时启动,即使是被依赖的也可以并行启动,加快了开机速度)

init文件主要定义了下面的几项:

(1)开机启动级别选择0-6共七个:

0:关闭所有服务关机

1: 维护模式的单用户模式

2: 维护模式的多用户模式

3:正常级别,多用户模式

4:未定义

5:正常级别,带有图形化的多用户模式

6:关闭所有服务重启

注:可以使用runlevel,或者who -r 命令检查当前系统的运行级别

(2) 使用/etc/rc.d/rc.sysinit 进行系统初始化

a)  根据配置文件进行设置主机名

b)  打印文本欢迎信息

c)   激活Selinux和udev

d)  挂载所有定义在/etc/fstab文件的文件系统

e)   激活swap分区

f)   检测根文件系统并实现以读写挂载根

g)  设置系统时钟

h)  根据/etc/sysctl.conf文件设定内核参数

i)   激活LVM和RAID设备

j)   加载额外的设备驱动

k)  清理操作

(3) 执行选择了开机启动的级别下相应的脚本/etc/rc.d/rc#.d

/etc/rc.d/rc#.d/
该目录的执行需要根据/etc/init/rc
文件选择是否启动什么服务,在rc文件当中执行一个for循环先执行K*的文件的服务进行stop,S开头的服务启动在相应的启动级别下面都是许多个软链
接文件,这些文件指向/etc/rc.d/下面的服务脚本,并且这些软链接文件分别是以S开头和K开头的文件,S表示在该运行级别要启动的服务,K开头的
表示该级别不需要启动的服务,有人会说,在开机是该服务就没有启动,为什么还要停一次呢?本来服务就没有启动,停它干啥?确实是这样,但是你有没有想过,
假如在运行级别3已经开启了该服务,但是你想要切换至运行级别5,而5的级别恰巧不需要启动该服务怎么办?当然应该停掉了!所以,在rc脚本中for循环
里使用了判断如果在/var/lock/subsys/下面有该服务时,循环执行continue,跳过启动语句执行下一次循环,知道循环结束,/var
/lock/subsys/目录中只要启动一个服务在这个锁文件目录中就会产生一个文件。这样通过执行/etc/init/init#.d/
下面的所有服务脚本,就可以启动所有系统的脚本了。

如果自己想定义一个脚本想要像是系统服务那样启动怎样做?


/etc/init/init.d/下面有大量的服务脚本,可以参考,要想系统定义的脚本那样包括#!/bin/bash
这一行的shell定义,chkconfig定义,以及描述相关的description:将写好的脚本放在该目录下面使用chkconfig
--{add|del} 脚本名字添加或者删除脚本。

附:服务脚本头部示例:

[[email protected]_8 init.d]# head -n 12 nfs
#!/bin/sh
#
# nfs           This shell script takes care of starting and stopping
#               the NFS services.
#
# chkconfig: - 30 60
# description: NFS is a popular protocol for file sharing across networks.
#              This service provides NFS server functionality, which is #              configured via the /etc/exports file.
# probe: true
# config: /etc/sysconfig/nfs

当然在也/etc/rc.local 或者/etc/rc.d/rc.local两个文件中定义自己的脚本执行路径,只不过在该文件中定义的文件执行优先级为最低的,要等到所有的系统服务脚本执行完,才能执行

(4)配置ctrl+alt+del键的功能,建议关闭此功能防止误操作重启服务器。

该配置在centos5中就直接在/etc/inittab中,到了6之后可以通过/etc/inittab文件的注释看到该配置已经转移到了/etc/init/control-alt-delete.conf当中将该行注释掉即可

(5)配置不断电系统pf,pr两种机制

这两种机制是为了保护系统,在系统突然断电时,保证系统能正常关机,但是有可能是因为电源不稳定而突然断电,然后再很短的时间内电源再次有了电,此时就应该取消关机,默认是在2min之后关机,但是在2min之内有电后会取消关机

(6)启动mingetty 6个终端

在6个终端中因为有前面定义respawn关键字,所以这6个终端变成了打不死的小强,当你用kill将它们其中一个杀死后,系统会换一个进程号重新启动它

(7) 如果选择5级别,则会启动 /etc/X11/prefdm -nodaemon启动图形化界面

至此系统已经能正常进入启动状态啦!

时间: 2024-10-15 16:40:09

linux启动流程详解的相关文章

Linux启动流程详解【转载】

在BIOS阶段,计算机的行为基本上被写死了,可以做的事情并不多:一般就是通电.BIOS.主引导记录.操作系统这四步.所以我们一般认为加载内核是linux启动流程的第一步. 第一步.加载内核 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件. 我们查看一下,/boot 目录下面大概是这样一些文件: 第二步.启动初始化进程 内核文件加载以后,就开始运行第一个程序 /sbin/init,它的作用是初始化系统环境. 由于init是第一个运行的程序,它的进程编号(pid)就是1.其他所有进程都

linux启动流程详解、破解root密码、添加服务脚本

1.Linux的组成 kernel+rootfs kernel:进程管理.内存管理.网络管理.安全管理.文件系统管理.驱动程序 rootfs:程序和glibc 库:函数集合,function,调用接口(头文件负责描述) 过程调用:procedure  ,无返回值 结果调用:function 程序:二进制文件 2.内核设计流派 单内核(monolithic kernel):Linux 把所有功能集成于同一个程序 微内核(micro kernel):Windows, Solaris 每种功能使用一个

linux中断流程详解

异常体系比较复杂,但是linux已经准备了很多的函数和框架,但是因为中断是和具体的开发板相关,所以中断需要我们自己来处理一些方面,但是这也是很少的一部分,很多公用的处理函数内核已经实现,linux内核搭建了一个非常容易扩充的中断处理体系. 中 断系统结构涉及的方面很多,而且分布在很多的函数中,这里我主要理清一些结构和流程顺序已经在哪些函数中实现,我不知道其他人怎么样?但是我自己一开始怎 是找不到linux内核是怎么把GPIO设置成中断的,我找了很久都找不到,还有我们很多的设置,初始化等等东西好像

linux开机流程详解

Linux操作系统的开机流程详解 开机需要十步 第一步:开机自检(BIOS)就是开始工作之前先对自己的工具进行检查是否正常,如果正常那就可以进行接下来的步骤假如步正常就得检测哪里的问题进行处理.BIOS其实就是主板上的一给自检程序,开机先对主板上自带的和外接的一些开机必备的设备进行检测,像CPU,显卡,内存,硬盘等设备的自检过程就是自检 第二步:MBR引导,也就是根据装有linux系统的硬盘上的主引导区的记录进行引导,主引导记录处在硬盘上的第一给物理分区上,硬盘能够读取到数据也就是靠的这个最主要

redhat 5开机启动流程详解

(1)POST(Power On Self Test) 加电自检 电脑主机打开电源的时候随后会听到滴的一声响系统启动开始了开机自检POST. 自检开始这个过程中主要是检测计算机硬件设备比如CPU内存主板显卡等设备是否有故障存在.如果有硬件故障的话将按两种情况理对于严重故障(致命性故障)则停机此时由于各种初始化操作还没完成不能给出任何提示或信号对于非严重故障则给出提示或声音报警信号等待用户处理如果没有故障POST完成自己的接力任务将尾部工作交接给BIOS处理. (2)BIOS(bootloader

转-Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)

http://blog.chinaunix.net/space.php?uid=10167808&do=blog&id=26042 1)BIOS自检2)启动Grub/Lilo3)加载内核4)执行init进程5)通过/etc/inittab文件进行初始化6)登陆Linux 1)BIOS自检   a)POST(Power On Self Test),对硬件进行检测   计算机在通电后首先由BIOS进行自检,即所谓的POST(Power On Self Test),对硬件进行检测   依据BIO

CentOS系列启动流程详解

一.Linux启动内核文件 1.Linux系统组成 动态视角:内核+根文件系统 静态视角:磁盘分区+相关文件 2.Kernel特点 (1)支持某块化:.ko (kernel object)文件 (2)支持模块运行时动态装载或卸载: 总结:Linux kernel在但内核设计模型上,吸取了多内核设计的优点,使用了模块化设计 单内核设计:把所有功能集成于同一个程序:如Linux 微内核设计:每种功能使用一个单独的子系统实现:如Windows, Solaris 2.kernel组成 (1)核心文件 1

linux系统启动流程详解

一.linux启动大概流程如下: POST --> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 --> 关闭或启动对应级别下的服务 --> 启动终端,流程图如下

centos6启动流程详解

当我们在平常的工作学习的环境中使用linux时,我们只需要按一下开机键,系统就会自动为我们加 载好相关配置,然后为我们打开操作界面,那么在这个过程中究竟都发生了什么,如果系统突然起不来 了,那么到底是启动时的哪一部分发生了错误呢,下面,我们就来看看linux中的centos6启动的具体流 程. centos6启动流程大致分为以下这些步骤:     1.加电自检,得到BIOS的硬件信息,获取第一个启动设备 2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息 3.加载核心操作系统的核心