Linux系统启动流程

    下面按照系统的启动顺序来进行逐一的讲解。

一、POST

    当我们按下开机的电源后,主板上的芯片组会首先向CPU发出一个reset指令,之后待芯片组检测到电源供电稳定后便撤去reset指令,CPU就会跳转到BIOS中的启动代码位置; BIOS首先要检测关键设备(如内显、显卡等)是否正常,这个过程就称为POST(加电后自检)。

    POST完成后BIOS会调用其它代码来进行完整的硬件检测。 

二、(BIOS) boot sequence

    引导次序:按次序找引导设备,第一个有引导程序的设备,即为启动PC Server所用到的设备。 

三、MBR(Bootloader)

    MBR(Mater Boot Record),即主引导记录。其位置在第一个扇区的前512字节。Bootloader是安装于MRB当中的引导管理程序,早期比较常见的Bootloader程序为LILO,但因为其不支持1023柱面以后的分区,所以现在比较常用的为GRUB。

    GRUB(Grand Unified Bootloader)是由GNU下的FSF组织所推行的;CentOS 5和CentOS 6上使用的版本为Grub 0.97,而CentOS 7上使用的版本为Grub2 1.96。

    下面以CentOS 6为例来了解一下GRUB:

    我们先来看一下系统的上GRUB目录中的内容,如下图所示:

1.png

    从上图中可以看到stage1、*_stage1_5和stage2这三类文件,它们分别表示GRUB引导时的三个阶段。

        1)stage 1

            stage 1文件其实是MBR中Bootloader的备份文件,虽然stage 1也是512B但只有前446B与MBR相同,后64B完成不一样。

2.png3.png4.png

        2)stage1_5

            grub目录中存在许多以stage1_5结尾的文件,这些文件都是stage1_5阶段功能的文件,里面存放着文件系统的格式,其作用是连接stage1和stage2的一个通道。

            stage1_5文件的内容保存在MBR后面的32K中;其实stage1.5文件会在安装GRUB时安装到MBR后的32K中,系统启动时会直接读取MBR后面的内容,即使这些文件不存在也不会影响GRUB的正常工作。

        3)stage 2

            在此阶段会读取grub.conf配置文件中设置信息来完成系统的引导,并且可以实现引导功能的扩展。

5.png

        GRUB的功能如下:

            1)提供菜单,并提供交互式接口

                e:进入编辑模式;

                a:直接修改内核参数;

                c:进入命令行模式。

            2)选择要启动的内核或系统

                允许传递引导参数给内核;

                选择界面可隐藏。

            3)为编辑功能提供机制

                可以为指定的内核得添加密码。

        grub.conf文件内容:

            default=:选择第几个title配置的内核或系统,各title从0开始编号;

            timeout=#:菜单显示的超时时长;

            splashimage=/path/to/some-image_file:指定菜单背景图片,此图片只能为14bits色,xpm格式,gzip压缩;

            hiddenmenu:隐藏菜单;

            tiltle TITLE SIRING:显示于菜单中的标题;

            root:指定引导分区;

            kernel:指明kernel的位置;

            initrd:指明initramfs的位置。

四、kernel+ramdisk (initramfs) 

    在GRUB的选择界面里按e,进入编辑模式,可以看到kernel和ramdisk,如下图所示:

6.png

    kernel是操作系统的内核程序,所有的软硬件都是通过kernel来沟通的。在上图中的vmlinuz文件就是开机时所用的kernel。

    initrd(initial ramdisk),是激活系统所必须加载的文件系统。

    当kernel被载入到内存后,需要加载相应驱动程来识别文件系统,这时initrd就充当了临时的系统被挂载到rootfs上,其作用就是协助kernel来加载驱动程序。

