Linux-引导过程与排除启动类故障(修复MBR扇区故障和修复GRUB引导故障)


一、Linux操作系统引导过程

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

1.引导过程总览

mark

1.1 开机自检

  • 服务器主机开机以后,将根据主板BIOS(基本输入输出系统)中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘
  • 检测出第一个能够引导系统的设备,比如硬盘或者光驱

1.2 MBR 引导

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

1.3 GRUB 菜单

  • 对于Linux操作系统来说,GRUB(统一启动加载器)是使用最为广泛的多系统引导器程序
    系统控制权传递给GROB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核
    Centos 7 采用的是 GRUB2 启动引导器
    GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置

1.4 加载 Linux 内核

  • Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度
    内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程
  • Centos 7系统中,默认的内核文件位于"/boot/vmlinuz-3.10.0-514.e17.x86_64"
  • 把内核和镜像文件系统加载到内存中

1.5 init 进程初始化

  • 为了完成进一步的系统引导过程,Linux内核首先将系统中的"/sbin/init"程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成整个系统的初始化,最后等待用户进行登录
  • 加载硬件驱动程序,内核把init进程加载到内存中运行

2.init进程

  • Linux系统中的进程(运行中的程序)使用数字进行标记,每个进程的身份标记号称为PID,在引导Linux的过程中,“/sbin/init”是内核第一个加载的程序。因此init进程对应的PID号总是为“1”
  • init进程运行以后将陆续执行系统中的其他程序,不断生成新的进程,这些进程称为init进程的子进程,反过来说,init进程是这些进程的父进程
    当然,这些子进程也可以进一步生成各自的子进程,一次不断繁衍下去,最终构成一棵枝繁叶茂的进程树,共同为用户提供服务
  • init正是维护整个Linux系统运行的所有进程的“始祖”,因此init进程是不允许被轻易终止的
    需要切换不同的系统运行状态时,可以向init进程发送正确的执行参数,由init自身来完成相关操作

3.Systemd

  • Systemd是Linux操作系统的一种init软件
  • CentOS7中采用全新的Systemd启动方式,取代传统的SysVinit
  • 传统SysVinit依赖于串行执行 Shell 脚本启动服务,导致效率低下,系统启动速度较慢
  • Systemd能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度
  • CentOS7中运行的第一个init进程是/lib/systemd/systemd

4.Systemd 单元类型

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

5.运行级别所对应的Systemd目标

运行级别 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 重新启动,使用该级别时将会重启主机

二、排除启动类故障

1.修复MBR扇区故障

1.1 故障原因

  • 病毒、木马等造成的破坏
  • 不正确的分区操作、磁盘读写误操作

1.2 故障现象

  • 找不到引导程序,启动中断
  • 无法加载操作系统

1.3 解决思路

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

1.4 实操

1.4.1 备份MBR扇区数据到其他磁盘(/dev/sdb1)

  • 首先添加一块新硬盘
  • 新建分区
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xbd9ad88f 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-83886079,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-83886079,默认为 83886079):
将使用默认值 83886079
分区 1 已设置为 Linux 类型,大小设为 40 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
  • 格式化
[root@localhost ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=2621376 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=10485504, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=5119, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

  • 挂载
[root@localhost ~]# mkdir /backup
[root@localhost ~]# mount /dev/sdb1 /backup/

  • 备份
[root@localhost ~]# cd /backup/
[root@localhost backup]# ls
[root@localhost backup]# dd if=/dev/sda of=/backup/mbr.bak bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000197902 秒,2.6 MB/秒
[root@localhost backup]# ls
mbr.bak

1.4.2 模拟破坏MBR引导扇区

  • 模拟破坏
[root@localhost backup]# dd if=/dev/zero of=/dev/sda bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,9.7308e-05 秒,5.3 MB/秒
  • 重启系统,测试一下
[root@localhost backup]# init 6
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(CentOS 7-3) at 16:58:38.

Type `help' to learn how to use Xshell prompt.
[D:\~]$ 

1.4.3 引导界面

  • 重启后发现没有进入系统界面,而是出现了安装向导
    mark
  • 这里我们选择“Troubleshooting”选项,进入急救模式
    mark
  • 输入“1”选择 Continue 并按 Enter 键继续
    mark
  • 再次按 Enter 键后进入带“sh-4.2#”提示符的 Bash Shell 环境
sh-4.2# mkdir /backupdir
sh-4.2# mount /dev/sdb1 /backupdir        ##挂载带有备份文件的分区
sh-4.2# dd if=/backupdir/mbr.bak of=/dev/sda bs=512 count=1        ##恢复备份数据
sh-4.2# exit       ##执行exit命令退出临时Shell环境,系统将会自动重启
  • OK 系统开始重启,之后发现就正常了,可以直接进入系统

2.修复GRUB 引导故障

2.1 故障原因

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

2.2 故障现象

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

2.3 解决思路

  • 尝试手动输入引导命令
  • 进入急救模式,重写或者从备份中恢复grub.conf
  • 向MBR扇区中重建grub程序

2.4 实操

  • 引导界面进入急救模式,重建GRUB菜单配置文件

2.4.1 模拟故障

/boot/grub/目录下的包是用于启动菜单的背景图片及样式
/boot/grub2/grub.cfg        ##Grub配置文件
  • 删除 grub.cfg 以模拟故障
  • 这里我们不需要备份,因为是直接重建
[root@localhost boot]# cd grub2
[root@localhost grub2]# ls
device.map  fonts  grub.cfg  grubenv  i386-pc  locale
[root@localhost grub2]# rm -rf grub.cfg
[root@localhost grub2]# ls
device.map  fonts  grubenv  i386-pc  locale
  • 输入 reboot 重启,这时会进入这个界面
    mark
  • 注意了,这个时候我们要怎么进入引导界面呢,手速一定要快,点击重启后立即按“ESC”,多试几次,总能成
    mark
  • 这里我们选择光盘
    mark

2.4.2 引导界面

  • 进入急救模式,恢复CenOS系统
    mark
    mark
  • 输入1,回车
    mark
  • 切换到系统根环境(这时候开始可以用TAB键补全了)
sh-4.2# chroot /mnt/sysimage
bash-4.2#
  • 重新将GRUB引导程序安装到第一块硬盘(/dev/sda)的MRB扇区
bash-4.2# grub2-install /dev/sda
  • 重新构建GRUB菜单的配置文件
bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg
  • 退出chroot 环境,并重启
bash-4.2# exit
sh-4.2# reboot
  • OK,可以进入系统界面,下面我们再来验证一下,发现grub.cfg又有了
[root@localhost ~]# cd /boot/grub2
[root@localhost grub2]# ls
device.map  fonts  grub.cfg  grubenv  i386-pc  locale

猜你喜欢

转载自blog.csdn.net/weixin_51486343/article/details/110202636