centos6之前版本的启动流程

centos6 之前的系统启动:

    linux启动流程:
    1)加电自检
    2)读取MBR,引导加载程序grub,完成grub的三个阶段。
    3)加载系统内核kernel,执行系统初始化信息。
    4)启动用户空间第一个执行程序/sbin/init,并调用init的配置文件,完成初始化。
    5)启动核心的外挂模块,来启动各种所需服务。
    6)启动6个虚拟终端,执行/bin/login 程序,等待用户登录。
    7)登录之后开始以Shell控制主机。
    CMOS通电-->BIOS启动-->读取MBR-->加载程序grub-->加载内核kernel-->执行程序/sbin/init-->/bin/login

1。加载BIOS 的硬件信息,获取第一个启动设备

    加电自检:Power-On-Self-Test(POST)
        检测硬件设备是否正常运行。自检功能是由一个软件程序来实现的,叫做BIOS,(basic input output system),即基本输入输出系统,它被装载在一个硬件芯片CMOS上,CMOS是个硬件设备。加电过程就是给CMOS通电,然后启动其上的BIOS程序,BIOS程序会根据CMOS上的配置信息来读取其他硬件设备信息并进行检查是否存在且能正常运行,之后就进行硬件设备的初始化。

    加电自检:给CMOS通电,其上的BIOS启动,并根据CMOS的配置信息来检查其他硬件设备是否正常,之后进行设备初始化。

2。读取第一个启动设备MBR 的引导加载程序(grub)的启动信息

    读取MBR,引导加载程序grub,完成grub的三个阶段。
        硬件设备初始化后,BIOS会列出一些可以启动的装置顺序,然后开始读取第一个可以启动的设备中的操作系统文件。
        怎样来读取这第一个启动设备上的操作系统文件呢?需要用到启动管理程序:Boot Loader。它是个程序,依赖与硬盘,这个硬盘就是第一个可以启动的硬盘。Boot Loader是在该硬盘上第一个扇区上MBR(master boot record,主引导记录)当中。每个硬盘分区都有块启动分区,这个启动分区就是用来为操作系统安装Boot Loader。
        Boot Loader的主要功能:一个就是去识别、加载操作系统中的核心文件,并提交到内存中运行,进而启动对应的操作系统。另一个主要功能是提供菜单信息(这些菜单信息可为使用者提供不同的启动项目来加载操作系统),并将启动管理功能转交给其他的加载程序。
        Boot loader功能的发挥是需要grub的是三个阶段来完成的。

    BIOS列出启动顺序,读取加载并启动第一个可以启动硬盘上的第一个启动扇区上的MBR上的Boot Loader,发挥Boot loader的功能,而功能的发挥是通过引导加载程序grub来实现,也就是共要完成grub的三个阶段stage1-1.5-2。

3。加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备


    加载系统内核kernel,执行系统初始化信息。
        在Boot Loader完成grub的是三个阶段后,就开始读取操作系统内核文件,接下来就会将内核文件解压缩后装载到内存当中,然后根据内核提供的功能开始检测与加载各个设备。
        此时的设备检查和之前bios自检不同,此时内核程序已完全接管了BIOS的工作,之后的操作都是由内核来完成的。此时内核程序还没有加载到磁盘便没法读取系统上的内核文件,而加载磁盘时就需要磁盘驱动程序,磁盘驱动程序还在硬盘上,但硬盘上的驱动程序还没被读取到。这就形成了死循环。
        所以这里用了个虚拟文件系统来解决这个问题。虚拟文件系统(Initial RAM DISK)同样放置在/boot目录下,并且是一个以initrd(5)或initamfs(6)开头的文件。这个以initrd开头的文件能通过Boot Loader程序将其加载到内存中,然后这个文件会被解压缩并在内存中模拟一个根文件系统,这个根文件系统能提供一个可以运行的程序,通过该程序可以加载在启动过程中所需的核心模块(RAID, LVM, SCSI 等文件系统和磁盘驱动程序),加载完后会协助内核重启呼叫/sbin/init来执行后面的正常启动。

    总的来说就是:Boot Loader 可以加载kernel(以vmlinuz开头的文件)和initrd(以initrd开头的文件),然后在内存中让initrd(5)或initamfs(6)解压缩成虚拟的根目录,然后内核kernel可以在这个虚拟的根目录上加载合适的驱动程序,来检查和加载硬盘等各个设备,再之后释放虚拟的根文件系统,且会协助内核重启呼叫/sbin/init来执行后面的正常启动,并以只读的方式挂载到磁盘上真实的根文件系统,之后就是正常的启动过程了。

