引导过程和服务控制

简介: 引导过程和服务控制

引导过程和服务控制

一、Linux操作系统的开机过程

1.1 开机自检

开机后,根据BIOS 中的设置对 CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权给本机硬盘

检测出第一个能够引导系统的设备,比如硬盘或者光驱

1.2 MBR引导

当本机硬盘启动系统时,从硬盘的第一个扇区中的MBR (主引导记录)的设置,将系统控制权交给包含操作系统引导文件的分区或者直接根据MBR记录中的引导信息调用启动菜单(grub)

运行放在MBR (主引导记录)扇区里的启动grub的引导程序

1.3 grub菜单

多系统引导器程序,将启动的菜单显示给用户选择,根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核

注意:

  • Centos 7采用的是 grub2 引导程序
  • grub引导程序通过读取grub配置文件 /boot/grub2/grub.cfg ,来获取内核和镜像文件系统的设置和路径位置

1.4 加载内核

Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源的分配与调度

Centos 7系统中,默认的内核文件位于 “/boot/vmlinuz-3.10.0-693.e17.x86_64”

此时系统控制权转交给进程初始化

总结:把内核和相关的系统镜像文件加载到内存中

1.5 进程初始化

Linux内核将系统中的 /sbin/init 程序加载到内存中,完成整个系统的初始化

加载硬件驱动,检测进入操作系统的必须要有的程序,加载到内存中运行

注意:CentOS 6系统的第一个进程是init进程,CentOS 7的第一个进程是systemd进程

二、系统初始化进程

2.1 init

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

2.2 systemd

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

2.3 init与systemd的区别

init是串行启动shell脚本

systemd是并行启动,而且可以按需启动

2.4 systemd的单元类型

image.png

三、服务控制

3.1 systemctl

[root@localhost ~]# Systemctl   控制类型   服务名称

控制类型:

start 启动

stop 停止

restart 重新启动

reload 重新加载

status 查看服务状态

enable 服务开机自启

disable 关闭服务开机自启

例:

[root@localhost ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 三 2023-05-10 16:25:41 CST; 22s ago
     Docs: man:firewalld(1)
 Main PID: 63435 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─63435 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...name.
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...name.
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 三 2023-05-10 16:26:16 CST; 1s ago
     Docs: man:firewalld(1)
  Process: 63435 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 63435 (code=exited, status=0/SUCCESS)
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...name.
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...name.
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:25:41 localhost.localdomain firewalld[63435]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:26:15 localhost.localdomain systemd[1]: Stopping firewalld - dynamic firewall daemon...
5月 10 16:26:16 localhost.localdomain systemd[1]: Stopped firewalld - dynamic firewall daemon.
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# systemctl start firewalld.service 
[root@localhost ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 三 2023-05-10 16:26:24 CST; 2s ago
     Docs: man:firewalld(1)
 Main PID: 63633 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─63633 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
5月 10 16:26:25 localhost.localdomain firewalld[63633]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:26:25 localhost.localdomain firewalld[63633]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:26:25 localhost.localdomain firewalld[63633]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:26:25 localhost.localdomain firewalld[63633]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...name.
5月 10 16:26:25 localhost.localdomain firewalld[63633]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...name.
5月 10 16:26:25 localhost.localdomain firewalld[63633]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:26:25 localhost.localdomain firewalld[63633]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:26:25 localhost.localdomain firewalld[63633]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:26:25 localhost.localdomain firewalld[63633]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
5月 10 16:26:25 localhost.localdomain firewalld[63633]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -w --table filte...in?).
Hint: Some lines were ellipsized, use -l to show in full.

3.2 运行级别

3.2.1 运行级别所对应的systemd目标

image.png

3.2.2 查看运行级别

[root@localhost ~]# runlevel 
N 5
## N:表示到目前为止没有切换过运行级别
## 5:表示现在的运行级别

3.2.4 查询系统默认的运行级别

[root@localhost ~]# systemctl get-default 
graphical.target

3.2.5 更改系统默认的运行级别

[root@localhost ~]# systemctl set-default multi-user.target 
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
[root@localhost ~]# systemctl get-default 
multi-user.target

也可用 init + 级别的数字 如:init 0 //关机

四、实验

4.1 修复MBR扇区故障

4.1.1 创建分区

[root@localhost /]# lsblk                 //查看分区情况
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0  953M  0 part /boot
└─sda2            8:2    0 51.2G  0 part 
  ├─centos-root 253:0    0 46.6G  0 lvm  /
  └─centos-swap 253:1    0  4.7G  0 lvm  [SWAP]
sdb               8:16   0   30G  0 disk 
sdc               8:32   0   20G  0 disk 
sdd               8:48   0   20G  0 disk 
sde               8:64   0   20G  0 disk 
sdf               8:80   0   20G  0 disk 
sdg               8:96   0   20G  0 disk 
sr0              11:0    1  4.2G  0 rom  /run/media/root/CentOS 7 x86_64
[root@localhost /]# fdisk /dev/sdb            //创建分区
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xb50ac281 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-62914559,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-62914559,默认为 62914559):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost /]# lsblk               //查看分区是否创建成功
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0  953M  0 part /boot
└─sda2            8:2    0 51.2G  0 part 
  ├─centos-root 253:0    0 46.6G  0 lvm  /
  └─centos-swap 253:1    0  4.7G  0 lvm  [SWAP]
sdb               8:16   0   30G  0 disk 
└─sdb1            8:17   0   10G  0 part    //创建成功 
sdc               8:32   0   20G  0 disk 
sdd               8:48   0   20G  0 disk 
sde               8:64   0   20G  0 disk 
sdf               8:80   0   20G  0 disk 
sdg               8:96   0   20G  0 disk 
sr0              11:0    1  4.2G  0 rom  /run/media/root/CentOS 7 x86_64

