博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux系统开机启动流程
阅读量:5299 次
发布时间:2019-06-14

本文共 2712 字,大约阅读时间需要 9 分钟。

这部分将了解Centos6和Centos7开机启动后的流程。

Centos6启动简要流程

1 开机BIOS自检

开机,首先加载BIOS(主板上的一块芯片)自检,检查硬件状态是否正常,对CPU、设备启动顺序、硬盘信息、内存信息、时钟信息等进行自检。当检查完毕没有问题就会根据BIOS里的设置,去读取对应的启动系统的硬盘。

2 读取MBR引导

MBR(Master Boot Record),读取启动硬盘上0柱面0磁道1扇区上的前446字节,读取引导程序。一个扇区大小是512字节,剩余的66字节用于记录磁盘的分区信息。引导程序读取后,将其加载到内存中执行,这个动作就是引导程序加载即Boot Loader,对应于Linux系统就是加载Grub信息。

3 加载GRUB菜单

加载GRUB菜单,选择启动操作系统,如下是grub.conf里的详细信息,具体参数解释如下。

(1)default=0 代表启动grub菜单中的第一个选项对应的系统,本次装的Centos6只有一个,默认启动第一个。

(2)timeout=5 代表菜单停留时间5s后自动启动,留个人员选择的时间。

(3)splashimage=(hd0,0)/grub/splash.xpm.gz grub菜单的画面对应的图片,保存在第一个硬盘的第一个分区。

(4)hiddenmenu 启动系统时不显示启动菜单选项,按照默认设置启动系统,除非用户按esc

(5)title CentOS 6 (2.6.32-696.el6.x86_64) 系统启动对应的项目名称

(6)root (hd0,0) 启动分区boot,里面包含内核文件和内核所需要的驱动文件,(hd0,0)代表第一个硬盘的第一个分区,查看就是sda1。

(7)kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=0a10496f-f76e-4a2e-9572-edf8e5d1066f rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet 位于boot分区上的内核文件和一堆可选内核参数。vmlinuz-2.6.32-696.el6.x86_64为内核文件,UUID可以通过命令来查看对应设备/dev/sda2。

(8)initrd /initramfs-2.6.32-696.el6.x86_64.img 内核文件驱动文件,也在boot分区。

grub菜单也可以设置网卡名字,如果前面安装忘记改了,这里可以从eth33修改为eth0。

4 加载内核kernel和驱动程序 

加载Linux内核就是根据上面grub.conf文件的设置,读取内核并进行解压缩操作,完成解压缩后屏幕输出'OK, booting the kernel'。另外还需要加载驱动程序文件,也是在grub.conf文件中设置的。

5 运行INIT进程

加载完后运行Linux的第一个进程,为INIT,如下图所示为运行的第一个程序 /sbin/init,进程号为1显示为第一个进程。

(1)读取/etc/inittab文件,设定系统运行级别(默认级别为3),后面根据运行级别来启动对应级别下的系统。

(2)读取/etc/init/rcS.conf文件,执行对应脚本 /etc/rc.d/rc.sysinit ,设置主机名,文件系统挂载,加载函数模块,欢迎信息展示等,以前是通过读取/etc/inittab文件来加载 /etc/rc.d/rc.sysinit脚本,现在修改为读取/etc/init/rcS.conf文件后加载。如下所示是脚本信息,这个特别的长以后学习Shell后可以查看下,不过可以基本看到一些操作,如设置主机名,挂载硬盘等。

启动系统后一堆的OK就是执行这个脚本后输出的结果。

(3)init进程加载内核模块

在Centos6下加载/etc/sysconfig/modules/下面的内核模块,上面Loading OpenIB kernel modules就是加载结果OK。查看我自己安装的发现暂时没有东西。

(4)读取/etc/init/rc.conf文件,执行对应的脚本 /etc/rc.d/rc 3

去/etc/rc.d/目录下查看,可以看到level0~level6的启动脚本。

查看运行级别3,可以看到开机需要启动的脚本。

(5)读取/etc/rc.local文件,设定开机自启动程序。

系统初始化后,可以把需要跟随计算机启动的命令设置在这里面。

(6)读取/etc/init/tty.conf文件,启动mingetty 3进程,显示登陆界面。

Centos7启动简要流程

前面四个跟Centos6一样,也是相继完成开机BIOS自检、读取MBR引导、加载Grub菜单和加载内核kernel。接下来的流程与Centos6不一样。

运行systemd进程

与Centos6不一样,systemd进程为第一个进程。

(1)加载initrd.target文件,里面包含挂载fstab文件系统

(2)读取default.target文件,设置target模式及脚本

 查看default.target,发现指向了multi-user.target。

可以看出multi-user.target对应就是运行级别3,在Centos7中用target模式来代替运行级别,跟Centos6有对应关系。

(3)读取sysinit.target文件,初始化系统及加载basic.target

  加载完multi-user.target后,开始读取sysinit.target文件,初始化系统。

(4)systemd启动multi-user.target下的服务程序,即对应target模式下的程序,程序目录为/etc/systemd/system和/usr/lib/systemd/system,这个类似Centos6的读取etc/rc.d然后执行对应的运行级别下的程序。

(5)读取/etc/rc.local文件,设定开机自启动程序

(6)读取getty.target文件,启动mingtty进程

 

以上为Centos6和Centos7开机的流程简单了解。

转载于:https://www.cnblogs.com/youngchaolin/p/11248043.html

你可能感兴趣的文章
百度地图API地理位置和坐标转换
查看>>
MyBatis学习总结(六)——调用存储过程
查看>>
code-代码平台服务器路径
查看>>
离线安装 Visual Studio Express 而不下载整个镜像文件的方法(转载)
查看>>
2017-2018-2偏微分方程复习题解析10
查看>>
Java抽象类和接口的比较
查看>>
iOS UI控件5-UIPickerView
查看>>
php连接postgresql数据库
查看>>
移动应用开发选型:向左还是向右?
查看>>
开发进度一
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>
CSS
查看>>
[LeetCode] 55. Jump Game_ Medium tag: Dynamic Programming
查看>>
[Cypress] Stub a Post Request for Successful Form Submission with Cypress
查看>>
程序集的混淆及签名
查看>>
thinkphp框架 中 ajax 的应用
查看>>
JAVA排序(一) Comparable接口
查看>>
判断9X9数组是否是数独的java代码
查看>>
Leetcode 268 Missing Number
查看>>