【收藏级】最详细linux开机启动流程

为什么要了解开机启动流程?愿意很简单!搞IT的连开机启动流程都不知道,不觉得丢人吗?于是,我们就了解了开机启动流程。其实不然,我们知道,机器在运行时候,随时都会因为raid卡故障,idrc需要升级等各种原因重启后就再也没起来过。我遇到过,DELL的服务器,每个RAID卡故障,再也没起来过。好在我通过启动过程,定位到是raid卡问题,迅速解决了。OK,下面就来说说开机启动的那些事。
先来一张完整的图压压惊:
开机启动流程图

对于一个系统管理而言,首先是给这个主机通电,一旦主机通上电主机就会进入加点自检(post),也就是说在系统开机第一步就是读取BIOS(base input outout system)内的程序信息,对主机的CPU,内存,硬盘,主板等做出检测,比如:如果是内存出问题,就是滴滴两响。这个过程通过之后系统会根据硬件本身的写在COMS内的程序指针会指向我们的bootsquence说白了就是通过帮助我们找到bootsquence的一个韧体(韧体可以理解为写在硬件上的软件)。
注意:bios和post实际是同一过程的,分开描述而已。

如果BIOS过程过了就是Bootsquence的过程了,Bootsquence的过程就是根据我们我们在硬件的设置是哪一个启动(光盘?|硬盘?|网卡?|U盘?),boot sequence(注意这个过程是从前向后,一旦前面的设备存在系统。就不会找下面的了,即使是坏的也不会了,因此我们需要把好的设置在前面)。这是bootsquence帮助主机送到的加载内核的硬盘门口了。下面的工作,就是bootload来加载内核了。
Bios的启动顺序调整:在开机时及按F2键、调节到启动项。上下键选择启动的条目,使用shift和“+”移动选项向上移动,“-”移动选项想下移动。使用F10保存。

进入内核的加载,Boad loader.这个过程依赖的是MBR(Master Boot Record)的引导的。这个过程首先是读取磁盘的第一个扇区,在MBR中写有我们内核的存储位置和分区信息的程序。对于centos6.6而言,内核是存储在文件系统中的,但是我们又还没有加载这个文件系统又如何来找这个内核呢?实际上除了文件系统的根,我们还有一个grub的根/boot/grub/。也就是说当一个系统在加载内核时MBR中指定根据/boot/grub/来读取下面的grub.conf文件来完成的加载ramdisk(这是一个临时的根)文件系统,当整个内核完成加载之后,会进行根的切换。也就是切换到我们的/root/。

这个MBR是分为两个大部分的组成,第一个部分是grub,这是一个内核的启动管理器。他负责引导加载我们的内核。这个过程可以参考/etc/boot/grub.conf文件查看。第二个大部分就是partition table,这里面记录的是我们的系统的分区的信息,第三个部分是两个字节记录的是:结束标示位也就是图示的55AA。
MBR详解

当内核加载完成之后,就需要加载我们的INIT程序了,但是我们的INIT程序是,放在文件系统当中的,但是没有文件系统的入口,我们有没有办法加载进程。这时就需要Ramdisk了,ramdisk可以给我们生成一个临时的根(或者说是一个小系统),然后,通过这个临时的系统来加载我们init程序,并完成问价系统根的切换。

init的过程,这是所有的进程的父进程。通过这个进程,将会启动其他的相应进程,
init将会推动的过程包括,根据用户的配置选择相应的启动级别并进行系统的进一步初始化。比如通过/etc/inittab来获取运行级别RUNLEVEL,然后调用第一个初始化脚本rc.sysinit。
rc.sysinit这个初始化脚本,将会完成的工作包括:启动设备管理器,设置主机名,文件系统的检测根据清理存储垃圾内容,根据记录的日志恢复文件系统(之所以会有日志记录的的功能,是为了防止系统突然断电,内存中的东西没来得及刷写到磁盘上而丢失。这是一种安全的功能)和然后以只读的方式挂载内核(防止误写操作)等,然后读写的方式挂载本地文件系统,激活交换分区等,以及网络的设置,安全规则的处理等等。详情如下图:
启动内容详解

在执行完第一个脚本的基本环境初始化之后,紧接着根据用用户指定的运行级别。系统会到/etc/rc.d/rc#.d/下面以找到以S开头的脚本进行读取,这些脚本都是以软连接的形式指向我们的/etc/rc.d/init.d/的服务脚本。这项就是加载我们允许开机自动启动服务的过程。例如,我们的系统是命令行模式是3,那么就是系统加载/etc/rc.d/rc3.d/:

系统加载过程
系统加载服务1
系统加载服务2
这项完成之后,就是加载我们本地的自定义脚本/etc/rc.d.rc.local/这里面,我们可以添加一些期望开机就会执行的命令。比如:mount -r /dev/cdrom /media/cdrom 这也其实就是开机自动挂载了。

当这些所有的脚本都执行完毕,系统就进入登陆界面了。
在登陆系统之后,依然是要有会有环境变量的初始化和额外的脚本的初始化。

交互式登录shell:

非交互式登录shell:专用于后台执行脚本的

【/etc/profile文件的作用】
1,提供程序登陆的环境变量。
2,设定命令历史的条目。
3,提供UMASK的默认配置。
4,读取/etc/profile.d/*.sh结尾的文件。

【/etc/profile.d/*.sh】
这个就是我们自定义的环境变量的脚本位置
【~/.bash_profile】
这是一个局部的环境变量脚本,是对全局/etc/profile的补充。
1,比如我们可以在这里面设置自己的欢迎信息。2
2,以及在添加自己的环境变量。
3,他会读取我们自己家目录下面的,脚本别名文件./bashrc

####主要是用来添加别名的文件。
[root@node1 ~ ]# vim /etc/bashrc
别名的设置文件
关于alias的命令行设置请看:linux命令行alias设置

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  1   博主  0

  1. avatar 暴走的运维 0

    如果本文对您有帮助,将非常荣幸! :mrgreen: