设为首页 收藏本站
查看: 1212|回复: 0

[经验分享] CentOS 6开机启动流程理论篇

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-9-20 10:52:18 | 显示全部楼层 |阅读模式
CentOS 6开机启动流程理论篇
  • centos 系统的启动流程
  • grub
  • 破坏Linux的核心文件再修复体验系统启动流程


概述
任何系统启动的第一步必然是加电,然后计算机硬件会主动地读取BIOS来加载硬件设备信息并检测,之后系统会主动地读取第一个有引导程序的设备,该引导程序(grub)可以指定使用哪个内核来启动,并将其加载至内存当中运行,同时内核还要加载其他硬件设备以及对应的驱动程序,来例主机各个组件开始运行,等所有硬件设备加载完后,系统就真正地启动了,稍后系统会操作一些外部程序开始准备软件的运行环境,之后加载一些系统运行时所需要的软件程序,最后一公里就是等待用户的登陆.
本文主要以CentOS 5、6的启动说明Linux系统的启动流程,CentOS 7来日再叙!主要以CentOS 6为例说明!
从宏观上讲,centos 6的开机可简述为:
POST(加电自检)--> MBR引导--> grub--> 加载内核 --> 启动init进程 --> 用户登录
具体详情见下图:
wKiom1ffgDGTHCl1AAJLnMUnIjw285.jpg
1.加载BIOS的硬件信息,获取第一个启动设备2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备4.核心执行init程序,并获取默认的运行信息5.init程序执行/etc/rc.d/rc.sysinit文件6.启动核心的外挂模块7.init执行运行的各个批处理文件(scripts)8.init执行/etc/rc.d/rc.local9.执行/bin/login程序,等待用户登录10.登录之后开始以Shell控制主机
关键词:
bootloader: 引导程序,一个引导加载器
对于Windows而言,其bootloader为ntloader,仅启动的是OS.
对于Linux而言,目前流行的是gurb,其功能强大,允许用户选择要启动的系统(不同的内核版本),把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核。
MBR: 主引导刻录,位于硬盘的主引导扇区里面(硬盘的0柱面、0磁头、1扇区称为主引导扇区),其中bootloader占用了446bytes, 分区表占用了64bytes,2bytes的分区标识符55AA.
GRUB:
primary boot loader : 1st stage,1.5 stagesecondary boot loader :2nd stage,分区文件
grub的程序运行本配置加载是分三个阶段(stage)来运行:
stage1:运行bootloader主程序,这个程序必须要被安装在主引导区,即MBR中,而MBR中仅安装了bootloader的最小主程序,并没有安装bootloader的相关配置文件。
stage1_5: 在MBR随后的扇区中存放,主要用于与stage2所有分区的文件系统进行交互。
stage2: 通过bootloader加载所有配置文件及相关的环境参数信息,这些配置文件及相关的环境参数都存放于磁盘分区上的/boot目录下。
wKiom1ffgH3TOBbKAADJl66KBMM511.jpg
当bootloader读取了这些文件系统所定义的数据后,就能够识别文件系统并读取在该文件系统上的内核文件了。
grub作为Linux系统使用最广泛的启动管理器,我们有必要了解一下其配置文件grub.conf的内容:
wKiom1ffgJbT70dsAADGUTEH-xY791.jpg
Note:
default=0    表示默认的启动条目timeout=5    表示等待时间,如果超过5秒,则使用默认的启动条目defaultsplashimage=(hd0,0)/grub/splash.xpm.gz    定义启动时的背景图片信息hiddenmenu    启动时是否要显示菜单,默认情况下是不显示菜单信息,如果要显示,注释掉该行即可title    定义各个操作系统的名称root (hd0,0)    root: 表示内核文件存放的位置,这里指的是分区位置,而非根目录;    硬盘以hd表示,代号以()括起来,如(hd0,0)表示磁盘上的第一个分区,磁盘编    号是grub搜寻到的顺序。kernel    内核的名称及一些启动时的核心参数,由于启动过程中需要挂载根目录,因此    就需要指定根目录所在的分区。initrd    initrd或initramfs,即虚拟文件系统
grub也支持命令行接口:直接在shell中输入grub
wKioL1ffgMvBGG02AAD1nZwA5jE175.jpg
grub的保护机制:只有通过认证才能修改grub.conf信息,可以通过以下方式来对grub.conf进行保护:
1. 在第一个title之上添加password --md5     主要用于保护编辑功能;2. 在某个title内添加password --md5    主要用于保护内核    生成密码的命令:grub-md5-crypt              openssl passwd -1   # -1表示生成md5
Kernel: 自身初始化
探测可识别到的所有硬件设备加载硬件驱动程序(可能借助于ramdisk加载驱动)以只读方式挂载根文件系统运行用户空间的第一个应用程序:/sbin/init
init:
SysV: init, CentOS 5之前    配置文件:/etc/inittabUpstart: init,CentOS6    配置文件:/etc/inittab, /etc/init/*.confSystemd:systemd, CentOS 7    配置文件:/usr/lib/systemd/system             /etc/systemd/system
ramdisk:
内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问ramdisk--> ramfs提高速度CentOS 5: initrd, 工具程序:mkinitrdCentOS 6: initramfs,工具程序:mkinitrd, dracut
在/etc/inittab中定义了系统的默认启动级别及所有的级别,通常默认为3或5级别,各级别之间可通过 init [0-6] 来切换,可通过runlevel或者who -r命令来查看当前的运行级别。
wKioL1ffgQKz3nlnAACq6Q4hXRs954.jpg
7个不同的run level 需要启动的scripts放置路径: /etc/rc.d/
wKiom1ffgRqz4myYAADG_6z-3oc694.jpg
其中,/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) 清理操作
另外,centos 5中,/etc/inittab中还有这一字段:
wKioL1ffgTzz3ZjtAABTqxOMnJQ406.jpg
rc N意味着读取/etc/rc.d/rcN.d/,里面的文件都是以K或S打头的链接文件。
K*: K##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务S*: S##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖到的服务
wKioL1ffgWCCRj1kAADVn5v7wY0075.jpg
wKioL1ffgXKh2h9-AAFh8n6dsrE991.jpg
注意:正常级别下,最后启动一个服务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在指定运行级别脚本后运行,可以根据情况,进行自定义修改
wKiom1ffgbiDDpElAACU7Uj0ldA922.jpg
wKiom1ffgdDCCtWGAABD0WYzZBg866.jpg
小结:CentOS 6的启动流程:
POST --> Boot Sequence(BIOS) --> Boot Loader --> Kernel(ramdisk) --> rootfs--> switchroot--> /sbin/init-->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别--> 系统初始化脚本rc.sysinit--> 关闭或启动对应级别的服务--> 启动终端
小结:grub
  • stage1: mbr
  • stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
  • stage2:磁盘分区(/boot/grub/), stage2及内核等通常放置于一个基本磁盘分区

在grub引导内核启动的过程中是可以设置内核参数的,譬如是否开启selinux, 系统的最大loop文件,系统要启动的第一个进程等,这些设置的内核参数可用如下命令查看:
[iyunv@centos6 ~]#cat /proc/cmdlinero root=UUID=02ca7016-e9e5-47c2-b015-cd99629f2df0 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16   KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet[iyunv@centos6 ~]#
当然,还有专门的内核参考文档:usr/share/doc/kernel-doc-2.6.32/Documentation/k ernel-parameters.txt
要想查看此文档,需要安装相应的kernel-doc包,直接挂载光盘可安装。
[iyunv@centos6 /usr/share/doc/kernel-doc-2.6.32/Documentation]#ls kernel-docs.txt kernel-docs.txt[iyunv@centos6 /usr/share/doc/kernel-doc-2.6.32/Documentation]#
关于临时根文件系统
临时根文件系统允许内核在没有挂载任何物理磁盘的情况下完整地实现引导,这个临时根文件系统就是initrd. 在内核引导过程中,初始 RAM 磁盘(initrd/initramfs)是由stage2加载到内存中的,它会被复制到RAM中,并挂载到系统上。当内核被引导之后,可以正式装备根文件系统了,此时会将 initrd 根文件系统卸载掉,并挂载真正的根文件系统,这就是所谓的switch root,即根切换.
了解了系统启动的基本流程,以下我们通过“破坏式实验”,即破坏系统启动过程中的一些关键环节,使系统无法启动,然后我们再通过修复这些文件使得系统正常重启,进而体验Linux系统的启动流程,这些关键环节包括破坏grub三个stage(stage1、stage1-5、stage2) 中的任何一个阶段,甚至是整个grub; 还有挂载文件/etc/fstab,内核文件vmlinuz, 系统引导时需要加载的驱动程序文件initramfs以及MBR中的相关信息等。
本文半前部分(理论篇)我们主要讲述了centos 6的启动流程,解析了相关的关键词,后半 部分(实验篇)将通过大量破坏式实验体验了相关的关键文件在Linux系统中起的作用。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-274895-1-1.html 上篇帖子: iSCSI远程块存储 下篇帖子: CentOS7更改root密码及其字符界面图形界面切换
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表