Linux-引导过程与服务控制 --原理+实操(MBR扇区故障,GRUB引导故障,root用户密码遗忘的修复)

一、Linux 操作系统的引导过程

1.1 引导过程总览

在这里插入图片描述
1、开机自检
服务器主机开机以后,将根据主板 BIOS 中的设置对 CPU(Central Processing Unit, 中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。

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

3、GRUB 菜单
对于 Linux 操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给 GRUB 以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载 Linux 内核文件,然后将系统控制权转交给内核。需要注意的是,CentOS 7 采用的是 GRUB2 启动引导器。

4、加载 Linux 内核
Linux 内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间, 负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个 Linux 操作系统的运行过程。在 CentOS 系统中,默认的内核文件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。

5、init 进程初始化
为了完成进一步的系统引导过程,Linux 内核首先将系统中的“/sbin/init”程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录。

1.2 系统初始化进程及文件

1.2.1 init 进程

  • 由Linux内核加载运行/sbin/init程序

  • init进程时系统中第一个进程

  • init进程的PID(进程标记)号永远是1

1.2.2 Systemd

  • Systemd是Linux操作系统的一种init软件

  • CentOS 7 中采用全新的System启动方式,取代传统的SysVinit

  • CentOS 7 中运行的第一个init进程是/lib/systemd/systemd

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 目标)

Init运行级别所对应的Systemd目标

init运行级别 Systemd 的 target 说明
0 target 关机状态,使用该级别时会关闭主机
1 rescue.target 单用户模式,不需要密码验证即可登录系统,多用于系统维护
2 multi-user.target 用户定义/域特定运行级别,默认等同于3
3 multi-user.target 字符界面的完整用户模式,大多数服务器主机运行在此级别
4 multi-user.target 用户定义/域特定运行级别,默认等同于3
5 graphical.target 图形界面的多用户模式,提供了图形桌面操作环境
6 reboot.target 重新启动,使用该级别时将会重启主机

二、排除系统启动类故障

2.1 修复MBR扇区故障

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

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

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

2.1.1 修复MBR扇区故障实验

实验环境
VMware软件,开centos 7,并为其添加一块硬盘(备份数据用的)

恢复步骤
1.备份已损坏MBR扇区数据(实际中我们都是备份整个文件)
加一块磁盘做备份

2.模拟故障

3.加载系统镜像文件中的急救模式
加载系统镜像文件中的内核界面
将备份数据做恢复处理

实验过程
虚拟机加一块300G硬盘做实验
进系统查看磁盘
fdisk -l ###看是否有sdb
在这里插入图片描述
mkfs -t ext4 /dev/sdb ###格式化sdb
按y确认删除
在这里插入图片描述
挂载mount /dev/sdb /opt
df -Th 查看一下
在这里插入图片描述
1、备份MBR扇区数据
执行以下操作可以将第 一块硬盘(sda)的 MBR 扇区备份到第二块硬盘的 sdb1 分区中(挂载到/opt 目录)。
dd if=/dev/sda of=/opt/mbr.bak bs=512 count=1
在这里插入图片描述
2、模拟MBR扇区故障
执行以下操作可以从设备文件 zero 中读取 512 字节的数据,并将其覆盖到第一块硬盘(sda),从而破坏 MBR 扇区中的数据。
dd if=/dev/zero of=/dev/sda bs=512 count=1
在这里插入图片描述
完成上述操作后重启系统,将会出现“Operating system not found”的提示信息,表示无法找到可用的操作系统,因此无法启动主机。
在这里插入图片描述
3.从备份文件中恢复 MBR 扇区数据
由于 MBR 扇区被破坏以后,就无法再从该硬盘启动系统,所以需要使用其他硬盘中的操作系统进行引导,或者直接使用 CentOS 系统的安装光盘进行引导。不管使用哪种方式, 目的都是相同的——获得一个可以执行命令的 Shell 环境,以便从备份文件中恢复 MBR 扇区中的数据。
以使用 CentOS 安装光盘引导为例,当出现安装向导界面时,选择“Troubleshooting” 选项,如图所示,进入修复故障页面。
在这里插入图片描述
再选择“Rescue a CentOS Linux system”选项,将以“救援模式”引导Linux 操作系统。
在这里插入图片描述
然后系统会自动查找硬盘中的 Linux 分区并尝试将其挂载到/mnt/sysimage 目录(选择
“1”确认并按 Enter 键继续)。接下来会出现 rescue 字符界面
最后,按 Enter 键后将进入带“sh-4.2#”提示符的 Bash Shell 环境
在这里插入图片描述
mount /dev/sdb /mnt ## 将备份sdb备份的文件挂到mnt下
然后进去看下是否有mbr.bak
在这里插入图片描述
dd if=/mnt/mbr.bak of=/dev/sda count=1 bs=512 ###恢复备份数据
在这里插入图片描述
重启reboot 进入系统测试是否正常。
系统正常启动
在这里插入图片描述

