Linux第八章 引导过程及服务,MBR分区修复、GRUB分区修复和修改密码操作

目录

一、引导过程

 1、开机自检

2、MBR引导

3、GRUB菜单

4、加载内核(kernel)

5、init进程初始化

二、服务

1、systemd服务

2、系统服务类型

3、系统服务控制

三、修复MBR分区

方法一

方法二

四、修复grub分区

五、修改密码

1、借助光驱

2、不借助光驱

第一种做法

第二种做法


一、引导过程

引导过程共五步,如下图:

 1、开机自检

        开机自检:加电检测硬件是否有故障,如果没有故障,就去bios中设置的第一启动项找操作系统。

硬件启动POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘等硬件情况的检测

主板的ROM:BIOS,Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自举程序等

2、MBR引导

        MBR引导:第一个扇区的前446字节存放grub程序的第一阶段,引导硬件找到操作系统(完整的grub程序)。

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

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

3、GRUB菜单

        GRUB菜单:根据grub.cfg配置文件找到操作系统。

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

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

4、加载内核(kernel)

        加载内核:找到操作系统后,激活操作系统。  

kernel 实现进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能等功能

内核设计流派

  • 宏内核(monolithic kernel):又称单内核和强内核,Unix,Linux把所有系统服务都放到内核里,所有功能集成于同一个程序,分层实现不同功能,系统庞大复杂,Linux其实在单内核内核实现了模块化,也就相当于吸收了微内核的优点。

  • 微内核(micro kernel):Windows,Solaris,HarmonyOS简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护,每种功能使用一个单独子系统实现,将内核功能移到用户空间,性能差。

5、init进程初始化

        init进程初始化:启动程序。

        祖宗进程:CentOS  7   systemctl;CentOS  6     init

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

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

        传统init依赖于串行执行Shell 脚本启动服务,导致效率低下,系统启动速度较慢——排队; systemd能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度许多进程一起上。

二、服务

1、systemd服务

Linux运行级别:0、1、2、3、4、5、6

运行级别Systemd的target说明
0target关机状态,使用该级别时将会关闭主机
1rescue.target单用户模式,不需要密码验证即可登录系统
2multi-user.target用户定义/域特定运行级别。相比较级别3,属于阉割版级别3
3multi-user.target字符界面的完整多用户模式,大多数服务器主机运行在此级别
4multi-user.target用户定义/域特定运行级别。保留,没用过,默认等同于3
5graphical.target图形化界面的多用户模式,提供了图形化桌面操作环境
6reboot.target重新启动,使用该级别将会重启主机

systemctl        get-default

# 获得当前的运行级别


systemctl        set-defaul        multi-user.target

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

# 设置默认的运行级别为multi-user


systemctl        islate        multi-user.target

#在不重启的情况下,切换到运行级别multi-user下

systemctl         isolate        graphical.target

# 在不重启的情况下,切换到图形界面下

Systemd新特性

  • 系统引导时实现服务并行启动

  • 按需启动守护进程

  • 自动化的服务依赖关系管理

  • 同时采用socket式与D-Bus总线式激活服务

  • socket与服务程序分离

  • 向后兼容sysv init脚本

  • 使用systemctl 命令管理,systemctl命令固定不变,不可扩展,非由systemd启动的服务,

  • systemctl无法与之通信和控制

  • 系统状态快照

systemd 核心概念:unit

unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息

2、系统服务类型

单元类型扩展名说明
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、系统服务控制

systemctl        控制类型        服务名称

控制类型:

        start:启动

        stop:停止

        restart:重新启动

        reload:重新加载

        status:查看服务状态

        在Linux系统中启动或关闭服务最方便的就是使用systemctl命令,当然编译安装的服务程序,需要手动写配置文件,才可以使用systemctl命令启动或关闭。

        systemctl命令能够启动哪些服务,可以在/etc/systemd/system下看到,/etc/systemd/system下存放的都是各种服务的配置文件,借助systemctl命令进行对其管理,更加方便。

        查看nginx服务的配置文件:

service unit file配置文件通常由三部分组成:
[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
[Service]:与特定类型相关的专用选项;此处为Service类型
[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项

Unit段的常用选项:
Description:描述信息
After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
Wants:依赖到的其它units,弱依赖
Conflicts:定义units间的冲突关系

Service段的常用选项:
Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
EnvironmentFile:环境配置文件
ExecStart:指明启动unit要运行命令或脚本的绝对路径
ExecStartPre: ExecStart前运行
ExecStartPost: ExecStart后运行
ExecStop:指明停止unit要运行的命令或脚本
Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
RestartSec: 设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指
定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"。
PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录

Install段的常用选项:
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的相关服务

三、修复MBR分区

修复mbr分区的方法有两种

1、将mbr分区内容第一个分区备份到另一块硬盘上,然后在mbr分区损坏之后,进入单用户模式,在单用户模式中,将备份拷贝到原mbr文件中,最后重启即可。

2、将mbr分区内容备份到其他主机中,通过网络进行恢复。

方法一

步骤:

本实验是人为损坏mbr分区后在恢复的所有步骤

1)首先加一块硬盘,格式化并挂载在某个文件中

 2)备份mbr分区内容到新硬盘上

dd     if=/dev/sda       of=/mnt/mbr.bak        count=1                bs=512

          从哪复制          复制到哪去          复制几次     复制多少内容,不写单位默认是字节

3)损坏mbr分区的内容

 dd     if=/dev/zero       of=/dev/sda        count=1                bs=512

 4)重启后进入单用户模式

 5)创建文件夹,将硬盘挂载到新文件夹上

mkdir        bak

mount        /dev/sdb1        /bak

6)将硬盘中备份的mbr文件拷贝到/dev/sda中,然后重启即可修复 

dd        if=/bak/mbr.bak        of=/dev/sda        count=1        bs=512

方法二

步骤如下:

1)首先将mbr分区内拷贝到一个空文件中,再将拷贝的文件存储到另一台主机中

dd        if=/dev/sda        of=/data/mbr.bak        coun=1        bs=512


scp        /data/mbr.bak        另一台主机的IP地址:/mnt

 2)损坏mbr分区内容并重启

 dd     if=/dev/zero       of=/dev/sda        count=1                bs=512

 3)进入急救模式,并输入1

 

  

4)查看自己的网卡,并将网卡配ip地址(ip地址需要与另一台主机同一网段)

5)从另一台主机上将文件拷问回来

scp        另一台主机的IP地址:/mnt/mbr.bak        .

将备份文件拷贝到当前目录下

 6)将拷贝回来的文件写入到mbr分区中,然后重启即可

dd        if=/mbr.bak        of=/dev/sda        count=1        bs=512

四、修复grub分区

步骤如下:

1)模拟grub分区损坏,删除grub.cfg文件

rm   -rf     /boot/grub2/grub.cfg 

 2)重启进入急救模式,输入1

在下面这个界面按“esc”键进入,否则进入不了急救模式,且模拟器上这个界面只有0.5秒 

然后在下方界面选择CD-ROM  Drive

  

  

3)进入急救模式后,更改环境

chroot    /mnt/sysimage

 4)重新建立和加载sda分区

grub2-install         /dev/sda

 5)重新构建grub菜单配置文件

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

6)重启

五、修改密码

修改密码的方式也有两种,一种借助光驱,另一种不借助光驱。

1、借助光驱

chroot /mnt/sysimage
#进入急救模式后,更改环境
passwd
#修改密码

2、不借助光驱

不借助光驱有两种做法

第一种做法

1)永久关闭selinux

vim        /etc/selinux/config 

2)启动时任意键暂停启动

3)按e键进入编辑模式

 4)将光标移动linux 开始的行,添加内核参数 rd.break,然后按ctrl-x启动

 5)输入命令修改密码

chroot /sysroot
passwd root
#如果SELinux是启用的,才需要执行下面操作,如查没有启动,不需要执行
touch /.autorelabel

exit
reboot

第二种做法

 1)永久关闭selinux

vim        /etc/selinux/config 

2)启动时任意键暂停启动,按e键进入编辑模式

 3)将光标移动linux 开始的行,将ro 及后面的改为 rw init=/sysroot/bin/sh

 4)ctrl + x启动

5) 输入命令,修改密码,重启

chroot    /sysroot
passwd    root
#如果SELinux是启用的,才需要执行下面操作,如查没有启动,不需要执行
touch    /.autorelabel

exit
reboot

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值