Liunx操作系统的引导过程(系统操作引导过程,模拟MBR,GRUB故障,root密码遗忘解决,优化启动过程 ,运行级别的分类)

Liunx操作系统的引导过程

在这里插入图片描述

1:开机BIOS自检,加载硬盘。
2:读取MBR,进行MBR引导。
3:grub引导菜单(Boot Loader)。
4:加载内核kernel。
5:启动init进程,依据inittab文件设定运行级别
6:init进程,执行rc.sysinit文件。
7:启动内核模块,执行不同级别的脚本程序。
8:执行/etc/rc.d/rc.local
9:启动mingetty,进入系统登陆界面:开机自检,MBR引导,GRUB菜单, 加载linux内核,init进程初始化

引导过程

引导过程能以两种方式之一初始化。其一,如果系统处于关机状态,那么打开电源按钮将开启系统引导过程。其二,如果操作系统已经运行在一个本地用户(该用户可以是 root 或其他非特权用户),那么用户可以借助图形界面或命令行界面通过编程方式发起一个重启操作,从而触发系统引导过程。重启包括了一个关机和重新开始的操作。

Blos自检

在 1981 年,IBM 设计的第一台个人电脑中,BIOS 被设计为用来初始化硬件组件。POST 作为 BIOS 的组成部分,用于检验电脑硬件基本功能是否正常。如果 POST 失败,那么这个电脑就不能使用,引导过程也将就此中断。

BIOS 上电自检确认硬件的基本功能正常,然后产生一个 BIOS 中断 INT 13H,该中断指向某个接入的可引导设备的引导扇区。它所找到的包含有效的引导记录的第一个引导扇区将被装载到内存中,并且控制权也将从引导扇区转移到此段代码。

MBR 引导

