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

Linux系统启动流程

时间:2015-09-08 23:41:54      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:芯片组   linux   color   检测   电源   

按照下面的顺序,我们来简单的说下Linux系统的启动流程,这边是针对CentOS6来说

一、POST

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

二、(BIOS) boot sequence

        引导次序:按主板中设置的先后次序,查找第一个有引导程序的设备。

三、MBR(Bootloader)

       首先我们要了解什么是MBR,MBR(Mater Boot Record),即主引导记录。其位置是位于第一个扇区的钱512字节。而其中Bootloader是位于这512个字节中的前446个字节,在这个Bootloader中又装载了一个程序, 所以Bootloader用于提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核。

        上面我们说到MBR 中有512个字节,其中Bootloader占据了446个字节,64个字节被磁盘分区所占,2个字节属于结束标志。其中在这个446个字节中安装了一个程序,我们称为grub。 在grub中又分了三个阶段,这三个阶段也是系统启动的步骤必须部分。我们以CentOS 6查看下其下的grub文件

[root@localhost ~]# ls /boot/grub/ #grub位于boot目录下

device.map grub.conf minix_stage1_5 stage2

e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 ufs2_stage1_5

fat_stage1_5 jfs_stage1_5 splash.xpm.gz vstafs_stage1_5

ffs_stage1_5 menu.lst stage1 xfs_stage1_5

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

             1、Stage1:执行Bootloader主程序

                 第一阶段为执行boot loader的主程序,这个程序必须安装在启动区,即MBR中。因为MBR实在太小了,所以MBR通常安装boot loader的最小程序,并没有安装loader的相关配置文件。

             2、*_stage1_5:链接stage1和stage2的一个通道

             3、stage2、主程序加载配置文件

                  第三阶段为通过boot loader加载所有配置文件与相关的环境参数文件,当然这些配置文件都放在/boot/grub目录下。在/boot/grub目录下有个重要的文件grub.conf。其中grub.conf定义了系统启动时的很多信息,如下:

        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的位置。

[root@localhost ~]# cat /boot/grub/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE: You have a /boot partition. This means that

# all kernel and initrd paths are relative to /boot/, eg.

# root (hd0,0)

# kernel /vmlinuz-version ro root=/dev/mapper/vg0-root

# initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title CentOS 6 (2.6.32-504.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DM LANG=en_US.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root KEYBOARDTYPE=pc KEYTABLE=us rhgb crashkernel=auto quiet rhgb quiet

initrd /initramfs-2.6.32-504.el6.x86_64.img

最终bootloader加载kernel文件

四、kernel+ramdisk


技术分享

如上图我的系统在默认的情况下这个界面是隐藏的,我们在grub.conf的这个文件中设置默认是隐藏的。在开机启动的时候,我们按任意键就会进入这个界面。其中这个是grub提供的功能。具体功能如下:

         1、提供菜单,并提供交互式接口
                e:进入编辑模式;
                a:直接修改内核参数;
                c:进入命令行模式。
            2、选择要启动的内核或系统
允许传递引导参数给内核;
选择界面可隐藏。

技术分享
            3、为编辑功能提供机制
可以为指定的内核得添加密码。

         如上图所示我们可以看到我们的kernel,kernel是操作系统的内核程序,所有的软硬件都是通过kernel来沟通的。在上图中的vmlinuz文件就是开机时所用的kernel。
         上图中也出现initrd(initial ramdisk),是激活系统所必须加载的文件系统。
当kernel被载入到内存后,需要加载相应驱动程来识别文件系统,这时initrd就充当了临时的系统被挂载到rootfs上,其作用就是协助kernel来加载驱动程序

五、init(/sbin/init)设定默认运行级别

/sbin/init会使用/etc/init/目录中的.conf配置文件来对系统进行配置,之后调用/etc/rc.d/rc.sysinit文件对系统进行初始化。而init执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境(如网络、时区等)。

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

运行级别:为了系统的运行或维护等应用目的而设定;

0-6:7个级别

    0:关机

    1:单用户模式(root, 无须登录), single, 维护模式;

     2:多用户模式,会启动网络功能,但不会启动NFS;维护模式;

     3:多用户模式,正常模式;文本界面;

     4:预留级别;可同3级别;

      5:多用户模式,正常模式;图形界面;

      6:重启

    我们系统在启动时的默认级别为3或者5,那么我们如何查看当前系统的运行级别和切换级别

[root@localhost ~]# runlevel #查看系统的级别前面指的是之前的模式,后面指的是当前所在模式

N 3

[root@localhost ~]# init 5 #切换当前系统级别5表示图形界面,这样我们的图形界面就启动了

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

       初始化系统的内容主要有:

    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个目录中分别存放了不同运行级别启动或关闭时所要执行的脚本。

[root@localhost ~]# ls /etc/rc.d/ #查看系统级别

init.d rc0.d rc2.d rc4.d rc6.d rc.sysinit

rc rc1.d rc3.d rc5.d rc.local

[root@localhost ~]# ls /etc/rc.d/rc3.d/ #我们以运行级别3来查看其下的内容

K01smartd K75quota_nld S13cpuspeed S26acpid

K05wdaemon K84wpa_supplicant S13irqbalance S26haldaemon

K10psacct K87multipathd S13iscsi S26udev-post

K10saslauthd K87restorecond S13rpcbind S28autofs

K15htcacheclean K89rdisc S15mdmonitor S50bluetooth

K15httpd K99rngd S20kdump S55sshd

K30spice-vdagentd S01sysstat S20lldpad S80postfix

K35vncserver S02lvm2-monitor S21fcoe S82abrt-ccpp

K50dnsmasq S07iscsid S22messagebus S82abrtd

K50netconsole S08ip6tables S23NetworkManager S90crond

K60nfs S08iptables S24nfslock S95atd

K69rpcsvcgssd S10network S24rpcgssd S99firstboot

K73winbind S11auditd S25blk-availability S99local

K74ntpd S11portreserve S25cups

K75ntpdate S12rsyslog S25netfs

注:其中以S开头的文件系统在启动的时候会默认启动,以K开头的文件系统启动时默认是关闭的##的范围是从0到99,数字越小,优先级越高

最后启动的是rc.local文件,如果想要在启动时就惊喜的脚本或者命令,直接将他写入/etc/rc.d/rc.local,那么该动作就会在启动的时候自动被加载。

八、login(启动登录界面)

Linux系统启动流程

标签:芯片组   linux   color   检测   电源   

原文地址:http://deanzhulinux.blog.51cto.com/10652113/1692888

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