2.2 修复GRUB引导故障

故障原因

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

故障现象

  • 系统引导停滞,显示“grub>”提示符

解决思路

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

2.2.1 修复GRUB引导故障实验

光盘引导,进入急救模式,提示操作
从备份文件中恢复MBR扇区

'//第一步:查找并破坏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				'//重启'

系统无法正常启动
在这里插入图片描述
重新启动系统,在载入条时,立马按F2进入BIOS界面
在这里插入图片描述
按方向键右键到Boot界面,选择到CD-ROM Drive,按+号将这一选项移到最上面
在这里插入图片描述
再移动到Exit,回车保存并重启
在这里插入图片描述
1.装入光盘,在光盘引导界面选择troubleshooting:
在这里插入图片描述
2、进入troubleshooting菜单 选择Rescue a centos system
在这里插入图片描述
3、然后系统会自动查找硬盘中的 Linux 分区并尝试将其挂载到/mnt/sysimage 目录(选择
“1”确认并按 Enter 键继续)。接下来会出现 rescue 字符界面
最后,按 Enter 键后将进入带“sh-4.2#”提示符的 Bash Shell 环境
在这里插入图片描述
4、进入“bash-4.2#”的 Shell 环境以后,重写(或通过之前备份的文件恢复)grub.cfg 配置文件即可。重写完 grub.cfg 配置文件后,需要使用 grub2-mkconfig 工具更新 grub.cfg 配置文件。

将/mnt/sysimage 设置为当前环境的根
chroot /mnt/sysimage/
(若未执行“chroot /mnt/sysimage”命令,则重新建立的 grub.cfg 配置文件应该位于/mnt/sysimage/boot/grub2/grub.cfg)
在这里插入图片描述
进入boot目录,查看文件
在这里插入图片描述
5、执行“grub2-install /dev/sda”命令可以重新将grub 引导程序安装到第一块硬盘(sda)的 MRB 扇区

使用 grub2-install 命令修复grub
grub2-install /dev/sda
在这里插入图片描述
查看是否修复
cd /boot/grub2/
ls
已经修复
在这里插入图片描述
6、修复grub.cfg配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
在这里插入图片描述
查看是否修复
cd /boot/grub2/
ls
在这里插入图片描述
7、重启
exit
reboot ###主要改启动项,否认还是进光盘模式

10、重启时在载入时立即按F2进入BIOS
将开机启动项改为硬盘,保存退出
在这里插入图片描述
最后成功进入系统
在这里插入图片描述

2.3 遗忘root用户密码

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

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

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

2.3.1 遗忘root用户密码解决实验

重新启动系统,在载入条时,立马按F2进入BIOS界面
按方向键右键到Boot界面,选择到CD-ROM Drive,按+号将这一选项移到最上面
在这里插入图片描述
再移动到Exit,回车保存并重启

1.装入光盘,在光盘引导界面选择troubleshooting:
在这里插入图片描述
2、进入troubleshooting菜单 选择Rescue a centos system
在这里插入图片描述
3、进入引导可以按回车,或者等待
按1 在按会车进入sh-4.2#
在这里插入图片描述
4、将/mnt/sysimage 设置为当前环境的根
chroot /mnt/sysimage/
在这里插入图片描述
5、修改密码
passwd root
输入密码:Abc123 ###第一次
输入密码:Abc123 ###第二次
在这里插入图片描述
6、重启
exit
reboot ###主要改启动项,否则还是进光盘模式
7、验证
登录:root
密码:Abc123

2.4 以上三个实验总结

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

  • 加载镜像系统命令

chroot /mnt/sysimage

重新构建grub菜单系统命令

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

三、服务控制及优化启动过程

3.1 系统服务控制

在 CentOS 系统中,各种系统服务的控制脚本默认放在/usr/lib/systemd 目录下。通过
systemctl 命令工具可以实现对指定系统服务的控制
语法格式如下:
systemctl 控制类型 服务名称

