云计算【第一阶段(21)】Linux引导过程与服务控制

目录

一、linux操作系统引导过程

1.1、开机自检

1.2、MBR引导

1.3、GRUB菜单

[1.4、加载 Linux 内核](#1.4、加载 Linux 内核)

1.5、init进程初始化

1.6、简述总结

[1.7、初始化进程centos 6和7的区别](#1.7、初始化进程centos 6和7的区别)

二、排除启动类故障

2.1、修复MBR扇区故障

[2.1.1、 实验](#2.1.1、 实验)

2.2、修复grub引导故障

2.2.1、实验

2.2.1.1、方法一

2.2.1.2、方法二

2.2.1.3、方法三

2.3、遗忘root用户密码

2.2.3、实验

2.2.3.1、方法一

2.2.3.2、方法二

三、服务控制及切换运行级别

3.1、系统服务控制

3.2、运行级别

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

3.2.2、systemd单元类型

3.2.3、一些命令

3.2.4、扩展一些命令

四、优化启动过程


一、linux操作系统引导过程

1.1、开机自检

服务器主机开机以后,将根据主板 BIOS 中的设置对 CPU(Central Processing Unit,中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。

总结:检测出第一个能够引导系统的设备 比如硬盘或光驱。

1.2、MBR引导

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

总结:运行放在MBR扇区里的启动GRUB引导程序

补充

  1. 加载MBR:一旦选择了硬盘作为启动设备,BIOS/UEFI就会读取硬盘的第一个扇区(MBR)。MBR通常包含启动加载器(boot loader)的代码和分区表(partition table)。

  2. 执行MBR中的代码:MBR中的代码会被加载到内存中并执行。这段代码通常是一个启动加载器(如GRUB、LILO等),也可能是直接指向操作系统引导文件的代码。

    • 启动加载器:如果MBR中的代码是启动加载器(如GRUB),那么它会显示一个启动菜单,让用户选择想要启动的操作系统或内核版本。选择后,启动加载器会加载相应的操作系统引导文件。
    • 直接引导:在某些情况下,MBR中的代码可能直接指向操作系统引导文件的位置,并将其加载到内存中执行。
    • 加载操作系统引导文件 :无论通过哪种方式,最终都会加载操作系统的引导文件(如Linux中的/boot/vmlinuz,Windows中的NTLDRbootmgr等)。
    • 操作系统初始化:操作系统的引导文件会初始化系统,加载内核和其他必要的驱动程序,并最终启动用户空间。

1.3、GRUB菜单

对于 Linux 操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给 GRUB以后,将会显示启动菜单给 用户选择,并根据所选项(或采用默认值)加载 Linux 内核文件,然后将系统控制权转交给内核。需要注意的是,CentOS 7 采用的是 GRUB2 启动引导器

总结:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置。

1.4、加载 Linux 内核

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

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

1.5、init进程初始化

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

总结:加载硬件驱动程序,内核把init进程加载到内存中运行

1.6、简述总结

  1. 开机自检:检测出第一个能够引导系统的设备
  2. MBR 引导:运行放在MBR扇区里的启动GRUB引导程序
  3. GRUB 菜单:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置
  4. 加载 Linux 内核:把内核和镜像文件系统加载到内存中
  5. init 进程初始化:加载硬件驱动程序,内核把init进程加载到内存中运行

1.7、初始化进程centos 6和7的区别

二、排除启动类故障

2.1、修复MBR扇区故障

故障现象

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

故障原因

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

解决思路

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

2.1.1、 实验

分区格式化挂载,我这里犯了一个错,没有格式化就会这样

创建backup文件

挂载

备份MBR

(MBR位于第一块硬盘( /dev/sda) 的第一一个物理扇区处,总共512字节)

模拟损坏

先加载好光盘镜像,重启操作系统

变成这样

故障排除

抢救模式

继续选1

再次按Enter 键后将进入带"sh-4.2#"提示符的Bash Shell环境

这个时候需要重新创建文件夹(之前的文件夹目前用不了),挂载,把之前备份恢复的用上

exit

然后就可以了

2.2、修复grub引导故障

故障现象

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

故障原因

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

解决思路

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

2.2.1、实验

2.2.1.1、方法一

手动输入引导命令(笨拙繁琐,不建议使用)

/boot/grub/目录下的包是用于启动菜单的背景图片及样式
/boot/grub2/grub.cfg
#GRUB配置文件
方法一": 手动输入引导命令(笨拙繁琐,不建议使用)
grub> insmod xfs            #加载指定的模块到内核
grub> linux16 /vmlinuz-3.10.0-693.el7.x86_64 root=UUID=8fd74986-ae66-4ffd-b7d8-a19f2eca7b6f ro rhgb quiet
LANG=zh_CN.UTF-8           #内核的名字及位置等信息
grub> initrd16 /initramfs-3.10.0-693.e17.x86_64.img           #镜像系统文件
grub> boot       #引导boot
2.2.1.2、方法二

进入急救模式,恢复GRUB引导程序

MBR位于第一 块硬盘( /dev/sda) 的第一个物理扇区处,总共512字节,前446字节是主引导记录,分区表保存在MBR扇区中的第447 -510字节中。

引导界面进入急救模式,从备份文件中恢复GRUB引导程序

基本上和MBR恢复一样不再赘述

grub误成写grup注意

2.2.1.3、方法三

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

模拟错误

rm -rf /boot/grub2/grub.cfg

发现

然后一样进入急救模式

切换到系统根环境

chroot /mnt/sysimage

重新将GRUB引导程序安装到第一块硬盘(/dev/sda)的MRB扇区,如果有多个分区可省略

grub2-install /dev/sda

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

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

退出并且重启

2.3、遗忘root用户密码

故障现象

  • 无法进行需要root权限的管理操作
  • 若没有其他可用帐号,将无法登录系统

故障原因

  • 遗忘root用户的密码

解决思路

  • 进入急救模式,重设密码

2.2.3、实验

2.2.3.1、方法一

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

先关机,有

按c,然后退出exit

切换到

chroot /mnt/sysimage

重设root用户密码

passwd root

2.2.3.2、方法二

进入单用户模式修改root密码为例。

重启

按e键

在16那边修改ro 为rw init=sysroot/bin/bash 注意有空格

然后按

ctrl+x进入

切换到

用于更改当前进程的根目录(root directory)到 /sysroot。这通常用于系统恢复、调试或特定环境下的程序运行。

chroot /sysroot

修改语言

LANG=en_US.UFT-8

修改密码

passwd root
exit

init 6

三、服务控制及切换运行级别

3.1、系统服务控制

systemctl 控制类型 服务名称

控制类型

  • start:启动
  • stop:停止
  • restart:重新启动
  • reload:重新加载
  • status:查看服务状态

3.2、运行级别

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

运行级别 Systemd的target 说明
0 shutdown.target 关机状态,使用该级别时将会关闭主机
1 rescue.target 单用户模式,不需要密码验证即可登录系统,多用于系统维护
2 multi-user.target(或特定编号) 用户定义/域特定运行级别。默认等同于3
3 multi-user.target 字符界面的完整多用户模式,大多数服务器主机运行在此级别
4 multi-user.target(或特定编号) 另一个用户定义/域特定运行级别,可能需要特殊配置,默认等同于3
5 graphical.target 图形界面的多用户模式,提供了图形桌面操作环境
6 reboot.target 重新启动,使用该级别时将会重启主机

3.2.2、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的单元

3.2.3、一些命令

Runlevel可以理解为Linux系统的一个"运行阶段"或"模式",用于表示系统当前的状态和服务配置。

显示结果中的两个字符分别表示切换前的目标、当前的目标。若之前尚未切换过运行级别,则第 1 列将显示"N"

查看当前默认运行级别

graphical 电脑图形的

设置永久的运行级别

ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target

或者

切换为字符模式

systemctl isolate multi-user.target 或 init 3

(怎么简单怎么来)

3.2.4、扩展一些命令

永久修改主机名

查看主机名的状态

hostnamectl status

设置系统语言为中文

localectl set-locale LANG=zh_CN.UTF-8

当你使用 localectl set-locale LANG=en_US.UTF-8 命令时,你实际上是在配置 systemd 的本地化设置,这通常会影响那些由 systemd 启动的服务和守护进程的环境变量。但是,对于你的 shell 会话或者当前用户的环境,这通常不会有直接的影响。

$LANG 是一个环境变量,它通常在你的 shell 配置文件(如 .bashrc.bash_profile.zshrc 等,取决于你使用的 shell)中设置,或者通过系统登录时读取的配置文件(如 /etc/profile/etc/environment 等)设置。

查看当前系统使用的语言

localectl [status ]

四、优化启动过程

ntsysv工具

  • 提供一个交互式,可视化窗口
  • 可以在字符终端运行
  • 便于集中管理多个服务

一般不用

打开方式

ntsysv

找到你想要设置的自启动服务,然后按空格键切换其状态,如果前面有"*",表示该服务在开机时会自动启动;如果没有"*",则表示该服务在开机时不会自动启动。

当你完成所有的设置后,按"F12"退出。

系统会提示你是否保存更改,输入"Y"并回车确认保存。

lsystemctl工具

  • 不提供交互式,可视化窗口
  • 管理单个服务效率更高

使用 systemctl 工具与 ntsysv 的功能类似,但是 systemctl 不提供交互式的操作界面,它用 于查询或设置系统服务的默认启动状态。当需要设置某一个服务在当前运行目标中的默认启 动状态时,使用 systemctl 工具会更有效率。使用 systemctl 工具控制服务开机启停的命令 格式如下:

systemctl 控制选项 服务名称 常用的选项有三种:

  • enable:开机自动启动。

  • disable:开机自动关闭。

  • is-enable:查看开机启动状态。

实验

开机自启apache 服务设置为

查看是否自启

apache 服务设置为开机关闭

在当前系统下执行"systemctl list-units --type=service"命令可以查看当前系统中所有已 激活的系统服务

查看开机自启的服务器

相关推荐
yaoxin52112342 分钟前
第二十七章 TCP 客户端 服务器通信 - 连接管理
服务器·网络·tcp/ip
内核程序员kevin44 分钟前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
sinat_384241095 小时前
使用 npm 安装 Electron 作为开发依赖
服务器
朝九晚五ฺ5 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
自由的dream5 小时前
Linux的桌面
linux
xiaozhiwise6 小时前
Makefile 之 自动化变量
linux
Kkooe6 小时前
GitLab|数据迁移
运维·服务器·git
久醉不在酒7 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql
意疏8 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker