阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS系统启动流程

32次阅读
没有评论

共计 2755 个字符,预计需要花费 7 分钟才能阅读完成。

导读 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同,在于 CentOS 并不包含封闭源代码软件。

CentOS 系统启动流程

当我们按下开机键后,系统背后的秘密我们是否了解呢?这里,我带大家探索一下 linux 系统开机背后的秘密。

CentOS 系统启动流程

加电自检

主板在接通电源后,系统首先由 POST 程序来对内部各个设备进行检查,自检中如发现有错误,将按两种情况处理:对于严重故障 (致命性故障) 则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理。

BIOS 启动引导阶段

自检通过之后,按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用到的设备。一般电脑是按 ”F2″ 或 ”Del” 键等等进入 BIOS,在里面我们可以调整硬盘的启动顺序。找到第一个有引导程序的设备后,BIOS 会找到设备中的 MBR,读取其中的 Bootloader。

GRUP 引导阶段

这时候就可以看到我们的 Centos 系统了,但是一般都不需要操作,会自动启动系统。其实我们也可以自己手动启动系统的。

手动在 grub 命令行接口启动系统:
grub> root (hd#,#)

grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE

grub> initrd /initramfs-VERSION-RELEASE.img

grub> boot
grub 的命令行接口:
e: 编辑模式,用于编辑菜单;c: 命令模式,交互式接口;help: 获取帮助列表;help KEYWORD: 详细帮助信息;find (hd#,#)/PATH/TO/SOMEFILE:root (hd#,#) 设定 grup 的根设备;kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用 cmdline 参数;例如:init=/path/to/init, selinux=0;initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的 ramdisk;boot: 引导启动选定的内核;
配置文件参数详解:/boot/grub/grub.conf
default=#: 设定默认启动的菜单项;落单项 (title) 编号从 0 开始;timeout=#:指定菜单项等待选项选择的时长;splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;hiddenmenu:隐藏菜单;password [--md5] STRING: 菜单编辑认证;title TITLE:定义菜单项“标题”, 可出现多次;用来引导多个内核或者操作系统;root (hd#,#):grub 查找 stage2 及 kernel 文件所在设备分区;为 grub 的“根”;

kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核;initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的 ramfs 文件;password [--md5] STRING: 启动选定的内核或操作系统时进行认证。
加载内核阶段
内核会自身初始化:
探测可识别到的所有硬件设备;加载硬件驱动程序;(有可能会借助于 ramdisk 加载驱动);以只读方式挂载根文件系统;运行用户空间的第一个应用程序:/sbin/init。
init 初始化阶段

内核加载完毕,会运行 init 程序,init 进程起来后,系统启动的控制权移交给 init 进程;/sbin/init 进程是所有进程的父进程,当 init 起来之后,它首先会读取配置文件 /etc/inittab,进行以下工作:

1. 执行系统初始化脚本(/etc/rc.d/rc.sysinit),对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系

统,到此系统基本算运行起来了,后面需要进行运行级别的确定及相应服务的启动;2. 确定启动后进入的运行级别;3. 执行 /etc/rc.d/rc,该文件定义了服务启动的顺序是先 K 后 S,而具体的每个运行级别的服务状态是放在 /etc/rc.d/r

cn.d(n=0~6)目录下,所有的文件均链接至 /etc/init.d 下的相应文件;4. 有关 key sequence 的设置;5. 有关 UPS 的脚本定义;6. 启动虚拟终端 /sbin/mingetty;7. 在运行级别 5 上运行 X。

配置文件:/etc/inittab; 每行定义一种 action 以及与之对应的 process

id:runlevels:action:process;id:一个任务的标识符;runlevels:在哪些级别启动此任务;#,###,可以为空,表示所有级别;action:在什么条件下启动此任务;process:任务;(脚本或程序);action:wait:等待切换至此任务所在的级别时执行一次;respawn:一旦此任务终止,就自动重新启动之;initdefault:设定默认运行级别;此时,process 省略;sysinit:设定系统初始化方式,此处一般为指定 /etc/rc.d/rc.sysinit 脚本;K*:要停止的服务;K##*,优先级,数字越小,越是优先关闭;依赖的服务先关闭,而后关闭被依赖的;S*:要启动的服务;S##*,优先级,数字越小,越是优先启动;被依赖的服务先启动,而依赖的服务后启动;

chkconfig 命令:管控 /etc/init.d/ 每个服务脚本在各级别下的启动或关闭状态;

查看:chkconfig  --list   [name]

添加:chkconfig  --add  name

删除:chkconfig  --del  name

修改指定的链接类型:

chkconfig  [--level  LEVELS]  name  <on|off|reset>

--level LEVELS:指定要控制的级别;默认为 2345。

init 命令:

级别切换:init #;级别查看:who -r。

注:正常级别下,最后启动的一个服务 S99local 没有链接至 /etc/init.d 下的某脚本,而是链接至了 /etc/rc.d/rc.local(/etc/rc.local)脚本;因此,不便或不需写为服务脚本的程序期望能开机自动运行时,直接放置于此脚本文件中即可。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计2755字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中