Linux系统管理:引导过程与系统管理(内含故障修复实验)

前言:

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

从CentOS7版本开始,系统启动和服务管理器都交给systemd进行管理

一、引导过程总览

Linux操作系统的引导过程一般包括以下几个阶段:
在这里插入图片描述
1、开机自检:
服务器开机后将根据主板BIOS中的设置对CPU、内存等硬件设备进行初步检测,并初始化部分硬件,建成完成后会将系统的控制权,一般都会已交给本机的硬盘。

2、MBR 引导:
从本机硬盘中启动系统时,首先根据硬盘第一个扇区中的MBR设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单。MBR与我们的正常开机息息相关,所以为了以备不时之需我们还需是对MBR提前备份。

3、GRUB 菜单:
选择加载哪个系统、模式(安全、急救模式)

系统控制权传递到GRUB之后,会对我们需要的系统进行选择,然后加载相关系统的内核文件。

4、加载linux 内核与内存文件系统:
系统控制权此时到了内核,程序引导器会从本地硬盘中加载内核以及内存文件系统。

5、init进程初始化

加载硬件驱动以及初始化过程(加载全部驱动)

内核与文件系统由内存文件系统切换至系统根文件系统,并重新运行/sysroot.systemd。启动默认图形或字符终端,最后等待用户登录。

二、init进程

Linux系统中的进程(运行中的程序)使用的数字进行标记,每个进程的身份标记号称为PID。在引导Linux系统的过程中,“sbin/init“是内核第一个加载的程序,因此init进程对应的PID号永久为1。

在CentOS 7中我们可以查看一下init:

[root@localhost ~]# which init
/usr/sbin/init
[root@localhost ~]# ls -l /sbin/init
lrwxrwxrwx. 1 root root 22 10月 24 08:40 /sbin/init -> ../lib/systemd/systemd

可见/sbin/init是一个指向/lib/systemd/systemd的软链接文件,所以systemd的PID号也永远为1,是系统第一个进程。

三、Systemd进程
3.1 Systemd简介:

Systemd在CentOS 7中提供了更优秀的框架以表示系统服务间的依赖关系,实现了系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果。

Systemd的目标时尽可能启动更少的进程,尽可能将更多的进程并行启动。同时Systemd尽可能减少对Shell脚本的依赖。

CentOS 7中 Systemd进程取代init进程,主要体现在service和chkconfig命令上,在CentOS 7中我们经常使用Systemctl代替service和chkconfig两个命令。

systemd是系统第一个进程。对应的PID号永远为1,

3.2 Systemd单元类型:

在这里插入图片描述

3.3 运行级别所对应的Systemd目标(CentOS 7)

在这里插入图片描述

四、模拟故障及修复
4.1 修复MBR扇区故障

常见故障原因:

病毒、木马等造成的破坏

不正确的分区操作、磁盘读写误操作

故障现象:

找不到引导程序,启动终端

无法加载操作系统,开机后黑屏

解决思路:

应提前做好备份文件

以安装光盘引导进入急救模式

从备份文件中恢复

实验环境:

编辑虚拟机CD/DVD,载入镜像,开启连接
在这里插入图片描述

添加一块磁盘sdb,建立分区
在这里插入图片描述
格式化分区,创建挂载点/aaa,将sdb1挂载到挂载点

[root@localhost ~]# mkfs.xfs /dev/sdb1  (格式化sdb1分区)
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=1310656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242624, 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
[root@localhost ~]# mount /dev/sdb1 /aaa (将sdb1挂载到/aaa目录)
[root@localhost ~]# df -hT    (查看挂载点)
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda2      xfs        20G  4.3G   16G   22% /
devtmpfs       devtmpfs  898M     0  898M    0% /dev
tmpfs          tmpfs     912M     0  912M    0% /dev/shm
tmpfs          tmpfs     912M  9.0M  903M    1% /run
tmpfs          tmpfs     912M     0  912M    0% /sys/fs/cgroup
/dev/sda5      xfs        10G   41M   10G    1% /home
/dev/sda1      xfs       6.0G  174M  5.9G    3% /boot
tmpfs          tmpfs     183M   12K  183M    1% /run/user/42
tmpfs          tmpfs     183M     0  183M    0% /run/user/0
/dev/sdb1      xfs        20G   33M   20G    1% /aaa   (以上为挂载点信息)

因为引导文件在sda中占有首部512字节的空间,所以我们先做一个备份,复制此空间提取到/aaa目录下,并生成一个sda.mbr.bak承载这部分资料。示例:

[root@localhost ~]# dd if=/dev/sda of=/aaa/sda.mbr.bak bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000805887 秒,635 kB/秒

提取/dev/zero(不用的软件)覆盖sda1头部512字节的空间(模拟MBR代码损坏)

