Centos 6 、Centos 7 系统启动原理 | 您所在的位置:网站首页 › centos6开机启动流程 › Centos 6 、Centos 7 系统启动原理 |
CentOS 6 CentOS6 系统启动过程及相关配置文件 开机加电自检 加电自检,是计算机硬件设备主板上的 BIOS 程序的一个功能,其作用是设备加电后检查所有设备是否可用,并且将最终检测记过通过显示器或 LED 设备显示出来。 磁盘分区表引导 通过 BIOS 确定引导哪一个存储设备后,则尝试引导该设备上的分区表,有可能是 MBR 也有可能是 GPT(不会是LVM),不管哪一个都将其中的代码加载到内存中,并运行起来。 磁盘从外圈开始读取:先读先写,外圈磁盘连续长 grub 菜单引导 grub(GRand Unified Bootloade)是一个菜单引导程序,可以实现单系统或者多系统的选择功能,目前 CentOS 6 中仍旧使用 grub 来引导操作系统的内核。 ![]() default:定义默认启动的操作系统 timeout:定义选择操作系统菜单的等待时间 splashimage:指定我们选择 kernel 或操作系统菜单后面那张图片。 hiddenmenu:表示隐藏选择操作系统的菜单,只有出现等待界面后按下 enter 键才会出现。如果没有这个字段, 则每次系统启动都会出现这个选择菜单。 title:grub 菜单”名称”。 root:用于指定 grub 所能识别的根,而不是根文件系统。 kernel:用于指定系统的内核文件的位置 initrd:帮助 kernel 完成系统的启动,例如加载根文件系统所在分区的驱动等。 password:设定密码。放在 title 外表示进入操作系统等待菜单的编辑模式需要密码,而放在 title 内表示启动对应的操作系统需要密码,密码可以是明文或是用 MD5 进行加密过的。可以防止其他人编辑菜单进入单用户模式启动系统。 加载内核 将菜单中选择的内核加载到内存中,展开并启动一个微型操作系统 运行 init 进程 使用加载起来的内核程序执行 Linux 的第一个进程 init 进程,即初始进程 加载系统运行级别 加载/etc/inittab 文件,确定其对应的系统运行级别,然后启动完整的操作系统
系统运行级别:/etc/inittab 中 runlevel 分为 0-6 ;7 个等级 0:关机,shutdown 1:单用户模式(sigle user),root 用户,无须认证;维护模式; 2:多用户模式(multi user),会启动网络功能,但不会启动 NFS;维护模式; 3:多用户模式(multi user),完全功能模式;文本界面; 4:预留级别:目前无特别使用目的,但习惯同 3 级别使用; 5:多用户模式(multi user),完全功能模式,图形界面; 6:重启模式, ![]() id:3:initdefault: #这里决定系统启动的级别 启动对应级别下的服务如: init 3 级别 初始化系统 加载/etc/rc.sysinit 文件完成初始化,主要包括设置主机名,设置 IP 等操作 根据启动级别开启服务 根据第六步确定的系统运行级别,加载对用目录下的服务脚本,来决定该级别下那些服务运行和启动。 目录:/etc/rcN.d/ 登录系统 显示登陆提示,然后登陆系统 ![]() CentOS 7 CentOS 7 系统启动过程及相关配置文件 centos7 系统启动过程 加载 BIOS/UEFI 信息,进行硬件检测。按照 BIOS 设定找到第一个可以启动的设备。 读取第一个设备的 MBR(主引导记录),加载 MBR 中的 BootLoader(启动引导程序grub2) 依据 grub2 的设置加载内核,内核再次进行系统检测。 grub2 加载 initramfs 虚拟文件系统,在内存中加载虚拟文件系统/boot/initramfs. 内核初始化,以加载动态模块的形式加载部分硬件的驱动。并且调用 initrd.target,挂载/etc/fstab 中的文件系统。此时可以由虚拟文件系统模拟出的根目录切换回硬盘真实的根目录。 内核启动的第一个进程,systemd。systemd 接管启动过程,并行启动后续程序。 systemd 调用默认 default.target 单元组,并按照 default 运行子单元组。 在 systemd 中将启动程序成为单元 unit,多个单元组成单元组(target)。 systemd 调用 sysinit.target 单元组,初始化系统。检测硬件,加载剩余硬件的驱动模块等。 systemd 调用 basic.target 单元组,准备操作系统。加载外围硬件的驱动模块,加载防火墙,加载SELinux 安全上下文等。 systemd 调用 mutil-user.target 单元组,启动字符界面所需的程序。 systemd 调用 mutil-user.target 单元组中/etc/rc.d/rc.local 文件,执行文件中命令。 systemd 调用 mutil-user.target 单元组中的 getty.target 单元组,初始化本地终端。 systemd 调用 graphical.target 单元组(字符界面不需要)。 ![]() 2. 1 Systemd 运行原理-了解一下 Systemd 概述:systemd 即为 system daemon [ˈdi:mən] 守护进程,开发目标是系统服务间的依赖关系, 并依此实现系统初始化时服务的并行启动。 总结:centos5-6-7 3 个系统版本启动过程: CentOS 5: Sysv init ;CentOS 6: Upstart ;CentOS 7: Systemd ![]() 2.2 管理系统服务 服务状态 [root@localhost ~]# systemctl list-unit-files #显示状态 • loaded:Unit 配置文件已处理 • active(running):一次或多次持续处理的运行 • active(exited):成功完成一次性的配置 • active(waiting):运行中,等待一个事件 • inactive:不运行 • enabled:开机启动 • disabled:开机不启动 • static:开机不启动,但可被另一个启用的服务激活 2.3 运行级别 centos6 下 Linux 运行级别 0-6 的各自含义 0: 关机模式 1:单用户模式 ,一用于破解 root 密码 2:无网络,支持的多用户模式 3:有网络支持的多用户模式 4:保留,未使用 5:有网络支持,支持图形界面,支持的多用户模式(图形界面) 6:重新引导系统,及重启 [root@localhost ~]# ll /usr/lib/systemd/system/*.target | grep runlevel 总结:centos6 和 7 运行级别的变化 ![]() 运行级别的切换 例 1:在 centos6/7 下切换到字符界面: [root@localhost ~]# init 3 #切换到字符界面 [root@localhost ~]# init 5 #切换到图形界面 例 2:centos7 切换到字符界面 [root@localhost ~]# systemctl isolate multi-user.target 或:[root@localhost ~]# systemctl isolate runlevel3.target centos7 设置默认系统默认启动级别 例 1:默认系统启动使用 3 级别字符界面 [root@localhost ~]# systemctl set-default multi-user.target 例 2:默认系统启动使用 5 级别图形界面 [root@localhost ~]# systemctl set-default graphical.target 2.4 grub2 和 grub 区别 在 centOS6 上,我们的 grub 文件是/boot/grub/grub.conf 在 centOS7 使用 grub2,配置文件改成/boot/grub2/grub.cfg 了, 如果我们的系统中有两个内核?改变默认启动的内核顺序? 例 1: centos7 修改内核启动顺序 [root@localhost ~]# vim /etc/default/grub GRUB_TIMEOUT=5 #开机时 grub 默认 5 秒后启动内核 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" 改:GRUB_DEFAULT= saved 为:GRUB_DEFAULT= 1 #这里我们改成 1,0 代表第一个内核,1 代表第二个,以此类推。 ![]() [root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg #修改完成后,并没有立即生效,使用此命令来生成 grub2.cfg 文件, 在下次启动的时候就会默认选择新的默认内核。 ![]() 例 2: centos6 修改内核启动顺序-了解 [root@localhost ~]# vim /boot/grub/grub.conf 改: default=0 为: default=1 [root@localhost ~]# reboot |
CopyRight 2018-2019 实验室设备网 版权所有 |