首页 > 系统相关 >Linux引导过程、修复MBR扇区

Linux引导过程、修复MBR扇区

时间:2024-06-03 21:59:53浏览次数:29  
标签:引导 GRUB 扇区 init Linux 进程 MBR

目录

引导过程

开机自检

寻找boot引导设备

加载MBR引导记录

GRUB菜单

加载内核

init进程初始化

进程树

系统初始化进程

init进程

守护进程

运行级别

Systemd

修复MBR扇区故障

故障原因

故障现象

解决思路

示例

备份MBR扇区

模拟故障恢复MBR扇区

GRUB备份模拟

GRUB故障模拟

GRUB故障模拟2

修改密码


引导过程

  1. 开机自检
    1. 对主板上的核心硬件进行自检
    2. BIOS:基本输入输出系统(Basic Input Output System)
    3. 装在CMOS(互补金属氧化物半导体 - Complementary Metal Oxide Semiconductor)芯片上
  2. 寻找boot引导设备
    1. 常见的引导设备都有:光盘、U盘、硬盘、网络服务器
    2. 自检完成后,在引导设备中按设置的引导设备顺序检测,检测到就进入下一个步骤,没检测到就提示没有系统
  3. 加载MBR引导记录
    1. 进入硬盘中
    2. 找到硬盘的第一个扇区,0磁道的0号扇区
    3. 该扇区存放了MBR(主引导记录)引导记录,要加载该引导程序
    4. MBR引导记录由3部分构成
      1. Boot Loader(引导程序),在该扇区占第1个字节到第446个字节(占446个字节)
      2. DPT(硬盘分区表)在该扇区占第447个字节到第510个字节(占64个字节),每个主分区占16字节,64字节只能存在4个主分区,所以MBR分区表类型最多只能有4个主分区
      3. 55aa(结束标识)在该扇区占第511个字节到第512个字节(占2个字节)
  4. GRUB菜单
    1. MBR引导过后,让用户选择操作系统的界面
    2. GRUB(GRand Unified Bootloader)
  5. 加载内核
    1. 把在GRUB界面选定的内核文件运行到内存里面
    2. 由该内核启动 init(初始化)进程
  6. init进程初始化
    1. 只有init进程启动了,其他程序才能启动

进程树

引导过程结束后,在主机上会生成一个进程树

pstree #(ps:process static)命令查看静态进程树(这一刻的进程树)
ll /sbin/init # 命令 查看进程初始化文件systemd:/sbin/init -> ../lib/systemd/systemd —— 早期叫init,现在叫systemd,为了和早期版本的连贯性,所以和名为init的文件链接起来

系统初始化进程

init进程

  • 由Linux内核加载运行 /sbin/init 程序
  • init进程是系统中第一个进程
  • init进程的PID(进程标记)号永远为1

守护进程

管理其他进程的开关

  • 示例 /lib/systemd/system 目录下的 sshd.service 文件
  • 通过服务提供的管理文件,就可以使用 systemctl 命令去管理服务

文件类型

说明

service

服务提供给systemd所管理服务的文件

运行级别

运行级别

Systemd的target

说明

0

poweroff.target

关机状态,使用该级别将会关闭主机

poweroff.target:systemd目标,0号级别为关机

poweroff:关机

1

rescue.target

救援模式/单用户模式

不需要密码验证即可登录系统,多用于系统维护

救援模式/单用户模式:不能联网,当系统出现意外时,进入救援模式进行系统调试

rescue:救援

2

multi-user.target

用户定义/域特别运行级别。默认等同于3

3

multi-user.target

字符界面的完整多用户模式,大多数服务器主机运行在此级别

4

multi-user.target

用户定义/域特别运行级别。默认等同于3

5

graphical.target

graphical:图像化

图形界面里的多用户模式,提供了图形桌面操作环境

6

reboot.target

重新启动,使用该级别时会重启主机

命令

说明

init 0

将运行级别修改至0(关机)

init 6

重启

runlevel

查看当前系统的运行级别

显示格式:N 当前运行级别

N:表示上一个运行级别

systemctl get-default

查看当前系统默认运行级别

Systemd

  • Systemd是Linux操作系统的一种init软件
  • CentOS 7采用全新的Systemd启动方式,取代传统的SysVinit
  • CentOS 7中运行的第一个init进程是 /lib/systemd/systemd

