系列教程--Linux基础--18--Linux启动过程和故障排查

本节概要

  Linux 启动过程详解

  Linux 启动相关配置文件

  Centos6.5和Centos7.2启动区别

  Linux 常见系统启动问题

环境准备

Centos6.5、Centos7.2。

一、启动过程

启动过程是面试中经常考察的问题。

了解启动过程流程,在启动过程中遇到问题时可以判断出问题时出在启动中的哪个阶段,进而进行处理,避免反复的系统重装。

 Centos6和Centos7的启动过称类似,主要区别是Centos6后期启动的是init进程,Centos7后期启动的是systemd进程。其他细节的区别可以查看下文。

1. Centos6启动流程

启动流程图:

POST加电自检

开机后BIOS或UEFI进行硬件检查的阶段。

以BIOS为例,记载BIOS的硬件信息,第一引导可以为光盘、硬盘、USB、网络,以硬盘为例,虚拟机进入BIOS方法如下:

  Vmvare中 “电源” -> ”打开电源时进入固件(F)”

Removable Devices :可移动设备引导,如U盘

Hard Drive:硬盘引导

CD-ROM Drive:光盘引导

Network boot from Intel E1000:网络引导

MBR 引导

MBR即主引导记录,为硬盘的0柱面、0磁头、1扇区。

硬件自检过程正常,BIOS 会找到磁盘的第一个扇区的前446字节,将MBR加载到内存中,MBR会告知程序接下来去哪里找系统grub引导。

GRUB引导

GRUB为GNUI项目的一个多操作系统的启动程序。

此过程会读取grub.conf文件,确定内核启动参数,准备启动内核。

启动内核

加载内核,启动一些最核心的程序。

加载ramdisk

Ramdisk为伪文件系统。

内核起来后会调用ramdisk,尝试驱动所有的硬件设备,所有的驱动安装完成后后面的启动就交由程序进行。

启动init进程

a. 读取/etc/inittab文件:

硬件驱动完成后,内核会执行Init程序,init程序根据/etc/inittab文件中的配置获取到运行级别。

b. 执行/etc/rc.d/rc.sysinit程序。

c. 执行/etc/rc#.d/,即各种服务的启动脚本。

  S 开头代表开机需要启动的服务。

  K 开头代表关机需要执行的任务。

  # 代表运行级别,共7个运行级别,运行级别的具体信息可以查看前面的课程讲解。

d. 执行/etc/rc.d/rc.local中自定义的开启启动命令。

执行/bin/login程序,等待用户登录

2. Centos7启动流程

Cnetos7.2的启动过程和centos6.5的启动过称基本一样,区别主要为Centos6.5的init进程在centos7.2中为systemd进程。

Centos7.2 启动流程如下:

  (1) POST加电自检

  (2) 加载MBR到内存

  (3) GRUB引导

  (4) 加载内核和inintamfs模块

  (5) 开始内核的初始化,使用systemd代替init程序

    a. 执行initrd.target

包括挂载/etc/fstab文件中的系统。

     b. 从initramfs根文件系统切换到磁盘根目录

     c. systemd执行默认target配置

Centos7中的运行级别是为了兼容Centos6,在Centos7中每个运行级别都有软链接指向。

默认的启动级别为/etc/systemd/system/default.target,此文件会指向具体的运行级别,具体的运行级别对应如下:

0 ==> runlevel0.target, poweroff.target

1 ==> runlevel1.target, rescue.target

2 ==> runlevel2.target, multi-user.target

3 ==> runlevel3.target, multi-user.target

4 ==> runlevel4.target, multi-user.target

5 ==> runlevel5.target, graphical.target

6 ==> runlevel6.target, reboot.target

d. systemd 执行sysinit.target

sysinit.target进程对应centos6中的rc.sysint进程。

  e. systemd 启动multi-user-target下的本机与服务器服务

  f. systemd执行multi-user.target下的/etc/rc.d/rc.local,即开机启动命令

  g. systemd执行multi-user.target下的getty.target及登录服务

getty.target用于启动终端。

如果开机进入文本界面则此时启动流程结束,如果进入图形化的界面则systemd还需要执行graphical需要的服务。

二、启动相关配置文件

  以Centos6.5为例。

1. GRUB配置文件

/etc/grub.conf

软链接到/boot/grub/grub.conf

内容如下:

  2. 默认启动级别

/etc/inittab

内容如下:

3. 系统初始化

/etc/rc.d/rc.sysinit

主机名和/etc/fstab中的分区自动挂载都在此文件中进行制定。

Rc.sysinit可以完成mount分区、swap分区的激活,modules加载等

操作。

4. 不同运行级别启动的服务

rcx.d,x对应运行级别1-6,S开头表示开机启动,K开头的表示开机不启动,S和K后面的数字代表优先级,数值越小优先级越高。

这些文件软链接到/etc/rc.d/init.d下的一些文件,如:

vim /etc/rc.d/init.d/sshd

查看sshd在不同优先级下开机自启设置:

2345表示sshd会在运行级别为2、3、4、5时启动,55为开机时启动的优先级,25为关机时关闭的优先级。

一些被其他服务依赖的服务的启动优先级一般较高,如network服务:

我们修改服务的开机启动脚本一般是直接修改/etc/init.d/xxx,而不是修改/etc/rc.d/init.d/xxx,是因为/etc/init.d/下的文件是软链到/etc/rc.d/init.d/下的:

Linux 下服务的开机自启方式:

  chkconfig, Centos7下为systemctl enable xxxsss

  /etc/init.d/路径下加入服务器的开机启动脚本

  /etc/rc.local 开机启动命令中加入服务启动命令

三、Centos6Centos7启动区别

  Centos7相对于Centos6的最大区别即systemd替换SysVinit。

  systemd可以更好的进行服务管理,可以使存在依赖的服务之间更好的并行化,对比如下:

  sysv init:程序顺序执行,即使他们之间没有依赖关系:

systemd:程序并行执行:

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值