Linux系统启动原理及故障排除

时间:2022-10-08 07:19:16

一、centos6系统启动过程及相关配置文件

1、centos6系统启动过程

      1.加载BIOS的硬件信息,根据设定取得第一个可开机引导设置,如:光驱,硬盘,网络,USB

Linux系统启动原理及故障排除

      2.读取硬盘中MBR的boot loader就是grub引导

      GRUB(GRand Unified Bootloader 简称GRUB)是一个来自GUN项目的多操作系统启动程序。

      MBR是硬盘的0柱面,0磁头,1扇区称为主引导扇区(也叫主引导记录MBR),它由三个部分组成,主引导程序,硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。

      磁盘默认一个扇区大小为512字节,MBR由一下3部分组成:

      第一部分:主引导程序(boot loader)占446字节,主引导程序它负责从活动分区中装载,并运行系统引导程序。

      第二部分:分区表(Partition table),即DPT,占64字节,为分区项1,分区项2,分区项3,分区项4四个,64字节只存4个分区表。

      第三部分:MBR有效标识位,占2字节,固定位55AA。3.依据boot loader的设定,到引导分区加载Kernel ,Kernel会开始侦测硬件并加载驱动程序

      4.在硬件驱动成功后,Kernel会主动执行init程序,而init会取得run-level信息

      5.init执行/etc/rc.d/rc.sysinit文件来准备软件执行的作业环境

      6.init执行run-level下各个服务并启动(script方式)

      7.init执行开机后自动运行脚本 /etc/rc.d/rc.local 文件

      8.init执行虚拟终端机控制程序mingetty来启动login程序,最好等待用户登入

Linux系统启动原理及故障排除

2、centos6启动相关的配置文件

Linux系统启动原理及故障排除


Linux系统启动原理及故障排除


修改系统启动级别:

Linux系统启动原理及故障排除


/etc/rc.d/rc.sysinit :shell脚本,(作用:系统初始化:如主机名和/etc/fstab都在这里指定了)

执行rc.sysinit完成了包括mount分区,激活swap,加载modules等重要的工作

Linux系统启动原理及故障排除


启动对应级别下的服务:如init3级别

      /etc/rc.d/rc3.d/(这里的程序/服务S开头的全部开机执行,K开头的开机不执行)

Linux系统启动原理及故障排除

      rcn.d (n为1-6)是对应于不同的run-level下启动不同的服务,这些目录下都是软链接,链接到/etc/rc.d/init.d下的一些文件。以S开头的表示启动,以K开头的不启动

第一个字母后面的数字表示优先级,centos6中是串行启动服务,按顺序一个一个服务启动,而centos7中的systemd可以并行启动多个服务,速度比较快

例:

Linux系统启动原理及故障排除

chkconfig这一行,2345表示在runlevel ,2345下启动,10为此服务的启动顺序,90为关机时关闭此服务的顺序

查看network服务哪些级别启动:

      

Linux系统启动原理及故障排除

所有服务都运行成功后,设置开机自动执行某个命令:/etc/rc.local

查看系统启动级别:

      

Linux系统启动原理及故障排除


二、centos7系统启动过程

1、centos7系统启动过程

      Centos7引导顺序

      1.UEFI或BIOS初始化,运行POST开机自检

      2.选择启动设备

      3.引导装载程序,centos7是grub2

      4.加载装载程序的配置文件:/etc/grub.d/  /etc/default/grub  /boot/grub2/grunb.cfg

      5.加载内核选项

      6.加载initramfs初始化为文件

      7.内核初始化,centos7使用systemd代替init

      8.执行initrd.target所有单元,包括挂载/etc/fstab

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

      10.systemd执行默认target配置,配置文件/etc/systemd/system/default.target

      11.systemd执行sysinit.target初始化系统及basic.target准备操作系统

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

      13.systemd执行multi-user.target下的/etc/rc.d/rc.local

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

      15.systemd执行graphical需要的服务

Linux系统启动原理及故障排除

2、systemd运行原理--了解

      Systemd概述:systemd即为systemd daemon守护进程,是Linux下的一种init软件,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低shell的系统开销的效果,最终替代现在常用的system V与BSD风格init程序。

      与多数发行版使用的system V风格init相比,systemd采用了一下技术:1.采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;2.用Cgroups代替PID来追踪进程,以此即使是两次fork之后生成的守护进程也不会脱离systemd的控制。

      unit对象:unit表示不同类型的systemd对象,通过配置文件进行标识和配置,文件中主要包含了系统服务,监听socket,保存的系统快照以及其它与init相关的信息

      Systemd配置文件:

      /usr/lib/systemd/system/ :这个目录存储每个服务的启动脚本,类似于之前的/etc/init.d   

      /run/systemd/system/  :系统执行过程中所产生的服务脚本,比上面目录优先运行

      /etc/systemd/system  :管理员建立的执行脚本,类似于/etc/rc.d/rcN.d/Sxx 类的功能,比上面的目录优先运行

      对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,然后可以选择重启

      [root@localhost ~]# systemctl daemon-reload

总结:centos5,6,7系统版本启动过程:

                                           centos5                              centos6                               centos7