五、/sbin/init(/etc/init/*.conf)设定默认运行级别

    /sbin/init会使用/etc/init/目录中的.conf配置文件来对系统进行配置,之后调用/etc/rc.d/rc.sysinit文件对系统进行初始化。

    在进行系统配置的过程时,init会检测系统默认的runlevel(运行级别),并根据runlevel的信息来做相应的配置,在说明启动服务时会集中讲解runlevel,这里就只是先介绍一下CentOS的7个运行级别: 

        0:关机;

        1:单用户,s,S,single;

        2:多用户,不支持NFS功能;

        3:完全多用户,文本接口;

        4:未使用,预留级别;

        5:完全多用户,图形接口;

        6:重启。

六、使用/etc/rc.d/rc.sysinit初始化系统

    1、设定主机名:读取/etc/sysconfig/network文件中的HOSTNAME参数,并以之设定主机名;

    2、打印文本欢迎信息;    

    3、激活SElinux和udev; 

    4、挂载/etc/fstab文件中定义的其它文件系统;

    5、激活swap;

    6、检测根文件系统,并以读写方式重新挂载;

    7、设置系统时钟;

    8、根据/etc/sysctl.conf设置内核参数;

    9、激活LVM和RAID;

    10、加载额外设备的驱动程序;

    11、清理工作。

七、启动或关闭指定服务

    启动指定的级别默认为启动的服务,停止指定的级别下默认为关闭的服务。

    /etc/rc.d/目录中rc0.d-rc6.d这7个目录中分别存放了不同运行级别启动或关闭时所要执行的脚本。

7.png

8.png

    以rc3.d为例,在上面列出的所有脚本文件都是链接文件,其中:S##表示启动的服务,K##表示要停止的服务,##的范围是从0到99,数字越小,优先级越高。

    根据系统默认的运行级别来调用各级别对应的脚本,默认运行级别在配置文件/etc/inittab中设置。

10.png

    也可以手动修改脚本的默认运行级别。

    使用chkconfig命令来调整服务脚本在各运行级别下默认的启动与关闭。

9.png

    如果期望自定义的脚本使用chkconfig来控制,需要按照以下步骤操作:

        1、在脚本中添加以下语句:

            #chkconfig: – 85 15

                -:当此脚本由chkconfig控制时,默认哪些级别是开启的,“-”表示全部级别;

                85:启动优先级;

                15:关闭优先级;

        2、将脚本复制到/etc/init.d/目录中;

        3、加入脚本到运行级别列表:

            chkconfig –add 脚本名

    从运行级别列表中删除脚本:chkconfig –del 脚本名

    /etc/rc.d/rc.local(/etc/rc.local):是一个脚本,通常为系统启动完成的最后运行的一个脚本。

八、显示终端登录界面

    

原创文章,作者:petmaster,如若转载,请注明出处:http://www.178linux.com/4439

(0)
petmasterpetmaster
上一篇 2015-05-23
下一篇 2015-05-23

相关推荐

  • 马哥教育网络班22期第二周课程练习1-未闻花名

    1、Linux管理文件和目录的命令 命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touch 创建文件 mv 移动文件 rm 删除文件 rmdir 删除目录 1.1 pwd命令 该命令的英文解释为print working directory(打…

    Linux干货 2016-08-29
  • 2016-08-10作业

    1、编写脚本/root/bin/systeminfo.sh, 显示当前主机系统信息,包括主机名,IPv4 地址,操作系统版本,内核版本,CPU 型号,内存大小,硬盘大小。 #!/bin/bash echo "hostname is `hostname`" echo "IPv4 is `ifconfig | sed -n &#03…

    Linux干货 2016-08-15
  • 优质代码的十诫

    1.- DRY: Don’t repeat yourself. DRY 是一个最简单的法则,也是最容易被理解的。但它也可能是最难被应用的(因为要做到这样,我们需要在泛型设计上做相当的努力,这并不是一件容易的事)。它意味着,当我们在两个或多个地方的时候发现一些相似的代码的时候,我们需要把他们的共性抽象出来形一个唯一的新方法,并且改变现有的地方的代码让…

    Linux干货 2015-04-01
  • 第一周随记。

    始 .仲夏之末  ———随记心情 去年仲夏我在郑州富士康过着自己不喜欢的日子,做着自己不情愿做的事情。 有可能回到学校的日子才是我最想要的吧。 五月的骄阳也是那么炙热,缓缓升起,就像想穿进我们宿舍普及到每个人身上,然宿舍有空调岂会怕你这点小小余辉。 总感觉脑子里始终有一种什么意念在召唤着我,原来该上课了…

    Linux干货 2017-07-15
  • 用户管理和组管理

         Linux是一个多用户多任务的系统 ,因此学习用户管理和组管理,对我们工作和学习有很大的帮助。用户是你登录这个操作系统的凭证,因此用户的创建和修改,删除是用户管理的基本工作,所以你掌握这些,对你的工作有很好的帮助。 用户账号管理 /etc/passwd username:x: UId:gid:comment:…

    Linux干货 2016-08-10
  • rsyslog基于mysql的日志集中存储,及loganalyzer日志分析工具的web配置

    Rsyslog是Linux系统自带的一款强大的日志系统,在业务量不是很大的情况下,能够满足大部分客户的日志分类搜集功能,是广大运维同事进行系统监控、分析不可或缺的利器。而在运维自动化高速发展的今天,如果我们还要“人工”智能的去每一个服务器上查看系统日志就显得太LOW了,并且,对我们来说也是一个不小的负担。 基于此,我们就简单的来介绍一下,rsyslog结合m…

    系统运维 2017-02-05