Linux操作系统的引导过程和排除启动故障

一、Linux系统de引导过程

  • CentOS 7系统中,由systemd掌管系统的初始化工作,系统的启动过程与之前的版本相比有了新的变化。
  • Linux操作系统的引导过程:开机自检-----MBR引导-----GRUB菜单-----加载内核-----init进程初始化

1.1.、开机自检(BIOS)

  • 服务器主机开机以后,将根据主板BIOS(Basic Input/Output System,基本输入输出系统)中的设置对CPU。内存。显卡,键盘等设备进行初步检测,并初始化部分硬件(加电自检)
  • 检测成功后根据预设的启动顺序移交系统控制权,大多数时候会移交给本机硬盘(加载部分驱动)

1.2、MBR引导

  • 当从本机硬盘中启动系统时,首先根据硬盘的第一个扇区中MBR(Master Boot Record,主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区,或者直接根据MBR记录中的引导信息调用启动菜单(CentOS7中为grub2)
  • 注意:要安装双系统,则两个系统需要分别安装在不同的盘符当中

1.3、GRUB菜单

  • 对于Linux系统来说,GRUB算是使用最广泛的多系统引导器程序
  • 系统控制权传递给GRUB以后,将会显示启动菜单提供给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核

1.4、加载内核(Kernel)

  • 系统引导器程序会从本地硬盘中加载内核以及内存文件系统(CentOS 7 中使用initramfs)
  • Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度
  • 内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程
  • 内存文件系统initramfs 是经过gzip 的cpio归档,其中包含启动时所有必要的硬件内核模块,初始化脚本等。
  • 内核放在/boot目录下,/boot目录相当于Windows的system32

1.5、init进程初始化

  • 加载硬件驱动以及初始化进程(加载全部驱动)
  • 由Linux内核加载运行/sbin/init程序,是系统中第一个进程
  • PID(进程标记)号永远为1

1.6、systemd单元类型

  • 在systemd中不同类型的systemd对象被统一称为单元,是让系统知道该如何进行操作和管理资源的主要对象,所以systemd有许多单元类型

  • systemd单元文件最初默认存放在/lib/systemd/system目录中,每当安装新的软件都会自动在这个目录中添加一个配置文件

  • systemctl 命令用于管理各种类型的systemd单元,可以使用“systemctl -t help”命令来查询systemd支持的单元类型

单元类型扩展名说明
Service.service描述─个系统服务
Socket.socket描述—个进程间通信的套接字(通信协议的载体)
Device.device描述—个内核识别的设备文件
Mount.mount描述一个文件系统的挂载点
Automount.automount描述一个文件系统的自动挂载点
Swap.swap描述一个内存交换设备或目录
Timer.timer描述一个定时器(用于实现类似cron的调度任务)
Path.path描述—个文件系统中文件或目录(path路径)
Snapshot.snapshot用于保存一个systemd的状态(snapshot快照)
Scope.scope使用systemd的总线接口以编程的方式创建外部进程
Slice.slice描述居于Cgroup的一组通过层次组织的管理系统进程
Target.target描述—组systemd的单元(target目标)

二 、排除启动类故障

2.1、MBR扇区故障的原因

  • 故障原因
    病毒,木马等造成的破坏
    不正确的分区操作,磁盘读写误操作
  • 故障现象
    找不到引导程序,启动中断
    无法加载操作系统,开机后黑屏
  • 解决思路
    提前做好备份文件
    以安装光盘引导进入急救模式
    从备份文件中恢复

2.2、修复MBR扇区故障模拟

  • 模拟环境
    VMware软件,开centos 7,并为其添加一块硬盘(备份数据用的)
  • 恢复步骤

1.备份已损坏MBR扇区数据(实际中我们都是备份整个文件)

加一块磁盘做备份

第一步 : 将新添加的硬盘分区fdisk /dev/sdb
         格式化mkfs -t xfs /dev/sdb1
         挂载
...省略部分内容		
[root@localhost ~]# mount /dev/sdb1 /test	
[root@localhost ~]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda2      xfs        20G  3.1G   17G   16% /
devtmpfs       devtmpfs  898M     0  898M    0% /dev
...省略部分内容
/dev/sdb1               xfs        20G   33M   20G    1% /test
[root@localhost ~]# dd if=/dev/sda of=/test/sda.mbr.bak bs=512 count=1	#将/dev/sda中的512k 备份到挂载点/test中
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000168125 秒,3.0 MB/[root@localhost ~]# ls /test		#查看是否备份成功
sda.mbr.bak

2.模拟故障

dd if=/dev/zero of=/dev/sda bs=512 count=1

3.重启后界面提示要安装CentOS 7系统,因为引导文件已经变成空白。
在这里插入图片描述

4.选择Troubleshooting,再选择Rescue a centos system进入急救模式。
在这里插入图片描述

5.等待加载后按如下图所示步骤进入内核模式
在这里插入图片描述
6.将有MBR扇区备份的/dev/sdb1挂载到/test目录下,然后将其写入/dev/sda的MBR扇区中
在这里插入图片描述
7.reboot重启发现可以正常启动系统了,成功解决MBR扇区故障。

2.3、GRUB引导故障的原因

  • 故障原因
    MBR中的GRUB引导程序遭到破坏
    grub.conf文件丢失,引导配置有误
  • 故障现象
    系统引导停滞,显示“grub>”提示符
  • 解决思路
    尝试手工输入引导命令(成功率很低,不建议)
    进入急救模式,重写或者从备份中恢复grub.conf
    向MBR扇区中重建grub程序

2.4、修复GRUB引导菜单实验

1、查找并破坏grub引导程序(grub.cfg)

[root@localhost ~]# cd /boot 		'//进入/boot目录'
[root@localhost boot]# ls			'//查看'
config-3.10.0-693.el7.x86_64
efi
grub
grub2
initramfs-0-rescue-d078430d0d8f434fb5ad6e47678ea86f.img
initramfs-3.10.0-693.el7.x86_64.img
initramfs-3.10.0-693.el7.x86_64kdump.img
initrd-plymouth.img
symvers-3.10.0-693.el7.x86_64.gz
System.map-3.10.0-693.el7.x86_64
vmlinuz-0-rescue-d078430d0d8f434fb5ad6e47678ea86f
vmlinuz-3.10.0-693.el7.x86_64
[root@localhost boot]# cd grub		'//进入grub目录'
[root@localhost grub]# ls			'//查看'
splash.xpm.gz
[root@localhost grub]# cd ../grub2		'//没有发现grub配置文件,进入grub2目录中查找'
[root@localhost grub2]# ls				'//发现grub.cfg配置文件'
device.map  fonts  grub.cfg  grubenv  i386-pc  locale
[root@localhost grub2]# rm -rf grub.cfg		'//删除grub.cfg配置文件'
[root@localhost grub2]# ls
device.map  fonts  grubenv  i386-pc  locale		'//删除成功,'
[root@localhost grub2]# init 6				'//重启'

2.重启后进入如下界面说明缺少grub.cfg文件,无法引导。
在这里插入图片描述
3.重启出现开机界面时按F2,进入后选择从光盘启动(光标移动到光盘选项,按“+”) 按F10保存
在这里插入图片描述
4.选择Troubleshooting,再选择Rescue a centos system进入急救模式。
在这里插入图片描述
在这里插入图片描述
5.等待加载后按如下步骤进入内核模式。
在这里插入图片描述
6.按如下步骤进行grub.cfg文件的恢复。

在这里插入图片描述
7.exit退出bash环境后reboot重启电脑,重启出现开机界面时按F2,进入后选择从光盘启动(光标移动到光盘选项,按“-” 还原) 按F10保存,就可以正常开机使用。

2.5、遗忘root用户密码

  • 故障原因
    遗忘root用户的密码
  • 故障现象
    无法进行需要root权限的管理操作
    若没有其他可用账号,将无法登录系统
  • 解决思路
    进入急救模式,重设密码

2.6、重设root用户密码的实验

1:加载镜像系统后进入急救模式和上面的实验相同,
最后进入bash环境

chroot  /mnt/sysimage

2:直接改密码

passwd  root
输入密码

在这里插入图片描述
重启后登录root时就可以用新密码来登录了。
注意:如果出现重启后进入到CentOS 7安装界面,这时可以通过重启按F2进入BIOS,让系统从已经安装过的系统中启动。

三、systemd服务控制

  • systemd不是一个单独的命令,而是一个集合体
  • systemctl 是管理系统的主要命令
  • hostnamectl 是用于查看与修改当前主机信息的命令

3.1、系统服务控制

  • systemctl命令可以控制系统服务,此命令涵盖了之前版本操作系统的service命令和chkconfig 命令两者的功能

  • 使用systemctl命令,可以省略服务单元名称的标识.service,即:不输入后缀标识,systemctl命令默认将后缀标识当做.service来处理

常用方式
systemctl 控制类型 服务名称

常用控制类型
start  启动
stop   停止
restart  重新启动		'//重新启动,会中断服务,此服务的PID值会改变'
reload  重新加载		'//重新加载配置文件不会中断服务,此服务的PID值会改变'
status  查看服务状态

例如:
[root@localhost ~]# systemctl start httpd		'//启动httpd服务'
[root@localhost ~]# systemctl stop httpd		'//停止httpd服务'
[root@localhost ~]# systemctl restart httpd		'//重新启动httpd服务'
[root@localhost ~]# systemctl reload httpd		'//重新加载httpd服务配置文件'
生产环境中建议使用reload命令来重新加载服务

3.2、Linux系统的运行级别

3.2.1:查看运行级别

runlevel 命令
runlevel 只能查看切换运行级别与当前运行级别

例如
[root@localhost ~]# runlevel 
N 5		'//N 是上一次运行的级别,5是这一次运行的级别。因为是开机后就查看,所以上一次的运行级别显示为N'
'若从init 5 切换到 init 3 ,在init3中输入runlevel命令,则会显示 5 3'
systemctl 工具
systemctl 能查看默认的运行级别

3.2.2、临时切换运行级别

  • init 0 关机
  • init 1 单用户模式 多用于系统修复
  • init 3 大多数服务器的运行环境
  • init 5 图形化界面
  • init 6 重启,相当于reboot

四、优化启动过程(开机自启)

4.1、系统服务的管理工具

ntsysv 工具

  • 提供一个交互式,可视化窗口(伪图形化界面)

  • 可以在字符终端运行

  • 便于集中管理多个服务

systemctl 工具

  • 不提供交互式,可视化窗口

  • 管理单个服务效率更高

4.2、ntsysv工具

[root@localhost ~]# ntsysv		'//进入ntsysv伪图形化界面'
* 符号代表开机自启
空格  代表开启不自启
Tab键 切换到选项(确定,取消)
空格键可以输入 * 或者取消 *

在这里插入图片描述

4.3、systemctl 工具

[root@localhost ~]# systemctl enable httpd		'//将httpd服务设置开机自启'
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# systemctl disable httpd		'//将httpd服务设置关闭开机自启'
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值