参考:Linux启动流程和grub详解(作者:好笔记运维)

  为什么把这位的参考放在前面,主要是这位大佬的流程图太详细了。虽说不一定要了解这么详细,但还是很佩服啊。不多说,上图(在新标签中打开图片)

  下面开始简单的了解一下CentOS6的启动流程吧。

 第一步、硬件启动阶段

  简单说一下这一步的流程:打开电源;POST自检;BIOS逐一排查设备启动顺序;如果是硬盘启动,读取硬盘的MBR的BootLoader。(这里默认MBR分区,暂不考虑GPT分区)

  这里主要有三个需要了解的地方BIOS启动顺序、MBR和BootLoader。BIOS启动顺序大部分人应该都知道,我就不赘述了。

(1).MBR

  MBR(Main Boot Record),是硬盘的0柱面,0磁道、1扇区(第一个扇区),称为主引导扇区,也称为主引导记录。它由三部分组成:主引导程序(BootLoader)、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。

  注:硬盘默认一个扇区大小为512字节。

  第一部分,主引导程序(BootLoader)占446个字节,负责从活动分区中装载,并运行系统引导程序。

  第二部分,硬盘分区表DPT占64个字节,有4个分区表项,每个分区表项占16个字节,硬盘中分区有多少以及每一个分区的大小都记录在其中。

  第三部分,硬盘有效标志,占2个字节,固定为55AA。如果这个标志位0xAA55,就认为这个是MBR。

(2).BootLoader

  不同的系统有不同的主引导程序(BootLoader)。Windows使用的是NTLDR(NT Loader,Windows NT系列操作系统)、Bootmgr(Boot Manager,Windows Vista,7,8,10),Linux一般使用的是grub(也叫grub legacy)和grub2。

  CentOS6一般使用的是grub。GRUB(GRand Unified Bootloader)是一个来自GNU项目的多操作系统启动程序。

第二步、GRUB引导阶段

  简单说一下这一步的流程:GRUB程序加载执行并引导kernel(内核)程序,其中有三个阶段。

  grub引导阶段的文件都在/boot/grub/目录下

(1).Stage1阶段

  这一阶段其实执行的就是系统安装时预先写入到MBR的Bootloader程序。它的任务仅是读取(加载)硬盘的0柱面,0磁道,2扇区的内容(/boot/grub/stage1)并执行。

  1. [root@CentOS6 ~]# ll /boot/grub/stage1
  2. -rw-r--r--. 1 root root 512 Mar 13 2018 /boot/grub/stage1

  这一阶段,使硬件初始化,为Stage2准备RAM空间(内存空间),读取Stage2到RAM空间(应该涉及到了Stage1.5阶段)。就是Stage1.5阶段或Stage2阶段的入口,引导进入Stage1.5阶段或Stage2阶段。

  另外,这一阶段并没有识别文件系统的能力。  

(2).Stage1.5阶段

  这一阶段是Stage1阶段和Stage2阶段的桥梁,具有识别分区文件系统的能力,此后grub程序便有能力去访问/boot/grub/stage2,并将其读取到内存执行。

  1. [root@CentOS6 ~]# ll -h /boot/grub/stage2  //大于512字节了
  2. -rw-r--r--. 1 root root 124K Mar 21 2018 /boot/grub/stage2
  3. [root@CentOS6 ~]# ls /boot/grub/*stage1_5  //有各种文件系统格式
  4. /boot/grub/e2fs_stage1_5 /boot/grub/minix_stage1_5
  5. /boot/grub/fat_stage1_5 /boot/grub/reiserfs_stage1_5
  6. /boot/grub/ffs_stage1_5 /boot/grub/ufs2_stage1_5
  7. /boot/grub/iso9660_stage1_5 /boot/grub/vstafs_stage1_5
  8. /boot/grub/jfs_stage1_5 /boot/grub/xfs_stage1_5

