大家好,我是高胜寒,本文是Linux运维-循序渐进学运维-基础篇的第59篇文章
七月新秋风露早,今天我们一起聊聊Linux启动过程及相关的配置文件。 我们以centos6为例,一起来研究一下它的启动过程
centos6的启动过程,包含以下几个部分
系统通电之后,主板的BOIS 运行POST(Power on self test)代码,检测系统外围的一些设备,比如: cpu,内存,显卡,IO,键盘鼠标等。
检测通过后,根据BIOS里boot设置的(光驱,硬盘,网盘)启动顺序,搜索相应的启动驱动器,并获取第一个启动设备的代号。读取第一个启动设备的MBR的引导加载程序(lilo,grub,spfdisk)启动信息,从MBR中加载启动引导管理器(grub),并运行该启动引导管理,进入grub启动引导阶段。
注意: MBR引导记录: 用于引导磁盘空间小于2T的空间
GPT引导记录: 用于引导磁盘空间大于2T的空间
所谓的grub引导,就是读取MBR的boot Loader
MBR的硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)
备注: 为什么MBR分区表,只能分四个主分区?
注:磁盘默认一个扇区大小为:512字节。MBR由以下3部分组成:
第一部分是:主引导程序(boot loader)占446个字节。主引导程序,它负责从活动分区中装载,并运行系统引导程序。
第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。每个分区表项长16个字节,164=64字节。为分区项1、分区项2、分区项3、分区项4。64字节只存4个分区表。
第三部分是MBR有效标识位,占2个字节,固定为55AA。如果这个标志位0xAA55,就认为这个是MBR。
所以:164+446+2=512
依据 boot loader 的设定,到引导分区加载 Kernel ,Kernel 会开始侦测硬件并加载驱劢程序;
在硬件驱动成功后,Kernel 会主动执行 init 程序,而 init 会取得 run-level 信息;
init是执行的第一个程序,所以他的进程编号pid =1 ,其他的进程都是从它衍生出来的,都是它的子进程。
前面我们有提到过,对于孤儿进程,一般是送到init进程来处理。
init 执行 /etc/rc.d/rc.sysinit 文件来准备软件执行的作业环境 (如网络、时区主机名,selinux等);
init 执行 run-level 下各个服务并启动 (script 方式);
脚本的内容是:
init 执行开机后自动运行脚本 /etc/rc.d/rc.local 文件;
这个脚本主要是一些自动以的开机启动程序,如果你想开启时启动什么内容,可以在里面写
可以看到这里创建了一个 /var/lock/subsys/local 这个文件的创建只是为了证明rc.local 这个脚本已经执行过了,目的在于避免这个脚本重复执行。
在系统里会有一个star()的函数来判断文件是否已经创建,如果已经创建,后面读取的时候就不会在去重建,避免系统重复启动。
所有的服务都运行成功后,接下来进入登录用户系统的操作, 返回init , 这时候初始环境都已经配好了, init 打开虚拟终端机控制程序 mingetty 来启动 login 程序,最后就等待用户登入
虚拟终端由 mingetty程序产生的:
语法:
mingetty [–long-hostname][–noclear][tty]
当我们看到mingetty的登录界面的时候,就可以输入用户名和密码了。
login会接收mingetty传来的用户名作为用户名的参数,先判断用户名不是root,且存在/etc/nologin文件,然后输出nologin的文件内容并退出,这样做一般是为了防止非root用户登录。
之后就可以根据passwd ,和shadow来验证账号的信息。
[root@ecs-c13b ~]# ls /boot
config-2.6.32-696.el6.x86_64
config-2.6.32-754.27.1.el6.x86_64
efi
grub
initramfs-2.6.32-696.el6.x86_64.img
initramfs-2.6.32-754.27.1.el6.x86_64.img
initrd-2.6.32-754.27.1.el6.x86_64kdump.img
symvers-2.6.32-696.el6.x86_64.gz
symvers-2.6.32-754.27.1.el6.x86_64.gz
System.map-2.6.32-696.el6.x86_64
System.map-2.6.32-754.27.1.el6.x86_64
vmlinuz-2.6.32-696.el6.x86_64
vmlinuz-2.6.32-754.27.1.el6.x86_64
查看grub的配置文件
(图片有注释)
运行级别一共有6个:
# 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)
# 1 - 单用户模式
# 2 - 多用户,没有 NFS
# 3 - 完全多用户模式(标准的运行级)
# 4 – 系统保留的
# 5 - X11 (x window)
# 6 - 重新启动 (千万不要把initdefault 设置为6,否则将一直在重启 )
centos6的启动和centos7有点区别,但大同小异,下一篇文章我们来讨论centos7的启动过程。
如果是面试问到启动过程:
加点自检-内核引导-运行init-系统初始化-建立终端-用户登录系统
我是高胜寒,一个在教培行业,不忘初心的人,欢迎点赞收藏,我们下篇文章再见!