[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000473292 秒,1.1 MB/秒

重启:reboot

[root@localhost ~]# init 6

重启时我们可见,因MBR引导代码“损坏”,无法加载到系统。这里我们重启虚拟机,如下图:
在这里插入图片描述

在读条过程中,按“ESC”进入Boot Menu (启动菜单),因为我们的镜像是存放在虚拟光驱中,所以我们在这里从CD-ROM开始引导。
在这里插入图片描述
在这里插入图片描述
在此界面我们选择进入急救模式,如图:

在这里插入图片描述

这里我们选择第二个
在这里插入图片描述

选择1 Continue,进入系统基本的镜像模式,这里我们进入了基本的Shell终端模式,我们需要在这里进行操作修复。
在这里插入图片描述
重启后可以正常进入,已经将MBR故障修复。
在这里插入图片描述

总结:我们在实际生活中最好养成备份重要文件的习惯,如需经常更换工作场所,可以备份到U盘中。

4.2 修复GRUB引导故障

常见故障原因

MBR中的GRUB引导程序遭到破坏

grub.conf文件丢失,引导配置有误

故障现象

系统引导停滞,显示“grub>”提示符

解决思路

尝试手动输入引导命令(通常不用。。。)

进入急救模式,重写或者从备份中恢复grub.conf

向MBR扇区中重建grub程序

实验环境:编辑虚拟机CD/DVD,载入镜像,开启连接(同4.1)

GRUB配置文件位置:
在这里插入图片描述

删除grub.conf文件模拟破坏或丢失的故障
在这里插入图片描述

重启时在此界面无法正常进行
在这里插入图片描述

再次重新启动,进入Boot启动菜单,重复实验1的步骤,进入到其基本的Shell终端模式。
进行修复,过程及含义如图:
在这里插入图片描述
重启后可以正常进入,已经将GRUB故障修复。
在这里插入图片描述

4.3 模拟遗忘root用户密码

常见故障原因:

遗忘root用户的密码

故障现象

无法进行需要root权限的管理操作

若没有其他可用账号,将无法登录系统

解决思路

进入急救模式,重设密码

实验环境:编辑虚拟机CD/DVD,载入镜像,开启连接(同4.1))

再次重新启动,进入Boot启动菜单,重复实验1的步骤,进入到其基本的Shell终端模式。然后我们加载镜像系统并修改密码,如图:

在这里插入图片描述
重启后使用修改后的密码直接登录。

五、系统服务控制及切换运行级别(使用systemd管理)
5.1 系统服务控制

常用方式:

systemctl 控制类型 服务名称

常用控制类型:

start:启动

stop:停止

restart:重新启动 (重新启动,会中断服务,相当于先stop再start)

reload:重新加载 (重新加载配置文件不会中断服务,所以相对restart更安全)

status:查看服务状态

我们针对httpd进行控制,例如:

[root@localhost ~]# systemtcl start httpd
[root@localhost ~]# systemtcl stop httpd
[root@localhost ~]# systemtcl restart httpd
[root@localhost ~]# systemtcl reload httpd
5.2 查看及切换运行级别

查看运行级别:

runlevel 命令

systemctl工具

临时切换运行级别

init命令

systemctl工具

我们刚登陆时(默认登陆时为图形界面):示例

[root@localhost ~]# runlevel
N 5  
(因为我们刚登陆,所以第一个是N,代表没有任何在此之前的运行级别)

我们先使用“init 3"的方式切换运行级别,进入字符界面输入需要切换的用户,然后输入密码,最后使用init5切换到图形界面:
在这里插入图片描述
使用systemctl 查看当前运行级别:

命令:systemctl get-default,示例:

[root@localhost ~]# systemctl get-default
graphical.target  (图形化界面)

使用systemctl切换运行级别的方式:

使用systemctl isolate mult.user.target切换到字符界面(等同于init3)使用systemctl isolate graphical.target切换到图形界面。

六、系统优化管理工具(开机自启)

ntsysv工具

提供一个交互式,可视化窗口(伪图形化界面)

可以在字符终端运行

便于集中管理多个服务

systemctl 工具

不提供交互式、可视化窗口

管理单个服务效率更高

我们先用"netstat -ntap"查看当前正在运行的服务及端口

netstat:查看当前正在运行的端口

n:以数字形式表示

t:TCP协议

a:所有

p:协议

示例:

[root@localhost ~]# netstat -natp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1373/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1032/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1031/cupsd          
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1299/master         
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::22                   :::*                    LISTEN      1032/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      1031/cupsd          
tcp6       0      0 ::1:25                  :::*                    LISTEN      1299/master 

其中有一个sshd服务,这是支持远程连接的服务,之后我们演示针对这个服务进行管理。

最后四行是IPV6的地址。

这里我们先通过伪终端的形式查看一下sshd的状态,命令如下:

[root@localhost ~]# ntsysv

进入伪终端,找到sshd.service:

在这里插入图片描述
ntsysv管理方式:

"*" 代表开机自启动

按“空格”控制开启或关闭开机自启动功能

Tab键 切换到选项(确定 ,取消)

我们也可以通过systemctl 对开机启动项进行查询和管理:

查看系统服务的启动状态:

systemctl is-enabled (服务名称)

设置系统服务的启动状态:

systemctl enable/disable 服务名称

示例:

[root@localhost ~]# systemctl is-enabled sshd (查询sshd服务启动状态)
enabled   (状态为开机自启)
[root@localhost ~]# systemctl disable sshd (关闭sshd开机自启)
Removed symlink /etc/systemd/system/multi-user.target.wants/sshd.service.
[root@localhost ~]# systemctl is-enabled sshd (查询)
disabled  (以关闭开机自启)
[root@localhost ~]# systemctl enable sshd (重新开启)
Created symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib/systemd/system/sshd.service.
[root@localhost ~]# systemctl is-enabled sshd
enabled  (以恢复开机自启)

总结:

在日常工作或学习中,我们需要养成一个备份重要文件的习惯,同时备份或将我们的系统镜像刻录在U盘上,在进行故障修复的过程中,我们往往优先进入急救模式,进入系统的基本终端模式,然后根据情况修复故障。

发布了48 篇原创文章 · 获赞 46 · 访问量 6626

猜你喜欢

转载自blog.csdn.net/weixin_45726050/article/details/103081132