(3).Stage2阶段

  这一阶段会(初始化本阶段需要用到的硬件,检测系统的内存映像,)解析grub的配置文件/boot/grub/grub.cnf,根据配置文件加载内核镜像到内存中,通过initrd程序建立虚拟根文件系统,最后调用(转交)内核

  1. [root@CentOS6 ~]# cat /boot/grub/grub.conf
  2. # grub.conf generated by anaconda
  3. #
  4. # Note that you do not have to rerun grub after making changes to this file
  5. # NOTICE: You have a /boot partition. This means that
  6. # all kernel and initrd paths are relative to /boot/, eg.
  7. # root (hd0,0)
  8. # kernel /vmlinuz-version ro root=/dev/mapper/vg_centos6-lv_root
  9. # initrd /initrd-[generic-]version.img
  10. #boot=/dev/sda
  11. default=0  //设置默认启动项为第一个内核
  12. timeout=5  //菜单项等待选项时间为5秒
  13. splashimage=(hd0,0)/grub/splash.xpm.gz  //菜单背景图片
  14. hiddenmenu  //隐藏菜单
  15. //这里有时候会有passwrod参数,意思是进入急救模式(单用户模式)的密码是多少,可以是明文密码,可以是加密密码
  16. //例如password --md5 $1$1S9Xy$1MuGZSoPc2vAtkW.jvz0X/,这代表进入急救模式的password经过MD5加密,加密密码为$1$1S9Xy$1MuGZSoPc2vAtkW.jvz0X/
  17. title CentOS 6 (2.6.32-642.el6.x86_64)  //菜单项名称
  18. root (hd0,0)  //grub查找stage2文件及kernel文件所在设备分区,grub的根。第一块硬盘的第一个分区
  19. //启动的内核
  20. kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/vg_centos6-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_centos6/lv_swap crashkernel=128M LANG=zh_CN.UTF-8 rd_LVM_LV=vg_centos6/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
  21. initrd /initramfs-2.6.32-642.el6.x86_64.img  //内核匹配的ramfs文件,img是镜像文件

第三步、内核引导阶段

  简单说一下这一步的流程:通过内存中的虚拟根文件系统,加载驱动,然后切换到真正的根文件系统,并执行/sbin/init程序。

第四步、init初始化阶段(又叫系统初始化阶段)

  简单说一下这一步的流程:/sbin/init程序会读取/etc/inittab文件确认运行级别,然后执行/etc/rc.d/rc脚本,根据确认的运行级别启动对应/etc/rc.d/rc#.d/目录下的服务(#为0~6),与此同时执行系统初始化脚本/etc/rc.sysinit(软链接,指向/etc/rc.d/rc.sysinit),还会加载/etc/rc.local(软链接,指向/etc/rc.d/rc.local文件)用户自定义服务(脚本)。

  这里有个有意思的地方,/etc/rc.d/目录下的文件几乎在上一次都有相应的软链接(也就是/etc/目录下),唯一没有的/etc/rc.d/init.d/目录又似乎与/etc/init.d/目录完全相同

  1. [root@CentOS6 ~]# ls -ld /etc/rc*
  2. lrwxrwxrwx. 1 root root 7 Mar 13 2018 /etc/rc -> rc.d/rc
  3. lrwxrwxrwx. 1 root root 10 Mar 13 2018 /etc/rc0.d -> rc.d/rc0.d
  4. lrwxrwxrwx. 1 root root 10 Mar 13 2018 /etc/rc1.d -> rc.d/rc1.d
  5. lrwxrwxrwx. 1 root root 10 Mar 13 2018 /etc/rc2.d -> rc.d/rc2.d
  6. lrwxrwxrwx. 1 root root 10 Mar 13 2018 /etc/rc3.d -> rc.d/rc3.d
  7. lrwxrwxrwx. 1 root root 10 Mar 13 2018 /etc/rc4.d -> rc.d/rc4.d
  8. lrwxrwxrwx. 1 root root 10 Mar 13 2018 /etc/rc5.d -> rc.d/rc5.d
  9. lrwxrwxrwx. 1 root root 10 Mar 13 2018 /etc/rc6.d -> rc.d/rc6.d
  10. drwxr-xr-x. 10 root root 4096 Feb 18 02:17 /etc/rc.d
  11. lrwxrwxrwx. 1 root root 13 Mar 13 2018 /etc/rc.local -> rc.d/rc.local
  12. lrwxrwxrwx. 1 root root 15 Mar 13 2018 /etc/rc.sysinit -> rc.d/rc.sysinit
  13. [root@CentOS6 ~]# ls /etc/rc.d/
  14. init.d rc0.d rc2.d rc4.d rc6.d rc.sysinit
  15. rc rc1.d rc3.d rc5.d rc.local
  16. [root@CentOS6 ~]# diff -ruNa /etc/rc.d/init.d/ /etc/init.d/

