首页 > 其他分享 >引导过程与服务控制

引导过程与服务控制

时间:2024-06-04 09:59:15浏览次数:6  
标签:引导 服务 字节 控制 扇区 init 内核 MBR

  • 引导过程
  • 排除启动类故障
  • 服务控制及切换运行级别
  • 优化启动过程

Linux 操作系统的引导过程

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

引导过程总览

Linux 操作系统的引导过程一般包括以下几个阶段:开机自检、MBR 引导、GRUB 菜单、加载 Linux 内核、init 进程初始化。

 开机自检

  • 对主板上的核心硬件进行自检
  • BIOS:基本输入输出系统(BasicInputOutputSystem)
  • 装在CMOS (互补金属氧化物半导体 - Complementary Metal Oxide Semiconductor) 芯片上

寻找boot引导设备 

  • 常见的引导设备都有:光盘、U盘、硬盘、网络服务器
  • 自检完成后,在引导设备中按设置的引导设备顺序检测,检测到就进入下一个步骤,没检测到就提示没有系统

加载MBR引导记录

  • 进入硬盘中
  • 找到硬盘的第一个扇区,0磁道的0号扇区
  • 该扇区存放了MBR(主引导记录)引导记录,要加载该引导程序
  • MBR引导记录由3部分构成
    • Boot Loader (引导程序),在该扇区占第1个字节到第446个字节 (占446个字节)
    • DPT (硬盘分区表)在该扇区占第447个字节到第510个字节 (占64个字节),每个主分区占16字节,64字节只能存在4个主分区,所以MBR分区表类型最多只能有4个主分区
    • 55aa (结束标识) 在该扇区占第511个字节到第512个字节 (占2个字节)

GRUB菜单

  • MBR引I导过后,让用户选择操作系统的界面
  • GRUB (GRand Unified Bootloader)

加载内核

  • 把在GRUB界面选定的内核文件运行到内存里面
  • 由该内核启动 init (初始化) 进程

init进程初始化

  • 只有init进程启动了,其他程序才能启动

系统初始化进程及文件

引导过程结束后,在主机上会生成一个进程树
1. pstree # (ps:process static) 命令查看静态进程树 (这一刻的进程树)
2. 11 /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所管理服务的文件
target

运行级别 

运行级别Systemd的target说明
0poweroff.target
 
关机状态,使用该级别将会关闭主机
poweroff.target:systemd目标,0号级别为关机poweroff:关机
1rescue.target

救援模式/单用户模式

不需要密码验证即可登录系统,多用于系统维护
救援模式/单用户模式:不能联网,当系统出现意外时,进入救援模式进行系统调试

rescue:救援

2multi-user.target用户定义/域特别运行级别。默认等同于3
3multi-user.target字符界面的完整多用户模式,大多数服务器主机运行在此级别
4multi-user.target用户定义/域特别运行级别。默认等同于3
5graphical.targetgraphical:图像化
图形界面里的多用户模式,提供了图形桌面操作环境
6reboot.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
    a.抓取指定硬盘磁道位置的数据
  4. 备份完毕 

模拟故障恢复MBR扇区

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

GRUB备份模拟

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

GRUB故障模拟

  1. 在/boot/grub2 目录下 mm -rf grub.cfg 删除该引导文件,reboot 重启
  2. 在虚拟机界面Ctl +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到/bootgrub2
  10. cp grub.cfg.bak grub.cfg 拷贝文件
  11. exit, exit
  12. 修复完成 

GRUB故障模拟2

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

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

修改密码

  1. 在虚拟机界面Ctr + 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,重启系统

标签:引导,服务,字节,控制,扇区,init,内核,MBR
From: https://blog.csdn.net/qq_74956938/article/details/139419510

相关文章

  • 安徽京准 NTP时间服务器(网络授时服务器)技术应用方案
    安徽京准NTP时间服务器(网络授时服务器)技术应用方案安徽京准NTP时间服务器(网络授时服务器)技术应用方案京准电子科技官微——ahjzsz摘要:药食品质量安全追溯系统中各计算机设备间必须保持精确的时间同步,才能保证对药品食品各种相关信息的记录准确可靠。基于网络时间协议(NTP),结......
  • 企业定制开发AI智能名片S2B2C商城系统小程序:微服务架构下的营销创新
    一、引言在数字化时代,企业的营销策略正经历着前所未有的变革。随着技术的不断进步,特别是微服务架构和AI智能技术的融合,为企业带来了全新的营销模式和工具。其中,企业定制开发的AI智能名片S2B2C商城系统小程序,以其独特的优势,正逐步成为企业营销的新宠。本文旨在探讨微服务架构对......
  • Linux使用sz/rz命令在服务器上传下载文件 及 GIF89a图片欺骗攻击导致tmp目录很多php开
    一、Linux下使用sz/rz命令从服务器下载文件或上传文件至服务器    使用secureFX可以直接和LINUX进行文件互传,但有些服务器会要求通过中间服务器连接,无法难过SecureFX直接操作文件了,不过Linux有两个很好用的命令:sz和rzSZ:sz命令就是将服务器上的文件下载到本地电脑。s......
  • 使用Java构建RESTful API:实现灵活、可扩展的Web服务
            RESTfulAPI已经成为构建现代Web应用的标准之一,它通过简单的HTTP协议进行通信,提供了一种轻量级、灵活、可扩展的方式来构建和管理Web服务。Java作为一种强大的编程语言,提供了许多框架和库来帮助开发者构建高效的RESTfulAPI。本文将探讨如何使用Java构建RESTfu......
  • Linux引导过程、修复MBR扇区
    目录引导过程开机自检寻找boot引导设备加载MBR引导记录GRUB菜单加载内核init进程初始化进程树系统初始化进程init进程守护进程运行级别Systemd修复MBR扇区故障故障原因故障现象解决思路示例备份MBR扇区模拟故障恢复MBR扇区GRUB备份模拟GRUB故障模拟GRU......
  • C++代码实现一个简易http服务端,返回给客户端一张图片
    注意事项sprintf读取字符串时,遇到\0会结束,所以不能用sprintf来读取*pictureBuffervoid*memcpy(void*str1,constvoid*str2,size_tn),str2会覆盖str1里的内容代码#include<func.h>charpictureBuffer[150*1024];charbuffer[200*1024];intmain(){in......
  • 数据治理--企业数据服务 数据连接注册成API并且通过网关去限流 数据同步
      不直接开发hive的API访问速度慢,开放内存Presto的API去hive库查这样快 第一种不安全, 第二种公司内部用比较安全,结构文件落到对方ftp服务器 第三种一般跨网络同步 数据同步任务创建和执行监控          证券案例 ......
  • Linux管理员必备——Linux系统服务(daemon)与systemctl管理服务(上)
    ......
  • 飞睿智能雷达人体感应器,智能灯光控制,比红外传感器更胜一筹
    在智能家居日益普及的今天,智能灯光控制已成为提升家居生活品质的重要一环。飞睿智能雷达人体感应器作为这一领域的新星,以其独特的静止状态人体检测能力、高灵敏度以及强抗干扰能力,为智能灯光控制带来了未有的创新。本文将深入探讨雷达人体感应器的技术原理、应用场景以及其在......
  • Netty服务端代码模板
    /***Echoesbackanyreceiveddatafromaclient.*/publicfinalclassEchoServer{staticfinalintPORT=Integer.parseInt(System.getProperty("port","8007"));publicstaticvoidmain(String[]args)throwsException{......