启动第一步--加载BIOS
当你打开计算机电源,计算机会首先加载BIOS信息,这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了,而这一切都与操作系统无关。
启动第二步--读取MBR
众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。
系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
启动第三步--Boot Loader
Boot Loader自举程序就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。
我们以Grub为例来讲解吧,毕竟用lilo和spfdisk的人并不多。
系统读取内存中的grub配置信息(一般为menu.lst或grub.conf),并依照此配置信息来启动不同的操作系统。
这里我们打开了grub.conf 这个文件,实际上是它是 /boot/grub/grub.conf 的 软链 , 有郊的内容如下,实际上我改动过了,如下图:
centos7的grub升级到了grub2
主要配置文件是
通常修改的配置文件主要是 和 目录
修改完配置后,都需要通过grub2-mkconfig命令下发。
GRUB2取代了grub逐渐成为主流,引导菜单启动从/boot自动生成,不是menu.lst手工配置。
Grub2修改内核启动顺序
在CentOS7中,提供了一个软件grubby,可以用来查看grub策略,如下:
列出所有内核
列出默认内核
列出默认索引
设置默认启动索引
重新下发
给grub2设定密码
设定密码
查看密码
Grub2磁盘编 的变更
旧版的 grub 不论磁盘还是分区的起始 码都是 0 ,而 grub2 在分区的部分是以 1 开始编
(hd0,msdos1)第一块磁盘,第一个分区
(hd1,gpt2) 第二块磁盘,第二个分区(GPT格式)
启动第四步--加载内核
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
启动第五步--用户层init依据inittab文件来设定运行等级
内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取他的配置信息/etc/inittab文件,并依据此文件来进行初始化工作。
CentOS 7 已经不支持 /etc/inittab 方式了
新版本的运行级别都定义在 /lib/systemd/system下:
可以针对不同需要设置不同的运行级别:
设置命令行级别(init 3)方法:
设置窗口级别(init 5)方法:
以上每一行都可以设置,CentOS 7 中 systemd 使用链接来指向默认的运行级别
设置前最好删除
/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:
0:关机
1:单用户模式
2:无 络支持的多用户模式
3:有 络支持的多用户模式
4:保留,未使用
5:有 络支持有X-Window支持的多用户模式(既图形化界面)
6:重新引导系统,即重启
我们可以在命令行输入 runlevel 的命令可以看到当前的运行等级 格式如下:N 3 ,左边是上次运行等级,右边是现在的运行等级,init命令加上等级,可以直接切换当前运行等级,如init 5 切换至图形界面
在/etc/inittab中,文件格式如下
id:run-levels:action:process
- id 标识符,一般为2个数字或2个英文
- run-levels 指定运行等级,可以指定多个,或者不写,代表全部
- action 指定运行状态
- process 指定运行的脚本或命令
action常用取值
- initdefault :指定系统缺省启动的运行级别
- sysinit : 系统启动执行process中指定的指令
- wait :执行process中的指令,并等待结束再运行其他命令
- once :执行process中的指令,不等待其结束,很少用到
- crtlaltdel :按下Crlt + Alt + Del 的process指令
- powerfail :当电源出现错误时指定的process指令,不等待其结束
- powerokwait :当电源恢复时执行的process指令
- respawn :一旦process出现中止,请重新运行该指令
在我们的这个目录里有这样几个文件,而我们的7个运行等级就是对应的这0-6这6个文件夹,有对应需要动的服务
而这7个文件夹里有我们需要的默认启动需要加载的服务。我们来看看这个文件夹
也很简单,他们全部是软链接文件,对应着/etc/init.d下面的脚本启动方式
其中S开头的代表是需要启动的服务(start的意思) ,K代表需要停止的服务。数字越小越优先启动,系统会分别启动他们。其实想要让系统在启动时不加载他们,只需要更改他们的名字,不让他们按照这样的规范就不会启动了
其实我们可以利用这里的文件达到自启动的目地
ln -s 加入软链接文件 chkconfig 查看和设定启动 ntsysv 可视化设定
启动第六步--init进程执行rc.sysinit
在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定 络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。如果你有兴趣,可以到/etc/rc.d中查看一下rc.sysinit文件,里面的脚本够你看几天的
启动第七步--启动内核模块
具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
启动第八步--执行不同运行级别的脚本程序
根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
启动第九步--执行/etc/rc.d/rc.local
你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:
This script will be executed after all the other init scripts.
You can put your own initialization stuff in here if you don’t
want to do the full Sys V style init stuff.
rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。
启动第十步--执行/bin/login程序,进入登录状态
此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐 登入系统了。:)
漫长的启动过程结束了,一切都清静了…终于可以使用了
文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24925 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!