(1)./etc/inittab文件

  1. [root@CentOS6 ~]# cat /etc/inittab
  2. # inittab is only used by upstart for the default runlevel.
  3. #
  4. # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
  5. #
  6. # System initialization is started by /etc/init/rcS.conf
  7. #
  8. # Individual runlevels are started by /etc/init/rc.conf
  9. #
  10. # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
  11. #
  12. # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
  13. # with configuration in /etc/sysconfig/init.
  14. #
  15. # For information on how to write upstart event handlers, or how
  16. # upstart works, see init(5), init(8), and initctl(8).
  17. #
  18. # Default runlevel. The runlevels used are:
  19. # 0 - halt (Do NOT set initdefault to this)
  20. # 1 - Single user mode
  21. # 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
  22. # 3 - Full multiuser mode
  23. # 4 - unused
  24. # 5 - X11
  25. # 6 - reboot (Do NOT set initdefault to this)
  26. #
  27. id:5:initdefault:

  这个文件直接看最后一行的那个数字就好了,我这里是5,就代表启动级别是5。

  另外,还需要了解下系统的启动级别:

    0  关机

    1  单用户模式、维护模式、急救模式,都可以

    2  多用户模式,但没有网络

    3  完整的多用户模式

    4  预留级别,暂时没用,不用考虑

    5  图形界面,XWindows

    6  重启

(2)./etc/rc.d/rc#.d/目录

  在启动时执行的/etc/rc.d/rc脚本,会调用/etc/rc.d/rc#.d/目录下的文件

  1. [root@CentOS6 ~]# ls /etc/rc.d/rc5.d/
  2. K01smartd K50dnsmasq K73winbind K88sssd S01sysstat S12rsyslog S24nfslock S26udev-post S82abrt-ccpp
  3. K02oddjobd K50xinetd K74ntpd K89netconsole S02lvm2-monitor S13cpuspeed S24rpcgssd S28autofs S82abrtd
  4. K05wdaemon K60nfs K75ntpdate K89rdisc S08ip6tables S13irqbalance S25blk-availability S50bluetooth S90crond
  5. K10psacct K61nfs-rdma K75quota_nld K92pppoe-server S08iptables S13rpcbind S25cups S50kdump S95atd
  6. K10saslauthd K69rpcsvcgssd K76ypbind K95firstboot S10network S15mdmonitor S25netfs S55sshd S99certmonger
  7. K15htcacheclean K71cgred K84wpa_supplicant K95rdma S11auditd S22messagebus S26acpid S70spice-vdagentd S99local
  8. K15httpd K72cgconfig K87restorecond K99rngd S11portreserve S23NetworkManager S26haldaemon S80postfix

  K开头的文件:要停止的服务(脚本),从01开始关闭,数字越小越优先关闭

  S开头的文件:要启动的服务(脚本),从01开始启动,数字越小越优先启动

  这些文件其实都是软链接,指向的都是/etc/rc.d/init.d/目录下的文件

  1. [root@CentOS6 ~]# ll /etc/rc.d/rc5.d/K01smartd
  2. lrwxrwxrwx. 1 root root 16 Mar 13 2018 /etc/rc.d/rc5.d/K01smartd -> ../init.d/smartd

第五步、启动终端

  最后一步就是用户登录了,没什么说的。

其他参考:https://www.cnblogs.com/gbk66/p/5900964.html

    https://blog.csdn.net/qq_27754983/article/details/75212666

    https://blog.csdn.net/free050463/article/details/82532091

    https://www.linuxidc.com/Linux/2018-08/153455.htm

    https://blog.51cto.com/xsllqs/1762422