4。核心执行init 程序,并获取默认的运行信息

    启动用户空间第一个执行程序/sbin/init,并调用init的配置文件
        在内核、硬件及驱动信息加载完毕后,内核会呼叫用户控件的第一个执行程序/sbin/init,init程序主要功能是准备软件运行环境,包括系统的主机名称、网路配置、文件系统格式等其他服务的启动管理。这些所有的操作都是通过init的配置文件来定义的。

        init的配置文件:
            centos5:由于centos5采用的是SysV init方式,其特点是启动用户空间的服务程序,通常通过脚本进行,有依赖关系的服务将被串行启动;这导致了centos5的系统启动过程非常慢,其配额制文件为:/etc/initab
            centos6:采用的是Upstart的方式,其特点是守护进程间的通信依赖于D-Bus进行,因此,可基本实现类似并行启动,配置文件:/etc/inittab,/etc/init/*.conf
            centos7:采用Systemd方式,其特点是服务只有在第一次被访问到时才会真正启动起来;因此centos7系统启动过程非常快,配置文件:/usr/lib/systemd/*

    启用用户空间的第一个执行程序/sbin/init,这个程序根据init的配置文件来开始init初始化。初始化第一步是:根据/etc/inittab(centos5);或者/etc/inittab、/ect/init/*.conf(centos6)配置文件进行系统环境初始化。

5。初始化第一步结束后,开始初始化第二步。初始化第二步,init会根据/etc/rc.d/rc.sysinit中定义的内容进行系统初始化。

6。启动核心的外挂模块,init 执行/etc/rc.d/目录下的各个批处理文件(scripts),最后执行/etc/rc.d/rc.local。

    在/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.d/目录下的所有脚本,即为/etc/init.d/SERVICE_SCRIPTS。这些脚本遵循LSB服务脚本定义规范,都接受至少4个最基本的参数:{start|stop|status|restart}。
    /etc/init.d/目录下的脚本在指定级别为启动还是停止的控制方法:
        1。脚本开头:
            # chkconfig: S_LEVELS S_PRIO K_PRIO  (s_levels s_prio k_prio)
            # description:

                #!/bin/bash
                #LLLL  表示初始在哪个级别下启动,- 表示都不启动
                # chkconfig: LLLL nn nn
                    服务脚本中,必须有#chkconfig  35  97  07,其中35表示开机支持在那个模式上启动 ,97  07分别是服务列表名的前缀,分别表示启动或关闭状态

        2。脚本开头的第二方法:
            ### BEGIN INIT INFO
            # Provides: $network
            # Should-Start: iptables ip6tables
            # Short-Dercription: Bring up/down networking
            # Description: Bring up/down networking
            ### END INIT INFO

    这些脚本可以直接被调用:
        /etc/init.d/SERVICE_SCRIPTS {start|stop|status|restart}
    也可以使用service 命令调用:
        service SERVICE_SCRIPTS {start|stop|status|restart}
    上面的服务也可以开机时(或切换为指定级别时)被自动启动或停止:
        方法:
            /etc/rc.d/rc脚本,以及每个级别对应的级别目录下的“符号链接”来进行(/etc/rc.d/rcN.d)如下内容:
                S##SERVICE_SCRIPTS
                K##SERVICE_SCRIPTS
            ##:两位数字,表示优先级;比如想启动一个web服务,那首先得有网络服务,因为web服务依赖于网络服务,因此网络服务就会被优先启动,web服务就后于网络服务启动,同样,在停止是要先停止web服务,最后才能停止网络服务。
    注意:
        有个特殊的链接在所有的/etc/rc.d/rcN.d/目录下,这个链接就是S99local指向/etc/rc.local脚本,这个是最后执行的。
        这个脚本的功能是:那些不方便定义为服务脚本的,想设定为开机自动运行的,可以直接把命令写到此脚本中以实现开启运行。

7。执行/bin/login 程序,等待用户登录

    根据/etc/inittab中指定的id:3:initdefault:来启动终端,并且会启动6个虚拟终端且处于等候状态,虚拟终端启动后会在此虚拟终端上附加个用户登录程序/bin/login,来等待用户登录。
        在完成系统所有相关服务启动后,接下来linux就会启动终端或者是X window来向用户提供登录界面,例如启动虚拟终端
        一般启动6个虚拟终端:
             tty1:2345:respawn:/sbin/mingetty tty1
             tty2:2345:respawn:/sbin/mingetty tty2
             tty3:2345:respawn:/sbin/mingetty tty3
             tty4:2345:respawn:/sbin/mingetty tty4
             tty5:2345:respawn:/sbin/mingetty tty5
             tty6:2345:respawn:/sbin/mingetty tty6

        每个虚拟终端启动后,会立即通过此终端附加一个应用程序——login
        如果默认级别为5,还会启动一个图形虚拟终端,会附加X应用程序

        注意:
            1。centos6的init程序为upstart,其配置文件为/etc/init/*.conf ;此些配置遵循upstrat语法格式进行编程;
            2。centos6 的服务控制事实上大多数并没有使用upstart脚本来控制,而使用的是SysV风格的脚本;

8。登录之后开始以Shell控制主机

原文地址:https://www.cnblogs.com/shenxm/p/8447752.html

时间: 2024-10-11 22:31:53

centos6之前版本的启动流程的相关文章

CentOS7启动流程

同样我也找了一张CentOS7的启动流程图. 第一步.硬件启动阶段 这一步和CentOS6差不多,详细请看CentOS6启动流程(含详细流程图) 第二步.GRUB2引导阶段 从这一步开始,CentOS6和CentOS7的启动流程区别开始展现出来了.CentOS7的主引导程序使用的是grub2. 简单说一下这一步的流程:显示加载两个镜像,再加载MOD模块文件,把grub2程序加载执行,接着解析配置文件/boot/grub/grub.cfg,根据配置文件加载内核镜像到内存,之后构建虚拟根文件系统,最

CentOS6的启动流程

CentOS 6 的启动流程 一:Linux的组成: linux是由kernel和rootfs组成的.kernel即是内核,具有进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能等管理的作用:而rootfs即是根文件系统,由程序和glibc(即c运行库)组成. 内核设计流派分为单内核和微内核两个方向.linux使用的是单内核,把所有功能集成于同一个程序.linux内核的特点是:支持模块化,如以.ko结尾的文件,这些文件主要有管理文件系统,硬件驱动,网络协议等的作用:另一个特点是支持内核模

CentOS6启动流程呢个以及删除boot分区相关实验

centos6启动流程 主动读取BIOS,通过CMOS加载硬件信息 ,并进行POST,指定第一个可启动的设备 ROM:BIOS,Basic Input and Output System,保存着计算机系统最重要的基本输入输出程序,系统信息设置,开机加电自检程序RAM:保存各项参数的设定 读取第一个可启动设备MBR的引导加载程序(grub)的启动信息 MBR: 446 boot loader 64:分区表 2 :55aa BIOS通过硬件的INT13中断功能来读取MBR的 Windows:ntlo

CentOS6启动流程

CentOS6启动流程 1.加载BIOS的硬件信息,获取第一个启动设备 在通电之后,CentOS6会进行加电自检(Power On Self Test),这个过程主要是由BIOS完成的.在自检完毕,会检查启动设备. 2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息 在检测到启动设置之后,会读取第一个可启动设备MBR(Main Boot Record)中grub的启动信息. 主引导扇区,由MBR(主引导记录,占446byte).磁盘分区表(DPT,占64Byte)和结束标志(占2B

CentOS6 启动流程图文解剖

我们在使用Linux操作系统的时候,我们只需按下电源键,等待,然后输入账户和密码就可以使用Linux操作系统了.那么在按下电源到输入账号和密码之前,操作系统都做了些什么?下面就来讲述在这段时间发生的动作. 下面以CentOS6系列为例来讲解Linux的启动流程. 一.Linux启动流程详解 下图就是启动流程的大致过程: 二.POST加电自检 POST(PowerOnSelfTest)首先对每一个设备进行检查.完成后会寻找存有引导记录的设备,找到后读入操作系统引导记录,然后将系统控制权交给引导记录

centos6启动流程详解

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

#24 centos6(RHEL)系列操作系统的启动流程、与命令chkconfig、grub的使用

所有由rc脚本关闭或启动的链接文件的原文件都存在于/etc/rc.d/init.d,系统为了方便使用,为此目录创建了链接/etc/init.d 所有/etc/inid.d(/etc/rc.d/init.d)目录中的脚本执行方式: # /etc/init.d/srv_script {start|stop|restart|status} # service srv_script {start|stop|restart|status} chkconfig命令: chkconfig - updates

#23 centos5(RHEL)系列操作系统的启动流程、与命令mkinitrd、dracut的使用

centos(RHEL)系列操作系统的启动流程:Intel x86兼容架构: Linux的系统组成:内核 + 应用程序  GUN/Linux:单纯的指Linux内核: 从硬盘存储和启动操作系统的角度: Linux的系统组成:内核 + 根文件系统(rootfs) 内核功能:进程管理,文件系统管理,内存管理,网络协议,驱动程序,安全功能,... Linux系统的系统运行环境可以分为两部分: 内和空间:内核代码(系统调用) 就是内核进程占用的CPU和内存资源的总和: 用户空间:应用程序(进程或线程)

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

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