命令

说明

systemctl start sshd

启动该服务

systemctl stop sshd

停止该服务

systemctl restart sshd

重启该服务

systemctl status sshd

查询该服务状态

systemctl enable sshd

启用该服务,重启后也是开启状态

systemctl disable sshd

禁用该服务,重启后也不会开启

修复MBR扇区故障

  • 故障原因

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

    • 找不到引导程序,启动中断
    • 无法加载操作系统,开机后黑屏
  • 解决思路

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

把该扇区备份到其他磁盘上,因为一个磁盘上的MBR扇区故障了,那么该磁盘的分区表就故障了,就找不到分区了

示例

备份MBR扇区

  1. 提前在虚拟机设置里新增一块硬盘
  2. 分区、格式化、挂载
  3. 使用 dd if=/dev/sda of=/bak/sda.mbr.bak bs=512 count=1
    1. 抓取指定硬盘磁道位置的数据
  4. 备份完毕

模拟故障恢复MBR扇区

  1. dd if=/dev/zero of=/dev/sda bs=512 count=1
  2. reboot 重启
  3. 进入排障模式 —— Troubleshooting
  4. 选择 救援一个CentOS 系统 —— Rescue a CentOS system
  5. 输入1,表示选择Continue
  6. 回车一下,获取一个Shell环境
  7. mkdir /bak 先创建一个挂载点
  8. mount /dev/sdb1 /bak 重新挂载一下刚才用于备份MBR文件的sdb磁盘
  9. dd if=/bak/sda.mbr.bak of=/dev/sda bs=512 count=1 这里无法指定具体位置,默认从磁盘起始位置覆盖扇区
  10. exit,退出,系统恢复正常

GRUB备份模拟

  1. cd 到 /boot/grub2
  2. cp grub.cfg grub.cfg.bak 拷贝引导文件
  3. 备份完成

GRUB故障模拟

  1. 在 /boot/grub2 目录下 rm -rf grub.cfg 删除该引导文件,reboot 重启
  2. 在虚拟机界面Ctrl + Alt + Insert 重启快捷键,在下方进度条加载完之前按一下Esc进入引导菜单
  3. 选择 CD-ROM Drive
  4. 进入排障模式 —— Troubleshooting
  5. 选择 救援一个CentOS 系统 —— Rescue a CentOS system
  6. 输入1,表示选择Continue
  7. 回车一下,获取一个Shell环境
  8. chroot /mnt/sysimage 切换为挂载硬盘的根目录(因为当前在光盘的根目录)
  9. 再 cd 到 /boot/grub2
  10. cp grub.cfg.bak grub.cfg 拷贝文件
  11. exit,exit
  12. 修复完成

GRUB故障模拟2

在没有备份grub.cfg文件的情况下修复系统

  1. insmod xfs 指定磁盘的文件系统类型
  2. 指定内核文件和根分区挂载点:输入 linux16 /vm 按一下TAB键 查看当前磁盘全部内核
  3. 根据内核版本补全内核全称:linux16 /vmlinuz-6.9.1-1.e17.elrepo.x86_64
  4. 继续,指定根分区 linux16 /vmlinuz-6.9.1-1.e17.elrepo.x86_64 root=/dev/mapper/centos-root,回车
  5. 指定初始化镜像文件:initrd16 /init 按TAB键 补全代码 对应好你上一步所选的内核版本
  6. 根据上一步对应内核版本后应是:initrd16 /initramfs-6.9.1-1.e17.elrepo.x86_64.img,回车
  7. 输入 boot 回车,系统会按照你指定的信息启动操作系统
  8. 进入操作系统后,要去 /boot/grub2 目录下重新准备一份 grub.cfg 文件

修改密码

在忘记密码时的操作

  1. 在虚拟机界面Ctrl + Alt + Insert 重启快捷键,在下方进度条加载完之前按一下Esc进入引导菜单
  2. 选择 CD-ROM Drive
  3. 进入排障模式 —— Troubleshooting
  4. 选择 救援一个CentOS 系统 —— Rescue a CentOS system
  5. 输入1,表示选择Continue
  6. 回车一下,获取一个Shell环境
  7. chroot /mnt/sysimage/ 切换为挂载硬盘的根目录(因为当前在光盘的根目录)
  8. passwd root,修改密码
  9. exit,重启系统

