【Linux】进入救援环境并修复损坏的主引导记录(MBR)实例

对于MBR磁盘来说,硬盘的0柱面、0磁头、1扇区称为主引导扇区。它的大小是512字节,包括三个部分。

  • 第一部分为pre-boot区(预启动区),占446字节。它存放的是主引导程序,负责从活动分区中装载并运行主引导程序
  • 第二部分是分区表,占64个字节。
  • 第三部分是magic number(幻数),就是一种硬盘有效标识,占2个字节,固定值为55AA。

磁盘主引导记录被破坏后,无法使用GRUB来引导Linux系统,这是一种常见的系统故障,解决方法是修复主引导记录。

  • 系统:CentOS-7-x86_64-DVD-2009.iso

(一)破坏GRUB环境

为了便于实验操作,可以先模拟一下损坏的GURB的环境

  • 首先执行以下命令备份MBR
# dd if=/dev/sda of=/root/mbr.bak count=1 bs=512
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000161673 s, 3.2 MB/s

  • 然后执行以下命令破坏MBR记录:
# dd if=/dev/zero of=/dev/sda count=1 bs=446
1+0 records in
1+0 records out
446 bytes (446 B) copied, 0.00016014 s, 2.9 MB/s

这样将复制到/dev/zero文件下的内容到/dev/sda,并将块block设为446字节,即将MBR中的前446字节全部变成0,显然破坏引导装载器程序GRUB。重启系统后会出现黑屏
有一个光标在闪烁几秒钟,后进入如下状态:

在这里插入图片描述

(二)进入Centos救援环境修复系统

当启动管理程序GRUB损坏后,系统无法启动,实际上是无法启动内核或者无法执行系统初始化。此时就不能依赖GRUB救援模式,而要使用救援环境(rescue enviroment)来修复Linux系统故障。这种方式提供从系统硬盘依赖的来源(U盘、光盘等)引导一个小型的Linux环境的能力,引导成功以后再对硬盘上的错误进行修改和恢复。

1.进入救援模式

可以通过以下方式进入救援模式

  • 从Linux的关盘的第1张盘引导系统
  • 从boot.ios映像制作的引导关盘引导系统
  • 从bootdisk.img映像制作的安装引导盘引导系统

这里以最常见的第一种方式为例进行介绍。

(1)将centos安装光盘放到光驱中,引导系统并修改计算机BIOS设置,以便从光盘引导计算机。

  • 因为涉及模拟系统故障,观察故障信息并使用救援环境进行修复。注意不要再生产系统操作,推荐再VMware虚拟机环境完成该系列实验。VMware虚拟机环境下默认开机界面可能太短,不便于按< F2 >或< Esc >键调整启动选项,解决的方法是编辑相应的虚拟机配置文件(.vmx),在末尾加上bios.forceSetupOnce="TRUE"或者bios.bootDelay=“xxx”(单位毫秒)

(2)选择“Troubleshooting”,按回车键。

在这里插入图片描述

(3)选择“Rescue a CentOS system”,按回车键。

在这里插入图片描述

(4)出现“Press the key to begin installation process”提示界面,按回车键继续(如果没有这样的显示就不用管)

(5)启动安装程序,出现下图所示的界面,提示救援环境试图寻找硬盘中安装的 Linux系统,并将它挂载到/mnt/sysimage目录,需要选择下一步如何处理。

在这里插入图片描述

  • 若要修改硬盘中的任一配置文件,选择1(Continue);
    若不需要修改任何配置文件,需读取硬盘的 Linux环境,选择2(Read-Only mount);
    若手动挂载文件系统,选择3(Skip shell) 直接跳过寻找并挂载硬盘的步骤;
    选择4(Quit)将退出当前环境并重启系统。

(6)这里输入1并按回车键,成功将硬盘中的Linux挂载到/mnt/sysimage目录。
在这里插入图片描述

(7)按回车键提供一个Shell供管理员使用。

在这里插入图片描述

CentOS7的救援环境提供很多管理工具,便于修复系统的严重错误。这些管理工具以磁盘与文件系统管理工具为主,还包括systemd工具、网络配置工具、Shell 命令、vi编辑器进程管理工具、rpm软件安装工具等。成功挂载硬盘的Linux系统会自动加入硬盘中相关的目录,便于直接执行硬盘中的Linux各种工具程序与命令。

(三)修复

1.使用 chroot改变根目录

进入救援环境后,正在运行的系统来自光盘载体。当前环境下一切都是由引导光盘提供的,根分区就是光盘里面的/,而硬盘上的分区全部被挂载到/mnt/sysimage/目录。有些管理工具(最典型的是重新安装GRUB2的grub2-install)必须在硬盘环境中执行,这就需要使用chroot修改救援环境的根目录。

  • chroot的含义是“change to root”,“root”代表的是根目录。chroot的作用是改变程序运行时所引用的根目录位置,即将某个特定目录作为程序的虚拟根目录。可以执行以下命令来进入硬盘所在的系统:
    chroot /mnt/sysimage
    完成系统修复之后,执行exit命令退出chroot环境。需要注意的是,在chroot环境中,读不到光盘中的文件。
# 改变根目录环境
chroot /mnt/sysimage
# 将GRUB信息写入磁盘主引导记录中
grub2-install /dev/sda

在这里插入图片描述

执行exit退出chroot环境,再执行一次exit命令退出救援环境并重启系统。

相关推荐

  1. Linux rpm和ssh损坏修复

    2024-04-21 09:26:02       24 阅读
  2. sqlite 损坏 修复

    2024-04-21 09:26:02       43 阅读
  3. Redis 实战之创建修改 Lua 环境

    2024-04-21 09:26:02       30 阅读
  4. 记录Linux安装go环境一个坑

    2024-04-21 09:26:02       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 09:26:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 09:26:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 09:26:02       87 阅读
  4. Python语言-面向对象

    2024-04-21 09:26:02       96 阅读

热门阅读

  1. Github 2024-04-20 Rust开源项目日报 Top10

    2024-04-21 09:26:02       37 阅读
  2. [git] 使用git和github工作思路和经验

    2024-04-21 09:26:02       34 阅读
  3. Linux安装Kubernetes(k8s)详细教程

    2024-04-21 09:26:02       37 阅读
  4. vue3-setup与vue2的data共存

    2024-04-21 09:26:02       120 阅读
  5. 实景景区亲自儿童剧本杀小程序开发搭建

    2024-04-21 09:26:02       171 阅读
  6. NLP地点位置抽取python库实现

    2024-04-21 09:26:02       107 阅读
  7. SHELL脚本编程----netstat练习3-输出每个IP的连接数

    2024-04-21 09:26:02       74 阅读
  8. 正则表达式

    2024-04-21 09:26:02       39 阅读
  9. 大模型日报2024-04-17

    2024-04-21 09:26:02       62 阅读