CentOS6启动流程(含详细流程图)的更多相关文章

  1. Linux操作系统-CentOS6启动流程和服务管理

    Linux操作系统-CentOS6启动流程和服务管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux组成 1>.Linux: kernel+rootfs ker ...

  2. CentOS6启动流程

    CentOS6启动流程 1.加载BIOS的硬件信息,获取第一个启动设备 在通电之后,CentOS6会进行加电自检(Power On Self Test),这个过程主要是由BIOS完成的.在自检完毕,会 ...

  3. CentOS6 启动流程图文解剖

    我们在使用Linux操作系统的时候,我们只需按下电源键,等待,然后输入账户和密码就可以使用Linux操作系统了.那么在按下电源到输入账号和密码之前,操作系统都做了些什么?下面就来讲述在这段时间发生的动 ...

  4. centos6 启动流程

    具体过程:1)加载BIOS的硬件信息,执行BIOS内置程序.2)读取MBR(Master Boot Record)中Boot Loader中的引导信息.3)加载内核Kernel boot到内存中.4) ...

  5. CentOS5、CentOS6启动流程

    这三篇文章讲的都很好,可以看一下 http://os.51cto.com/art/201407/446819.htm http://www.mamicode.com/info-detail-11656 ...

  6. Centos系统的启动流程

    一.CentOS6启动流程 1.流程图 2.说明 (1)post加电自检 这个过程是开机后,BIOS或UEFI进行硬件检查的阶段 (2)MBR引导 自检硬件没有问题时候,这里以BIOS为例,BIOS将 ...

  7. Linux启动流程CentOS6和7的区别

    目 录 Linux启动流程    I 第1章 CentOS6启动流程    1 1.1 BIOS    1 1.2 MBR    1 1.3 GRUB    1 1.4 kernel(加载内核)    ...

  8. CentOS6和7启动流程

    CentOS6启动流程 https://linux.cn/article-8807-1.html BIOS 开机自检,硬件自检 MBR MBR磁盘分区是一种使用最为广泛的分区结构,它也被称为DOS分区 ...

  9. CentOS7启动流程

    同样我也找了一张CentOS7的启动流程图. 第一步.硬件启动阶段 这一步和CentOS6差不多,详细请看CentOS6启动流程(含详细流程图) 第二步.GRUB2引导阶段 从这一步开始,CentOS ...

随机推荐

  1. [整理]Node入门 » 一本全面的Node.js教程 - Demo实践所遇到的问题

    花了一个上午看完[转载]Node入门 » 一本全面的Node.js教程 根据里面的Demo自己手动实现过程中还是遇到了些问题,特整理在此. <1>.由于node.msi安装包已经自动添加了 ...

  2. iframe中的历史记录问题汇总及解决方案[转]

    在做页面统计的时候遇到了两个问题: 1.包含iframe的页面,在IE下按后退按钮不能刷新主页面.隐藏Iframe的src是统计程序的url,每点一次后退,就会发出一次页面加载时间请求. 2.由js动 ...

  3. 【AtCoder Regular Contest 080E】Young Maids [堆][线段树]

    Young Maids Time Limit: 50 Sec  Memory Limit: 512 MB Description 给定一个排列,每次选出相邻的两个放在队头,要求字典序最小. Input ...

  4. 【CodeForces】906 D. Power Tower 扩展欧拉定理

    [题目]D. Power Tower [题意]给定长度为n的正整数序列和模数m,q次询问区间[l,r]累乘幂%m的答案.n,q<=10^5,m,ai<=10^9. [算法]扩展欧拉定理 [ ...

  5. usbnet驱动深入分析-usb虚拟网卡host端【转】

    转自:http://blog.csdn.net/zh98jm/article/details/6339320 1.驱动流程:   2.明确probe函数的功能: probe有usb core 经枚举过 ...

  6. jQuery学习(二) 自定义扩展函数

    jQuery函数调用写法很优雅,在项目开发过程中,有需要自定义函数经常被使用到,将这些函数放置到项目ExtTool.js中,为了编码方式的统一,也希望这些自定义函数与jQuery函数一致的调用方式.在 ...

  7. 【Educational Codeforces Round28】

    咸鱼选手发现自己很久不做cf了,晚节不保. A.Curriculum Vitae 枚举一下间断点的位置. #include<bits/stdc++.h> using namespace s ...

  8. 日期时间设置 "2018-05-04T16:36:23.6341371+08:00" 格式

    using System;using System.Collections.Generic;using System.Globalization;using System.Text; namespac ...

  9. java基础65 JavaScript中的Window对象(网页知识)

    1.javaScript组成部分 1.EMCAScript(基本语法)    2.BOM(Browser Object Model):浏览器对象模型            浏览器对象模型中的浏览器的各 ...

  10. 洛谷P1411 砝码称重

    传送门啦 这个题总体思路就是先搜索在 $ dp $ void dfs(int keep,int now){ //使用 放弃 if(now > m) return; //已经放弃超过m个了,就退出 ...