Linux基础——引导过程与服务控制(MBR扇区修复,GRUB引导故障修复,遗忘root密码找回)(八)

1.引导过程管理

系统引导是操作系统运行的开始,在用户能够正常登录到系统之前,Linux的引导过程完成了一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备。

1.1 引导过程

1.1.1 引导过程总览

Linux操作系统的引导过程一般包括以下几个阶段:开机自检、MBR引导、GRUB菜单、加载Linux内核、init进程初始化。
(1)开机自检
服务器主机开机以后,将根据主板bios中的设置对cpu、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多数时候会移交给本地硬盘。
(2)MBR引导
当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR的设置,将系统控制权传递给包含操作系统引导文件的分区,或直接根据MBR记录中的引导信息调用启动菜单(如DRUB)。
(3)GRUB菜单
对于Linux系统来说,GRUB算是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB以后,将会显示启动菜单提供给用户选择,并根据所选项加载Linux内核文件,然后将系统控制权转交个欸内核。
(4)加载Linux内核
Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。在centos6.5系统中,默认的内核文件位于/boot/vmlinuz-2.6.32-431.el6.x86_64。
(5)init进程初始化
为了完成进一步的系统引导过程,Linux内核首先将系统中的/sbin/init程序加载到内存中运行,init进程负责完成一系列的系统初始化进程,最后等待用户进行登录。

1.1.2 init进程

Linux系统中的进程使用数字进行标记,每个进程的身份标记号称为PID。在引导Linux系统过程中,/sbin/init是内核第一个加载的程序,因此init进程对应的PID号总是为1。init进程运行后将陆续执行系统中的其他程序,不断生成新进程,这些进程称为init进程的子进程,init进程是这些进程的父进程。init是维持整个Linux系统运行所有进程的始祖,init进程是不允许被轻易终止的。需要切换不同系统运行状态时,可以向init进程发送正确的执行参数,由init自身来完成相关操作。

1.1.3 inittab配置文件

一、inittab文件的结构:id runlevels action process

  1. id 用于在inittab文件中唯一标识一个配置记录
  2. runlevels 用于指定该记录在哪些运行级别中运行
  3. action 用于描述记录将执行哪种类型的动作
  4. process 用于设置启动进程所执行的命令
    二、相关命令
  5. /etc/inittab配置默认运行级别
  6. /etc/sysconfig/init控制tty终端的开启数量、终端颜色方案
  7. /etc/init/rcS.conf加载rc.sysinit脚本,完成系统初始化任务
  8. /etc/init/rc.conf兼容脚本,负责各运行级别的调用处理
    5) /etc/init/rcS-sulogin.conf为单用户模式启动/sbin/sushell环境
  9. /etc/init/control-alt-delete.conf控制终端下的Ctrl+Alt+Del热键操作
  10. /etc/init/start-ttys.conf配置tty终端的开启数量、设备文件
  11. /etc/init/tty.conf控制tty终端的开启
    init程序的配置目录位于/etc/init/,原有的/etc/inittab文件中保留默认运行级别的配置。
    在centos7.6版本中换了,inittab已经不再使用。在这里插入图片描述
    runlevels-运行级别
    0 关机状态,使用该级别时将会关闭主机
    1 单用户模式,无需密码验证即可登录系统,多用于系统维护
    2 字符界面的多用户模式(不支持访问网络)
    3 字符界面的完整多用户模式,大多数服务器在运行此级别
    4 未分配使用
    5 图形界面的多用户模式,提供了图形桌面操作系统
    6 重新启动,使用该级别时将会重启主机

1.2 排除启动类故障

在Linux系统启动过程中,设计mbr引导记录、grub启动菜单、系统初始化配置文件等方面,其中任何一环节出现故障都可能会导致系统启动的失常,因此一定要注意做好相关文件的备份工作。

1.2.1 MBR扇区故障

MBR引导记录位于物理硬盘的第一个扇区(512B),该扇区由称为主引导扇区(MBR扇区),出来包含引导程序的部分数据外,还包括整个硬盘的分区表记录。主引导扇区发生故障时,将可能无法进入引导菜单,或者因为无法找到正确的分区位置而无法加载系统,通过该硬盘引导主机时很可能进入黑屏状态。解决该问题的思路:提前做好备份文件,以安装光盘引导进入急救模式,从备份文件中恢复。
下面通过示例介绍对MBR扇区进行备份、模拟破坏、修复过程。
(1)备份MBR扇区数据
由于MBR扇区中包含整个硬盘的分区表记录,因此该扇区的备份文件必须存放到其他存储设备中,否则在恢复时将无法读取到备份文件。执行以下操作将第一块硬盘的MBR扇区备份到第2块硬盘的sdb1分区中(挂载到/backup目录)。
1.加一块硬盘做实验,进系统查看磁盘,fdisk -l ##看是否有sdb在这里插入图片描述在这里插入图片描述2.mkfs -t ext4 /dev/sdb ###格式化sdb
在这里插入图片描述