当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中 MBR(Master Boot Record, 主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR 记录中的引导信息调用启动菜单(如 GRUB)。

grub引导菜单(Boot Loader)

GRUB2 全称是 GRand Unified BootLoader,Version 2(第二版大一统引导装载程序)。它是目前流行的大部分 Linux 发行版本的主要引导加载程序。GRUB2 是一个用于计算机寻找操作系统内核并加载其到内存的智能程序。由于 GRUB 这个单词比 GRUB2 更易于书写和阅读,在下文中,除特殊指明以外,GRUB 将代指 GRUB2。

内核启动

内核文件都是以一种自解压的压缩格式存储以节省空间,它与一个初始化的内存映像和存储设备映射表都存储于 /boot 目录之下。

在选定的内核加载到内存中并开始执行后,在其进行任何工作之前,内核文件首先必须从压缩格式解压自身。一旦内核自解压完成,则加载 systemd 进程(其是老式 System V 系统的 init 程序的替代品),并转移控制权到 systemd

启动init进程,依据inittab文件设定运行级别

内核加载到内存中并开始执行后,在其进行任何工作之前,内核文件首先必须从压缩格式解压自身。一旦内核自解压完成,则加载 systemd 进程(其是老式 System V 系统的 init 程序的替代品),并转移控制权到 systemd。

系统初始化进程

init进程

  • 由linux内核加载运行/sbin.inint程序

  • Init 进程是系统第一进程

  • init进程的PID号永远为1

systemd进程

  • systemd 是所有进程的父进程。它负责将 Linux 主机带到一个用户可操作状态(可以执行功能任务)

  • systemd是linux操作系统的一个init软件

  • centos7中采用全新的systemd启动方式,取代了传统的sysvinit

  • centos7中运行第一个init进程是/ilb/systrmd/sysytemd

  • 运行级别对应systemd目标

SystemV 运行级别systemd 目标态systemd 目标态别名描述
halt.target停止系统运行但不切断电源。
0poweroff.targetrunlevel0.target停止系统运行并切断电源.
Semergency.target单用户模式,没有服务进程运行,文件系统也没挂载。这是一个最基本的运行级别,仅在主控制台上提供一个 shell 用于用户与系统进行交互。
1rescue.targetrunlevel1.target挂载了文件系统,仅运行了最基本的服务进程的基本系统,并在主控制台启动了一个 shell 访问入口用于诊断。
2runlevel2.target多用户,没有挂载 NFS 文件系统,但是所有的非图形界面的服务进程已经运行。
3multi-user.targetrunlevel3.target所有服务都已运行,但只支持命令行接口访问。
4runlevel4.target未使用。
5graphical.targetrunlevel5.target多用户,且支持图形界面接口。
6reboot.targetrunlevel6.target重启。

当MBR扇区出现故障如何操作

故障原因
病毒,木马等造成的破坏
不正确的分区操作,磁盘读写误操作

故障现象
找不到引导程序,启动中断
无法加载操作系统,开机后黑屏

解决思路
提前做好备份文件
以安装光盘引导进入急救模式
从备份文件中恢复

实验过程
虚拟机加一块300G硬盘做实验
进系统查看磁盘
fdisk -l ###看是否有sdb
创建一个30G的硬盘

image-20200618142439334

mkfs -t ext4 /dev/sdb ###格式化sdb

image-20200618142644330

挂载mount /dev/sdb /opt

image-20200618143356808

1、备份MBR扇区数据
dd if=/dev/sda of=/opt/mbr.bak bs=512 count=1 ,磁盘字节

image-20200618143326382

2、模拟MBR扇区故障
dd if=/dev/zero of=/dev/sda bs=512 count=1

image-20200618171152400

3.从备份文件中恢复 MBR 扇区数据
由于 MBR 扇区被破坏以后,就无法再从该硬盘启动系统,所以需要使用其他硬盘中的操作系统进行引导,或者直接使用 CentOS 系统的安装光盘进行引导。不管使用哪种方式, 目的都是相同的——获得一个可以执行命令的 Shell 环境,以便从备份文件中恢复 MBR 扇区中的数据。
以使用 CentOS 安装光盘引导为例,当出现安装向导界面时,选择“Troubleshooting” 选项,如图所示,进入修复故障页面。

image-20200618144039861

2、进入troubleshooting菜单 选择Rescue a centos system拯救centos系统

image-20200618153620439

3、进入引导可以按回车,或者等待
按1 在按会车进入sh-4.2#继续

image-20200618144313557

4、mount /dev/sdb1 /mnt ## 将备份sdb备份的文件挂到mnt下 然后进去看下是否有mbr.bak

image-20200618144522748

4、dd if=/mnt/sda.mbr.bak of=/dev/sda

image-20200618155935631

init 6 重启

image-20200704110633077

image-20200618160739917

模拟centos 7.4 grub修复

故障原因

MBR中的GRUB引导程序遭到破坏
grub.conf文件丢失,引导配置有误
故障现象

系统引导停滞,显示“grub>”提示符
解决思路

尝试手工输入引导命令(成功率很低,不建议)
进入急救模式,重写或者从备份中恢复grub.conf
向MBR扇区中重建grub程序

模拟破坏grub引导菜单

cd /boot/grub2 ###进入grub2

image-20200618161040249

mv grub.cfg grub.cfg.bak

image-20200618161244230

重新启动系统,在载入条时,立马按F2进入BIOS界面
image-20200618161626411
按方向键右键到Boot界面,选择到CD-ROM Drive,按+号将这一选项移到最上面
image-20200618172853060

image-20200618161716442

重新启动

image-20200618161752845
进入troubleshooting菜单 选择Rescue a centos system
image-20200618153620439

3、进入引导可以按回车,或者等待
按1 在按会车进入sh-4.2#

image-20200618162243648

4、进入救援模式后切根
chroot /mnt/sysimage/

image-20200618162232163

5、使用 grub2-install 命令修复grub
grub2-install /dev/sda

image-20200618162406620

6、修复grub.cfg配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg

image-20200618162728516
查看是否修复
cd /boot/grub2/
ls
已经修复

image-20200618163035759

7、重启
exit
reboot ###主要改启动项,否认还是进光盘模式

image-20200618163426194

image-20200618163506852

忘记root密码

故障原因
遗忘root用户的密码

故障现象
无法进行需要root权限的管理操作
若没有其他可用账号,将无法登录系统

解决思路
进入急救模式,重设密码

模拟密码忘记

随便更一下密码

1.装入光盘,在光盘引导界面选择troubleshooting:

image-20200618164119056

再移动到Exit,回车保存并重启
1.装入光盘,在光盘引导界面选择troubleshooting:

image-20200618164153637
2、进入troubleshooting菜单 选择Rescue a centos system
image-20200618164231994

3、进入引导可以按回车,或者等待
按1 在按会车进入sh-4.2

image-20200618164343908

4、进入救援模式后切根
chroot /mnt/sysimage/

image-20200618164539272

image-20200618164647543
5:修改密码
passwd root
输入密码:Abc123 ###第一次
输入密码:Abc123 ###第二次

image-20200618170559382

、重启
exit
reboot ###主要改启动项,否认还是进光盘模式

image-20200618173320084

image-20200618173240143
总结

选择急救模式,进入救援centos系统的方式都是一样的

加载镜像系统命令

chroot /mnt/sysimage

重新构建grub菜单系统命令

grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg

系统服务使用systemd管理

systemd不是一个单独的命令,而是一个集合体

systemd是维持整个Linux系统的始祖

主要目的就是为了将服务开启


常用控制类型
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服务配置文件

对于在实际生产环境中运行的服务器,不要轻易执行 stop 或 restart 操作,以免造成客户端访问中断,带来不必要的损失。若只是要为系统服务启用新的配置,可以采用相对温和一些的“reload”参数重新加载配置,而不是生硬地执行“restart”。

Linux运行级别

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

[root@localhost ~]# runlevel 
N 3
N 是上一次运行的级别,3是这一次运行的级别,若从init 3 切换到 init 5 ,在init3中输入runlevel命令

systemctl 工具
systemctl 能查看默认的运行级别
例如:检查系统网路是否开机自启动

在这里插入图片描述

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

使用ntsysv命令:提供交互仿图像界面,便于管理多个服务

image-20200703152427716

按tab键可以确认退出或取消,空格可以加“”子号选择开启或关闭【*】表示开启 【】表示关闭

systemctl 工具

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

image-20200703152728663

[root@localhost ~]# systemctl disable httpd		将httpd服务设置关闭开机自启
[root@localhost ~]# systemctl enable httpd		将httpd服务设置开机自启

在当前系统下执行“systemctl list-units --type=service”命令可以查看当前系统中所有已激活的系统服务,命令如下:

[root@localhost ~]# systemctl list-units --type=service     //查看所有已经激活的系统服务
UNIT	LOAD	ACTIVE SUB	DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook 
abrt-oops.service loaded active running ABRT kernel log watcher 
abrt-xorg.serviceloaded active running ABRT Xorg log watcherdisabled
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值