author:JevonWei
版权声明:原创作品


Centos6 启动流程

  1. POST开机自检
    当按下电源键后,会启动ROM芯片中的CMOS程序检查CPU、内存等硬件设备是否正常运行,CMOS中的程序即为我们通常称之为的BIOS,在BIOS中我们可以设置硬盘接口的类型及系统的启动方式和虚拟化等设置。当然,在我们的电脑主板上还会有一块纽扣电池专门用来给ROM供电,从而保证BIOS的的正常工作,使得主板断电后BIOS并不会立即停止工作。
  2. 加载BIOS中的Sequence
    在系统启动时,默认是不知道你的系统存放在哪个设备上的,故需要按照BIOS中设置的引导加载器bootloader查找,查找到的第一个有引导程序的设备即为此次用到的设备。
  3. bootloader 引导加载器
    系统的引导程序即为bootloader,在不同的操作系统中的bootloader是不同的。windows使用的bootloader程序为ntloader,仅可以对windows系统进行引导,而不能引导其他的操作系统;Linux的bootloader为GRUB,GRUB不仅可以对Linux系统进行引导,还可以引导其他的操作系统;故当我们需要安装双系统时,都会将Linux系统最后安装;

    bootloader的功能:提供一个菜单,允许用户选择要启动的操作系统或不同的内核版本,然后将用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统的控制权转交给内核处理。

    bootloader的引导程序GRUB存放在MBR中

  4. 引导加载程序GRUB

     grub legacy分为三个阶段   stage1:这一阶段数据存放于MBR中stage1_5:这一阶段为MBR之后的扇区,同时也是stage1到stage2的过度,为了让stage1中的bootloader能够识别stage2阶段所在分区的文件系统stage2:磁盘上的/boot/grub分区stage2及内核等通常放置于一个基本磁盘分区:功用(1):提供菜单,并提供交互式接口a:内核参数 e:编辑模式,用于编辑菜单c:命令模式,交互式接口(2):加载用户选择的内核或操作系统允许传递参数给内核可隐藏此菜单(3):为菜单提供了保护机制为编辑菜单进行认证为启动内核或操作系统进行认证
  • grub legacy界面如下

    在此界面按“e”进入如下所示的编辑模式,用于编辑启动菜单

    然后按“e”进入grub的命令行的编辑模式,“c”进入交互式命令行,“b”启动系统,在此按“c”键,进入如下界面

    在此命令行中常用的命令有:

        help:获取帮助列表help KEYWORD:详细帮助信息find (hd#,#)/PATH/FILENAME:在分区上查找FILENAME文件  eg find (hd0,0)/vmlinuz-2.6*root (hd#,#)  指明hd#,#设备为/(根)设备eg root(hd0.0)find vmlinuz-2.6* kernel /PATH/TO/KERNEL_FILE 设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数
  • 安装grub:

      (1) grub-installgrub-install --root-directory=ROOT /dev/DISK 根据跟挂载分区设备安装/boot启动目录和grub,--root-directory=ROOT 指明grub存放跟路径目录,grub路径目录已存在,grub文件自动生成(2) grub  局限性依赖于grub目录下的文件grub> root (hd#,#)  grub跟位于hd#磁盘#个分区 grub> setup (hd#)    将grub安装到hd#硬盘上
  • Cnetos 6中grub的配置文件保存在/boot/grub/grub.conf文件中,常用的选项如下

      default=#:设定默认启动的菜单项,落单项(title)编号从0开始timeout=#:指定菜单项等待选项选择的时长;splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;hiddenmenu:隐藏菜单password [--md5] STRING:菜单编辑md5认证password --encrypted STRING    512口令密码加密          title TITLE:定义菜单项"标题",可出现多次;root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的"根"kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS] ro root=/dev/sda2  selinux=0 quiet 启动的内核文件路径和/分区路径, selinux=0 禁用SELinux策略,quiet 显示内核启动过程 initrd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件password [--md5] STRING:启动选定的内核或操作系统时进行认证内核参数(用于向内核传递参数):rhgb 启动过程图形界面显示quiet 显示内核启动过程 max_loop 100  生成100个loop设备selinux=0 禁用SELinux策略
  • /boot/grub/grub.conf配置文件如图所示

  • /boot/grub/grub.conf文件中也可以添加密码,从而使进入启动菜单和内核编辑界面提示输入密码,最终达到提升系统安全性的目的

      密码放在不同的位置,即产生不同的加密效果     生成密码口令grub-md5-crypt命令:生成md5密码口令grub-crypt  密码口令512加密算法

      在grub.cfg文件中编辑password --[md5] 口令    增加加密口令或md5加密   password --encrypted 口令 添加512加密口令     


    加入的两个密码都不影响电脑的正常启动,只是在编辑启动设置选项时起作用;第一个password --md5加密是在菜单选择时输入密码,第二个password --encrypted加密是在编辑系统启动设置时输入密码,如下所示
    第一次密码的输入,编辑此界面进入单用户或grub命令设置时输入md5加密口令,按‘p’键输入口令,然后进入正常的编辑界面


    进入系统时的界面的加密

    当如下界面按‘b’键启动时,将会进入第二次加密512口令加密界面

    密码输入正确,即可正常进入系统

    结论

    在grub.conf文件上的不同的位置设置密码,发生的效果不同,故需准确明白需要在启动的哪个阶段加密从而才能在适当的位置添加密码,否则可能不产生理想的效果,在title之前添加密码即为启动菜单选择界面加密,在title之后为选择title之后的加密,在内核文件之后添加密码即为启动系统加密

5 . kernel
在GRUB中选择对应的kernel进入,然后kernel会对自身系统进行初始化操作

    kernel初始化探测可识别到的所有硬件设备加载硬件驱动程序:(可能会借助于ramdisk加载驱动)以只读方式挂载根文件系统运行用户空间的第一个应用程序:/sbin/init内核的组成部分:kernel:内核核心,一般为bzimage,通常在/boot目录下,名称为vmlinuzkernel object:内核对象一般有三种选择,一般放置于/lib/modules/VERSION-RELEASE/ramdisk: 内核的特性之一:使用缓冲和缓存来回对磁盘空间访问ramdisk文件制作:(1) mkinitrd 为当前正在使用的内核重新制作ramdisk文件     mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) 由当前系统版本生成相应版本的initramfs文件    (2) dracut命令 为当前正在使用的内核重新制作ramdisk文件       dracut /boot/initramfs-$(uname -r).img $(uname -r)            

6 . 运行init程序
Centos 6init程序的存放在/sbin/init,init共分为7个级别
init程序的配置文件:/etc/inittab,/etc/init/*.conf

    init的七个运行级别    0:关机1:单用户模式(root自动登录),single,维护模式2:多用户模式,启动网络功能,但不会启动NFS;维护模式3:多用户模式,正常模式;文本界面4:预留级别;可同3级别5:多用户模式,正常模式;图形界面6:重启   默认运行级别为3,5切换运行级别:init #查看运行init级别:runlevel;who -r

7 . 运行系统初始化脚本
系统初始化脚本对用的配置文件:/etc/rc.d/rc.sysinit

    /etc/rc.d/rc.sysinit:系统初始化脚本主要内容为 (1)设置主机名(2)设置欢迎信息(3)激活udev和selinux(4)挂载/etc/fstab 文件中定义的文件系统(5)检测根文件系统,并以读写方式重新挂载根文件系统(6)设置系统时钟(7)激活swap设备(8)根据/etc/sysctl.conf 文件设置内核参数(9)激活lvm及software raid设备(10)加载额外设备的驱动程序(11)清理操作
  • cat /etc/inittab

    id:5:initdefault: 表示默认运行级别为5

      每一行定义一种action以及与之对应的processid:runlevel:action:processaction:wait:切换至此级别运行一次respawn:此process 终止,就重新启动之initdefault:设定默认运行级别;process省略

8 . 启动系统服务
centos6下的系统服务脚本都放在/etc/rc.d/init.d或者/etc/init.d中,可以看到两个文件中的内容是一样的,因为/etc/init.d链接到了/etc/rc.d/init.d中

 通过chkconfig命令可以查看什么系统级别下开启了哪些服务,以及添加服务到系统中并在指定级别下启动chkconfig --list 查看系统中所有服务的运行级别状态    添加服务到chkconfig        chkconfig --add httpd  添加httpd服务到chkconfig从chkconfig中删除服务chkconfig --del httpd  将httpd从chkconfig中删除chkconfig --add 服务名,在添加的时候需要将对应的服务放入/etc/init.d中,并在服务脚本中加入chkconfig: LLLL nn nn写到LLLL的init级别就是S的,没写得就是K的,第一个nn代表S的数字,第二个nn代表K的数字[注意]:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本;因此,不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中。/etc/rc.d/rc.local在指定运行级别脚本后运行

9 . 打印登录提示符
系统在启动完程序之后就会打印登录提示符,然后输入账号密码进行登录,最后进入相应的系统级别
10 . 总结

    1、加电自检2、按照BIOS中设置的Boot Sequence查找有bootloader程序的设备3、加载MBR中的bootloader程序GRUB4、进入GRUB设置的默认kernel5、kernel初始化6、运行init程序7、运行系统初始化脚本8、启动对应服务9、打印登录提示符

启动修复

在前面系统的启动流程基本上已经说完了,我想已经清楚系统是如何启动的了,如果系统启动失败了呢,我们该如何去解决呢?下面就让我们来看下常见的启动错误及如何修复的吧
了解系统的启动修复,请点击下面的链接
http://www.cnblogs.com/JevonWei/p/7146150.html
http://www.cnblogs.com/JevonWei/p/7146719.html

http://www.jianshu.com/p/0e44aa26e3f0

转载于:https://www.cnblogs.com/JevonWei/p/7144339.html

Centos 6启动流程详解相关推荐

  1. CentOS系列启动流程详解

    一.Linux启动内核文件 1.Linux系统组成 动态视角:内核+根文件系统 静态视角:磁盘分区+相关文件 2.Kernel特点 (1)支持某块化:.ko (kernel object)文件 (2) ...

  2. U-Boot启动流程详解

    参考:U-Boot顶层目录链接脚本文件(u-boot.lds)介绍 作者:一只青木呀 发布时间: 2020-10-23 13:52:23 网址:https://blog.csdn.net/weixin ...

  3. 【Autosar 启动流程详解】

    Autosar 启动流程详解 1. vLinkGen_Template.lsl 2. BrsHwStartup.c 3.BrsMainStartup.c 4.BrsMain.c 链接文件: 1. vL ...

  4. 【正点原子Linux连载】第三十二章 U-Boot启动流程详解 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  5. golang程序启动流程详解

    golang程序启动流程详解 环境 go1.16.5 linux/amd64 用例 package mainimport "fmt"func main() {fmt.Println ...

  6. android zygote启动流程,Android zygote启动流程详解

    对zygote的理解 在Android系统中,zygote是一个native进程,是所有应用进程的父进程.而zygote则是Linux系统用户空间的第一个进程--init进程,通过fork的方式创建并 ...

  7. 【线上沙龙直播报名】App 启动流程详解及其优化

    点击上方"公众号"可以订阅哦 [美团点评技术沙龙Online]是美团点评技术团队推出的线上分享课程,每月2-3期,采用目前最火热的线上直播形式,邀请美团点评技术专家,面向互联网技术 ...

  8. Springboot启动流程详解

    SpringMVC请求流程详解 SpringMVC框架是一个基于请求驱动的Web框架,并且使用了'前端控制器'模型来进行设计,再根据'请求映射规则'分发给相应的页面控制器进行处理. (一)整体流程 每 ...

  9. Android App启动流程详解

    前言:在之前的文章中已经写了apk的打包流程.安装流程,今天就是梳理一下apk系列的最后的流程--app启动流程.经过今天的梳理以后咱们就可以对apk包是怎么编译生成的.apk是怎么被安装到安卓手机的 ...

最新文章

  1. python是大学必修课吗-好消息!今天,审计、会计、税务、财务主管彻底沸腾了……...
  2. 上海启动5G试用!104页PPT,为你深度解析5G终端的创新和机遇
  3. s3c2410开发环境建立
  4. postgresql 创建用户_国内源安装postgresql
  5. 用 GetEnvironmentVariable 获取常用系统环境变量
  6. java 调用 go_实践总结:在 Java 中调用 Go 代码
  7. Android SDK上手指南:用户交互
  8. canvas设置渐变
  9. 前端那些事之时间轴篇
  10. 如何选择和使用ACM LaTeX模板
  11. 《HTTP权威指南》读书笔记---说明
  12. Axure计算器原型
  13. QT 软键盘实现
  14. java静态与非静态
  15. 2016年4月编程语言排行榜 Visual Basic正渐行渐远
  16. PPT提示缺少字体怎么解决?
  17. 1.6 例子:CIFAR-10分类
  18. 《被讨厌的勇气》- 要有被讨厌的勇气
  19. jeecg boot学习
  20. vue ztree插件的使用

热门文章

  1. 算法设计思想(5)— 递归法
  2. 2017 年总结及 2018 年计划
  3. 面试常碰到++p/p--问题到底结果是什么?
  4. CentOS 安装docker.ce报错提示containerd.io >= 1.2.2-3问题
  5. XGBoost4J-Spark基本原理
  6. 利用硅光子学的移动心脏监护仪
  7. 激光雷达和V2X技术
  8. Java 遍历map
  9. python 实现可以一直输入内容直到某个特定的值退出循环的操作
  10. INSTALL_FAILED_VERSION_DOWNGRADE