常用控制类型

  • start(启动):运行指定的系统服务程序,实现服务功能。
  • stop(停止):终止指定的系统服务程序,关闭相应的功能。
  • restart(重启):先退出,再重新运行指定的系统服务程序。
  • reload(重载):不退出服务程序,只是刷新配置。在某些服务中与 restart 的操作相同。
  • status(查看状态):查看指定的系统服务的运行状态及相关信息。

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

例如:
对正在为用户提供Web 访问的 httpd 服务,当需要应用新的配置时,建议执行“systemctl reload httpd.service” 命令来重新载入配置,而不是执行“systemctl restart httpd.service”。

[root@localhost ~]# systemctl reload httpd.service

查看运行级别

  • runlevel 命令
    • runlevel 只能查看切换运行级别与当前运行级别
例如
[root@localhost ~]# runlevel 
N 5		'//N 是上一次运行的级别,5是这一次运行的级别。因为是开机后就查看,所以上一次的运行级别显示为N(no)'
'若从init 5 切换到 init 3 ,在init3中输入runlevel命令,则会显示 5 3'
  • systemctl 工具
    • systemctl 能查看默认的运行级别
      例如:检查系统网路是否开机自启动
      在这里插入图片描述

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

CentOS 系统中常见的系统服务

服务名称 用途简介 备注
atd 延期、定时执行任务 建议关闭
bluetooth 发现、认证蓝牙相关设备 建议关闭
crond 按预定周期执行计划任务 建议开启
irqbalance 多核心 CPU 处理器的调度支持 建议开启
kdump 记录内核崩溃时的内存信息 建议关闭
lvm2-monitor LVM 管理及监控 建议开启
netfs 访问共享文件夹等网络文件系统 建议开启
network 配置及使用网卡、网络地址 建议开启
restorecond SELinux 安全机制的文件监控和恢复功能 建议关闭
rhnsd 访问 Red Hat Network,获取通知、提交订阅等 建议关闭
rpcgssd 管理 NFS(Network File System,网络文件系统)访问中的客户程序语境 建议关闭
saslauthd 基于文本的身份认证 建议关闭
smartd 监控本地硬盘的状态并发送故障报告 建议开启
smb 文件共享服务 建议关闭
sshd 提供远程登录和管理 Linux 主机的功能 建议开启
rsyslog 记录内核、系统的日志消息 建议开启
vsftpd 通过 FTP(File Transfer Protocol,文件传输协议)提供文件上传、下载功能 建议关闭

必须强调的是,这些服务到底是选择开启还是关闭,应根据主机的实际功能需求来定, 不要生搬硬套。例如,如果当前的 Linux 主机用来向局域网提供文件共享服务,那么 smb 服务应开启,而不能关闭

3.2.1 ntsysv工具

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

在这里插入图片描述
操作时按↑、↓方向键来选择不同的系统服务,按 Space(空格)键设置服务的默认启动状态(“[*]”表示启动,“[ ]”表示关闭)。如果要查看所选定服务的说明信息,按 F1 键可以获取帮助。

3.2.2 systemctl 工具

systemctl 控制选项 服务名称

常用的选项有三种:

  • enable:开机自动启动。
  • disable:开机自动关闭。
  • is-enable:查看开机启动状态。

查看系统服务的启动状态
systemctl is-enable 服务名称

设置系统服务的启动状态
systemctl enable/disable 服务名称

例如,执行以下操作即可配置 apache 服务开机自动启动或关闭,并查看开机启动状态。当 apache 服务设置为开机自动启动时,在/etc/systemd/system/multi-user.target.wants/目录下面会出现一个文件名为 httpd.service 的软连接文件。当 apache 服务设置为开机自动关闭时,在/etc/systemd/system/multi-user.target.wants/目录下面的 httpd.service 软连接文件就会被删除。

[root@localhost ~]# systemctl enable httpd.service    //apache 服务设置为开机启动
Createdsymlinkfrom /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# systemctl is-enabled httpd.service
enabled
[root@localhost ~]# systemctl disable httpd.service     //apache 服务设置为开机关闭
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service. [root@localhost ~]# systemctl is-enabled httpd.service
disabled

在当前系统下执行“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

猜你喜欢

转载自blog.csdn.net/ycycyyc_/article/details/107071232