4.1.2 格式化

[root@localhost /]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

4.1.3 挂载

目的:把sda中第一个扇区的MBR文件备份到sdb1中

[root@localhost /]# mkdir /data         //创建挂载的目录
[root@localhost /]# mount /dev/sdb1 /data/    //将sdb1挂载到/data/
[root@localhost /]# df -h           //查看是否挂载成功
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   47G  4.9G   42G   11% /
devtmpfs                 969M     0  969M    0% /dev
tmpfs                    984M     0  984M    0% /dev/shm
tmpfs                    984M  9.1M  975M    1% /run
tmpfs                    984M     0  984M    0% /sys/fs/cgroup
/dev/sda1                950M  179M  772M   19% /boot
tmpfs                    197M   32K  197M    1% /run/user/0
/dev/sr0                 4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1                 10G   33M   10G    1% /data

4.1.4 将主引导分区记录的文件复制到data下

[root@localhost /]# dd if=/dev/sda of=/data/mbr.bak bs=512 count=1    
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000508755 秒,1.0 MB/秒
[root@localhost /]# cd /data/
[root@localhost data]# ls       //查看是否复制成功
mbr.bak

4.1.5 用零文件吧第一个扇区破坏掉

[root@localhost data]# dd if=/dev/zero of=/dev/sda bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000292731 秒,1.7 MB/秒
[root@localhost data]# init 6   //重启

4.1.6 回到虚拟机,开始修复故障

选择Troubleshooting

image.png

选择Rescue a CentOS system


image.png

image.png

image.png

再回车

image.png

挂载带有备份文件的分区

image.png

恢复备份数据

dd if=/backupdir/mbr.bak of=/dev/sda

image.png

之后 reboot 重启就可以了

4.2 修复grub引导故障

4.2.1 删除grub.cfg

[root@localhost ~]# rm -rf /boot/grub2/grub.cfg 
[root@localhost ~]# reboot 

4.2.2 修复

image.png

重启虚拟机的过程中立刻按下Esc键,进入以下界面

image.png

选择CD-ROM Drive,回车

image.png

进入以下界面,选择Troubleshooting

image.png

选择Rescue a CentOS system

image.png

输入1,回车,回车

image.png

进入急救模式,加载光盘镜像,切换到系统根环境

chroot /mnt/sysimage


image.png

重新将grub引导程序安装到第一块硬盘 ( /dev/sda)的MRB扇区

grub2-install /dev/sda

image.png

重新构建grub菜单的配置文件

grub2-mkconfig -o /boot/grub2/grub.cfg

image.png

退出系统根目录环境,重启

image.png

4.3 修改root密码

4.3.1 进入急救模式

重启虚拟机时快速按下Esc

image.png

image.png

image.png

image.png

image.png

目录
相关文章
|
编解码 IDE 算法
2023年电赛---运动目标控制与自动追踪系统(E题)发挥题思路
2023年电赛---运动目标控制与自动追踪系统(E题)发挥题思路
553 0
|
2月前
|
UED
软件开发常见流程,好的用户体验,智能引导助手,介绍软件相关操作,会画个键盘,对键盘的相关键进行标注,效果动态展示图怎样画????弄一个图标,相关介绍
软件开发常见流程,好的用户体验,智能引导助手,介绍软件相关操作,会画个键盘,对键盘的相关键进行标注,效果动态展示图怎样画????弄一个图标,相关介绍
|
24天前
|
人工智能 JSON 前端开发
ProChat 1.1 使用问题之用 chatRef 获取 ProChat 实例以实现程序化控制,如何操作
ProChat 1.1 使用问题之用 chatRef 获取 ProChat 实例以实现程序化控制,如何操作
|
3月前
|
监控 Serverless 开发工具
函数计算产品使用问题之要确保服务能在后台持续运行,而不依赖于WebUI是否打开,该怎么操作
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
10月前
|
异构计算
【FPGA】基本实验步骤演示 | Verilog编码 | 运行合成 | 设备/引脚分配 | 综合/实施 | 设备配置 | 以最简单的逻辑非为例
【FPGA】基本实验步骤演示 | Verilog编码 | 运行合成 | 设备/引脚分配 | 综合/实施 | 设备配置 | 以最简单的逻辑非为例
80 0
|
4月前
|
存储 开发工具 数据库
认识HIS系统 HIS系统的主要功能解释说明
HIS系统即医院信息系统(全称为Hospital information System) ,是指利用计算机软硬件技术和网络通信技术等现代化手段,对医院及其所属各部门的人流、物流、财流进行综合管理,对在医疗活动各阶段产生的数据进行采集、存储、处理、提取、传输、汇总,加工形成各种信息,从而为医院的整体运行提供全面的自动化管理及各种服务的信息系统。
341 5
2023年电赛---运动目标控制与自动追踪系统(E题)OpenART mini的代码移植到OpenMV
2023年电赛---运动目标控制与自动追踪系统(E题)OpenART mini的代码移植到OpenMV
183 0
|
数据安全/隐私保护
移动台辅助软切换软切换(SoftSwitch)
移动台辅助软切换软切换(SoftSwitch)
|
数据可视化 Linux 网络安全
引导过程与服务控制(超详细的排障图解)(下)
1、Linux操作系统引导过程 1.1 引导过程总览 linux引导过程一般包括以下几个阶段: 开机自检 、 MBR 引导 、GRUB 菜单 、加载Linux内核 、 init 进程初始化
127 0