3.挂载mount /dev/sdb /opt
在这里插入图片描述
4.备份MBR扇区数据dd if=/dev/sda of=/opt/mbr.bak bs=512 count=1
在这里插入图片描述
(2)模拟MBR扇区故障,使用dd命令,人为的将MBR扇区记录覆盖,模拟扇区被破坏的故障情况。
5.模拟MBR扇区故障dd if=/dev/zero of=/dev/sda bs=512 count=1
,在这里插入图片描述
6.重启后观察系统是否有问题,无法进入引导菜单,出现 operating system not found,上述就是有故障了MBR挂了

在这里插入图片描述
7.装入光盘
在这里插入图片描述
8在光盘引导界面选择troubleshooting:
在这里插入图片描述
9.进入troubleshooting菜单 选择Rescue a centos system在这里插入图片描述
10.进入引导可以按回车,或者等待
按1 在按会车进入sh-4.2#在这里插入图片描述在这里插入图片描述
11.mount /dev/sdb /mnt ## 将备份sdb备份的文件挂到mnt下 , 然后进去看下是否有mbr.bak
在这里插入图片描述
12.恢复备份数据 dd if=/mnt/mbr.bak of=/dev/sda count=1 bs=512在这里插入图片描述
13.重启,出现MBR引导,成功恢复在这里插入图片描述

1.2.2 修复GRUB引导程序

在这里插入图片描述
模拟centos 7.6 grub修复
1.cd /boot/grub2 进入grub2 ,mv grub.cfg grub.cfg.bak给grub配置文件改名在这里插入图片描述
2.重启init 6,出错
在这里插入图片描述
3.重新启动,按F2进入BIOS界面,在boot里面将CD-ROM drive置顶,F10保存退出在这里插入图片描述
4.进入troubleshooting菜单在这里插入图片描述
5.选择Rescue a centos system
在这里插入图片描述
6.进入引导可以按回车,或者等待
按1 在按回车进入sh-4.2#!
在这里插入图片描述
7.进入救援模式后更改 root 目录
在这里插入图片描述
8.查看未修复账户
在这里插入图片描述
9.使用 grub2-install 命令安装修复grub
在这里插入图片描述
10.查看是否修复
在这里插入图片描述
11.修复grub.cfg配置文件
在这里插入图片描述
12.查看是否修复
在这里插入图片描述
13.退出,重启
在这里插入图片描述在这里插入图片描述
14.启动按F2进入BIOS,改成硬盘启动,F10保存
在这里插入图片描述
15.启动,进入引导,完成
在这里插入图片描述

1.2.3 遗忘root用户的密码

在这里插入图片描述
1.重新启动,按F2进入BIOS界面,在boot里面将CD-ROM drive置顶,F10保存退出

在这里插入图片描述

2装入光盘,在光盘引导界面选择troubleshooting:在这里插入图片描述
3进入troubleshooting菜单 选择Rescue a centos system在这里插入图片描述
4进入引导可以按回车,或者等待
按1 在按会车进入sh-4.2#在这里插入图片描述

5进入救援模式后切根chroot /mnt/sysimage/
在这里插入图片描述
6 修改密码
passwd root
输入密码:Abc123 ###第一次
输入密码:Abc123 ###第二次

在这里插入图片描述
7.重启改硬盘启动在这里插入图片描述
8重启密码登录
在这里插入图片描述

2. 服务管理

2.1 systemd进程

从centos7版本的系统开始systemd成为PID恒为1的初始化进程,是内核加载的第一个程序。systwmd诞生的主要目的是为了将更多服务并发启动,从而提高系统启动高速度。其最大的优点在于具有提供按需启动服务的能力,只有在某个服务真正被请求时才进行启动,当该服务结束时,systemd就将其恢复,等待下次需要时启动。

2.2 使用systemd管理系统

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

2.2.1 systemd单元