标签:引导,GRUB,扇区,init,Linux,进程,MBR
From: https://blog.csdn.net/m0_65551023/article/details/139425377

相关文章

  • Linux管理员必备——Linux系统服务(daemon)与systemctl管理服务(上)
    ......
  • 【Linux 网络】高级 IO -- 详解
    一、IO的基本概念I/O(input/output)也就是输入和输出,在冯诺依曼体系结构当中,将数据从输入设备拷贝到内存就叫作输入,将数据从内存拷贝到输出设备就叫作输出。对文件进行的读写操作本质就是一种IO,文件IO对应的外设就是磁盘。对网络进行的读写操作本质也是一种IO,网络IO对......
  • Linux基础命令
    Linux基础命令Linux命令大全搜索工具(可能需要翻墙)web镜像文章目录lspwdcdtouchmkdirrmdirrmmancpmvcatmorelesshead1taildatecalfindgrepzipunziptarbcunameshutdownLinux系统对于大小写是敏感的,因此输入命令需要注意大小写1.ls指令语法:ls[选项]目录/文件......
  • 在Linux中,如何在Linux中进行资源配额管理?
    在Linux中进行资源配额管理(也称为磁盘配额管理)是为了控制用户或组对磁盘空间和文件数量的使用,以避免个别用户或组消耗过多资源,影响其他用户的使用体验。以下是在Linux中进行资源配额管理的步骤:1.确认磁盘配额是否已启用在较新的Linux发行版中,默认可能已经启用了磁盘配额。可以......
  • 搭建Ubuntu Linux虚拟环境并部署docker,搭建远程开发环境
    引言掌握虚拟化技术和容器化工具是开发者的必备技能,最近刚好学了些Linux技术,写一篇笔记来记录一下是如何一步步搭建一个UbuntuLinux虚拟环境的,并在当中部署docker容器。起初是为了安装docker,发现在Windows上安装docker比较麻烦,而在Linux系统上安装docker则比较简单。废话不多......
  • 在Linux中,如何进行系统更新和补丁管理?
    在Linux中,进行系统更新和补丁管理对于保持系统的安全性和稳定性至关重要。以下是一个详细的步骤和指南,涵盖了系统更新和补丁管理的各个方面:一、系统更新1.确定Linux发行版不同的Linux发行版有不同的包管理系统,如Debian/Ubuntu使用APT,RedHat/CentOS使用YUM或DNF,Fedora使用DNF......
  • 在Linux中,如何进行安全漏洞扫描?
    在Linux中进行安全漏洞扫描是一个重要的过程,可以帮助你识别和修复潜在的安全问题。以下是一些关键步骤和工具,用于进行安全漏洞扫描:1.使用命令行工具扫描漏洞使用apt更新软件包(针对基于Debian的系统):sudoaptupdatesudoaptupgradesudoaptautoremove使用yum或dnf更......
  • 在Linux中,如何在Linux中进行配置管理和自动化部署?
    在Linux环境中,配置管理和自动化部署是提升运维效率、确保环境一致性及加速软件交付的关键实践。以下是进行配置管理和自动化部署的一般步骤和常用工具介绍:1.配置管理工具选择首先,你需要选择合适的配置管理工具。一些流行的配置管理工具有:Ansible:基于Python,使用YAML编写剧本......
  • 在Linux中,如何在Linux中进行系统镜像管理?
    在Linux中,系统镜像管理主要涉及镜像的创建、存储、分发、更新以及删除等过程。以下是在Linux中进行系统镜像管理的详细步骤和注意事项:一、镜像创建准备环境和工具:选择合适的Linux发行版(如Ubuntu、CentOS等)。安装并配置必要的工具,如Docker(如果创建的是Docker镜像)或mkisofs(如......
  • c++在Linux下把gbk编码转为utf8编码类型
    #include<iostream>#include<string.h>#include<iconv.h>#include<memory>std::stringgbk_to_utf8(conststd::string&gbk_str){size_tin_len=gbk_str.size();size_tout_len=in_len*4;//设置足够大,确保可以存放转换后的UTF-8字符串std::uni......