Linux系统启动原理及故障排除

3、管理系统服务

命令:systemctl    COMMAND   name.service

-

centos6

centos7

启动

service name start

systemctl start name.service

停止

service name stop

systemctl stop name.service

重启

service name restart

systemctl restart name.service

状态

service name status

systemctl status name.service

重载或重启服务(先加载,在启动)

-

systemctl reload-or-restart name.service


chkconfig命令的对应关系

-

centos6

centos7

设定某服务开机自启

chkconfig name on

systemctl enable name.service

设定某服务开机禁止启动

chkconfig name off

systemctl disable name.service

查看所有服务的开机自启状态

chkconfig --list

systemctl list-unit-files --type service

列出该服务在哪些运行级别下启动和禁用

chkconfig sshd -list

ls /etc/systemd/system/*.wants/sshd.service

查看服务是否开机自启

-

systemctl is-enabled name.service

服务状态:

Linux系统启动原理及故障排除

loaded :unit配置文件已处理

active(running) :一次或多次持续处理的运行

active(exited) :成功完成一次性的配置

active(waiting) :运行中,等待一个事件

inactive :不运行

enabled :开机启动

disabled :开机不启动

static :开机不启动,但可被另一个启用的服务激活

4、运行级别

      centos6下Linux运行级别0-6的含义:

      0 :关机模式

      1 :单用户模式,用于找回root密码

      2 :无网络支持的多用户模式

      3 :有网络支持的多用户模式,字符界面

      4 :保留,未使用

      5 :有网络支持,支持图像界面的多用户模式

      6 : 重启,重新引导系统

      在不同级别下,设置服务是否随系统启动运行。在centos7上运行级别的含义与之前不同了,已经由.target来代替运行级别,我们可以通过target定制符合我们的工作运行环境

      [root@localhost ~]# ls /usr/lib/systemd/system/*.target   #查看我们的机器上有多少个target  

Linux系统启动原理及故障排除

[root@localhost ~]# systemctl list-unit-files --type target   #查看所有target的状态

[root@localhost ~]# systemctl list-dependencies runlevel3.target   #查看3级别unit的所有依赖

      

Linux系统启动原理及故障排除

centos6-7运行级别的变化

      

Linux系统启动原理及故障排除

5、运行级别的切换

      1.在centos6上,我们切换级别使用init,在centos7上虽然也能使用,但是调用的不再是原来的程序了。centos7使用systemctl  isolate  name.target来切换target。

      在centos6/7下切换到字符界面:

      init3   #切换到字符界面

      init5   #切换到图形界面

      centos7切换到字符界面:

      systemctl isolate multi-user.target 或 systemctl isolate runlevel3.target

      2.centos7设置默认系统启动级别

      systemctl set-default name.target

      查看默认的级别是什么:

      [root@localhost ~]# ll /etc/systemd/system/default.target

      

Linux系统启动原理及故障排除

三、修复MBR分区

1、模拟MBR文件损坏,修复

1.备份MBR引导扇区

Linux系统启动原理及故障排除

2.损坏MBR引导扇区

Linux系统启动原理及故障排除

3.修复MBR引导分区

因为引导扇区损坏,所有开机自动进入了CDROM

Linux系统启动原理及故障排除

选择Troubleshooting

Linux系统启动原理及故障排除

选择Rescue a CentOS system进入救援模式

Linux系统启动原理及故障排除

Linux系统启动原理及故障排除

输入1 ,Continue继续,然后回车进入shell

Linux系统启动原理及故障排除

把之前备份的文件挂载到新建的目录下,然后把备份文件覆盖到sda,重启

2、使用光盘进入救援模式,重建GRUB修复损坏的系统

我们把grub2目录删除,重启发现起不来

Linux系统启动原理及故障排除

Linux系统启动原理及故障排除

这时我们要在开机时进入BIOS,把CDROM的引导顺序调到第一个,然后按F10保存退出,就可以进入光盘镜像的救援模式

Linux系统启动原理及故障排除

选项和之前一样,选择Troubleshooting然后选Rescue a CentOS system

Linux系统启动原理及故障排除

选择1进入shell,这里它告诉我们原来的根是/mnt/sysimage,可以使用chroot切换过去

Linux系统启动原理及故障排除

切换过去可以看到shell类型变为bash

Linux系统启动原理及故障排除

Linux系统启动原理及故障排除

3、忘记root密码,进入紧急模式找回root身份

在这个界面按e

Linux系统启动原理及故障排除

在linux开头的那一行末尾添加rd.break然后按ctrl加上x

Linux系统启动原理及故障排除

这时候会进入shell,可以先mount查看,可以看到最后一行根目录只有读的权限,我们要改密码需要写的权限,所以我们可以重新挂载根分区

Linux系统启动原理及故障排除

重新挂载根分区加上写权限,chroot切根,语言改为English,passwd命令修改密码,如果系统的selinux开着,则需要执行命令:touch /.autorelabel以更新系统信息,否则重启之后密码修改不会生效。如果已经关闭selinux不需要创建/ .autorelabel

Linux系统启动原理及故障排除

先退出当前根,然后重启系统

Linux系统启动原理及故障排除