在systemd中不同类型的systemd对象被统一称为单元,是让系统知道该如何进行操作和管理资源的主要对象,所以systemd有许多单元类型。systemd单元文件最初默认存放在/lib/systemd/system目录中,每当安装新的软件都会自动在这个目录中添加一个配置文件。
systemctl命令用于管理各种类型的systemd单元,可以使用systemctl -t help 命令来查询systemd支持的单元类型。
下面的列表介绍了systemd可用的单元类型:
services:一个服务单元描述如何在服务器上管理一个服务或者应用。这将会包括如何开始或者停止服务、在哪些情况下应自动启动以及相关的软件依赖和排序信息。
socket:一个套接字单元文件描述了systemd使用于基本套接字激活的一个网络或者IPC套接字,或者一个FIFO缓冲。.services文件将会在定义在这个单元里的套接字是活动时开始。
devic:描述了一个设备被udev或者sysfs指定作为systemd管理器的单元。不是所有设置都有.device文件。一些情况下.device单元可能是命令、挂载及访问设备所必需的。
mount:这个单元定义了一个在系统上systemd管理的挂载点。这个些文件以挂载路径来命名,并且把斜杠改成短划线。在/etc/fstab里的条目会有自动创建的单元。
automount:一个.automount单元配置了一个将会自动挂载的挂载点。这些必须根据涉及的挂载点来命令并且必须有匹配的.mount单元来定义挂载的细节。
swap:这个单元描述了系统里的交换空间。这些文件的名字必须体现设备或者空间文件。
target:一个目标单元是在启动或者改变状态时为其他单元提供同步点的。他们也可以用于把系统带进一个新的状态。其他单元指定他们的相当目标来绑定目标的操作。
path:这个单元定义了一个可用于基于路径激活的路径。默认情况下,当路径达到指定状态时一个相同基础名字的.service单元就会开始。这使用inotify来监控路径的变化。
timer:一个.timer单元定义了一个被systemd管理的定时器,类似于一个cron工作来延时或者计划激活。一个匹配的单元将会在计时器到达时开始。
.snapshot:一个.snapshot单元是被systemctl snapshot命令自动创建的。它可以让你在进行更改后重建系统的当前状态。快照不会跨会话生存,快照是用于回滚临时状态的。
slice:一个.slice单元是和Linux Control Group节点关联的,允许资源受到限制或者给关联的进程分匹配时间片。名字反映了它在cgroup树里的分层位置。单元默认根据他们的类型放在一定的位置。
scope:作用域单元是systemd根据从它的总线接口接收到的信息自动创建的。这些被用于外部创建的系统进程的管理集。
就像你看到的,有许多systemd知道如何去管理的不同单元。很多单元类型一起工作来增加功能。例如,一些单元用于触发其他单元和提供激活功能。
我们将会主要集中在.servic单元,因为他们的实用性和管理员需要管理这些单元的一致性。

2.2.2 systemd服务管理

systemctl命令可以控制系统服务,此命令涵盖了之前版本操作系统中的service命令和chkconfig命令两者的功能,在使用systemctl命令时,可以省略服务单元名称的表示.service。也就是如果输入资源无后缀表示,systemctl会默认把后缀标识当做.service来处理。
语法:systemctl 【OPTIONS…】{ COMMAND } …
1.查看服务启动状态
systemctl status name.service
查看服务状态处理status选项,systemctl还提供了另外两种查询服务状态方法
1)查看某个服务是否在启动成功状态
systemctl is-active named.service
2)查看某个服务是否在启动失败状态
systemctl is-failed named.service
2.启动与停止服务
systemctl {start|stop|restart|reload} name.service
注意:restart命令相当于先stop然后再start,此时服务的PID值会改变,而reload命令则是使服务读取和重新加载次服务的配置文件,不会完全停止和启动服务,PID不变。可以使用status命令验证。生产环境中建议reload命令。
3.设置开机启动
systemctl {enable|disable} name.service
4.查看依赖关系
systemctl list-dependencies
5.屏蔽服务
屏蔽服务命令 systemctl mask name.service
取消屏蔽使用命令 systemctl unmask name.service在这里插入图片描述

2.2.3 服务配置文件

使用systemctl list-nuit-files --type unit-tpe 命令可以列出指定systemd单元类型的所有配置文件及其状态。
单元配置文件状态一共有四种 enable/disable/static/masked

2.2.4 Target类型单元

此类配置单元为其他配置单元进行逻辑分组。它们本身实际上并不做什么,只是引用其他配置单元而已,这样便可以对配置单元做一个统一的控制,就可以实现大家都非常熟悉的运行级别的概念。比如,想让系统进入图形化模式,需要运行许多服务和配置命令,这些操作都由一个个的配置单元表示,将所有的这些配置单元组合为一个目标(target),就表示需要将这些配置单元全部执行一遍,以便进入目标所代表的系统运行状态(例如:multi-user.target相当于在传统使用sysv的系统中运行级别5)。
使用命令systemctl list-unit-files --type target 命令可以查看当前系统上的所有target

2.2.5 systemd其他命令

1.更改系统主机名
hostnamectl set-hostname www.example.com
2.查看主机名状态
hostnamectl status
3.日志系统
1)输出本次启动后的所有日志信息 journalctl -b
2)显示固定时间段日志 journalctl --since=“2020-12-8 18:00:00”
4.语言设置
localectl list-locales列出当前系统支持所有语言
5.登录系统用户信息
loginctl list-sessions
6.启动耗时
systemd-analyze blame查看每个服务的启动耗时

2.3 ntsysv工具

在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值