引导过程和服务控制

目录

一.Linux操作系统的引导过程

1.开机自检(BIOS):

2.MBR引导:

3.启动GRUB菜单:

4.加载Linux内核

5.init进程初始化

二.系统初始化进程

1.init 进程

2.Systemd 

2.1 systemd 概述

2.2 Systemd 与 传统 SysVinit 的比较

3.Systemd 单元类型

4.运行级别所对应的 Systemd 目标

三.排除启动类故障

1.修复MBR扇区故障

2.故障现象

3.解决思路

4.操作实验

5.遗忘 root 用户的密码,修改密码

第一种:

第二种:

三.系统服务控制

1.控制类型

2.Linux的运行级别

3.系统服务的启动和控制

一.Linux操作系统的引导过程

上图是操作系统引导的五个主要步骤

1.开机自检(BIOS):

服务器开机以后,会根据主板BIOS中的设置对CPU、内存、显卡、等设备进行检测,检测成功

后,可以找出可以引导系统的设备,大多是硬盘设备;然后移交控制权。

2.MBR引导:

从本地硬盘启动系统后,根据硬盘第一个扇区中MBR(主引导记录)的设置,会根据MBR 记录中

的引导信息调用启动GRUB菜单(CentOS-7采用的是grub2启动引导器)。

3.启动GRUB菜单:

GRUB引导程序通过读取GRUB配置文件(文件位置/boot/grub2/grub.cfg),来获取内核和镜像文件系统的设置和路径位置,并在屏幕显示GRUB菜单页面。

4.加载Linux内核

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

5.init进程初始化

Linux内核会将 init 进程加载到内存中运行,并把 init 进程作为系统的第一个进程,负责完成整个系统的初始化;最后等待用户进行登录。

二.系统初始化进程

1.init 进程

(1)由Linux 内核加载运行  /sbin/init  程序

(2)init   进程是系统中的第一个进程,是所有进程的父进程

(3)init  进程的PID(进程标记)号永远为1

2.Systemd 

2.1 systemd 概述

(1)Systemd 是Linux操作系统的一种 init 软件

(2)CentOS 7中采用全新的 Systemd 启动方式,取代传统的SysVinit 

(3)CentOS 7中运行的第一进程是 /lib/systemd/systemd

拓展:pstree 是一个在 Unix 和类 Unix 系统(如 Linux)中常用的命令行工具,用于显示进程的树状结构。

pstree -p:显示每个进程的 PID(进程 ID)。
pstree -u:显示每个进程的所属用户

2.2 Systemd 与 传统 SysVinit 的比较

传统SysVinit(CentOS7以前的版本):对于进/程的管理是串行执行 Shell 脚本启动服务,容易出现阻塞情况,导致效率低下,系统启动速度较慢。

Systemd(CentOS7开始的版本):能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度。

3.Systemd 单元类型

单元类型扩展名说明
Service.service

描述一个系统服务

Socket.socket描述一个进程间通信的套接字
Device.device描述一个内核识别的挂载点
Automount.automount描述一个文件系统的自动挂载点
Swap.swap描述一个内存交换设备或交换文件
Path.path描述一个文件系统中的文件或目录
Timer.timer描述一个定时器(用于实现类似cron的调度任务)
Snapshot.snapsho用于保存一个 systemd 的状态
Scope.scope使用 systemd 的总线接口一编程的方式创建外部进程
Slice.slice描述居于 Cgroup 的一组通过层次组织的管理系统进程
Target.target描述一组 systemd 的单元

常用的是 .service 和 .target 两种单元类型 

拓展:套接字:应用程序直接的数据连接文件;套接字格式:ip:port    ftp  IP地址:端口号

4.运行级别所对应的 Systemd 目标

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

拓展:

init 0 关机命令;init 6 重启命令;init 3 可以切换到字符界面

三.排除启动类故障

1.修复MBR扇区故障

(1)病毒、木马等造成的破坏

(2)不正确的分区操作、磁盘毒读写误操作 

2.故障现象

(1)找不到引导程序,启动中断

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

3.解决思路

(1)应提前作好备份文件

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

(3)从备份文件中恢复

4.操作实验

(1)第一种:利用提前备份的文件进行复原系统

【1】先做备份,添加一块新硬盘

1.添加一块硬盘后重启主机,作为备份使用,先切换到/opt/目录中创建mbr-bak
[root@192 ~]# cd /opt/
[root@192 opt]# mkdir mbr-bak
[root@192 opt]# ls -l
总用量 0
drwxr-xr-x. 2 root root 21 4月  17 19:42 mbr-bak
drwxr-xr-x. 2 root root  6 10月 31 2018 rh

2.对磁盘进行分区后,格式化磁盘后,创建 xfs 文件系统,在进行挂载/opt/mbr-bak/ 
磁盘分区直接全部默认,保存即可,不用创建分区类型ID

[root@192 ~]# mkfs -t xfs /dev/sdb1               #格式化并创建文件系统xfs  
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@192 ~]# mount /dev/sdb1 /opt/mbr-bak/       #将 /opt/mbr-bak 挂载到磁盘上
[root@192 ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs                   tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs                   tmpfs     1.9G   13M  1.9G    1% /run
tmpfs                   tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        36G  4.4G   32G   13% /
/dev/sda1               xfs       509M  181M  329M   36% /boot
tmpfs                   tmpfs     378M   20K  378M    1% /run/user/0
/dev/sr0                iso9660   4.5G  4.5G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1               xfs        20G   33M   20G    1% /opt/mbr-bak

3.对 /dev/ada 中的MBR主引导程序进行复制到 /opt/mbr-bak/mbr.bak 文件中(文件名自取)
[root@192 ~]# dd if=/dev/sda of=/opt/mbr-bak/mbr.bak bs=512 count=1    
记录了1+0 的读入                         #进行复制,大小512字节就即可
记录了1+0 的写出
512字节(512 B)已复制,0.000154789 秒,3.3 MB/秒
[root@192 ~]# cd /opt/mbr-bak/          #切换到指定目录上
[root@192 mbr-bak]# ll -h               #查看文件是否已经复制上
总用量 4.0K
-rw-r--r--. 1 root root 512 4月  17 19:42 mbr.bak   #512字节,复制成功

                             到此文件备份完成

【2】模拟破环文件中的数据

模拟破坏;输入内容到文件/dev/sda 中,将MBR主引导程序覆盖,造成文件丢失
[root@192 mbr-bak]# dd if=/dev/zero of=/dev/sda bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000131934 秒,3.9 MB/秒

破环后,进行重启设备;进入下面界面;发现需要重新安装系统;重启后,进入不了系统。

有光盘和无光盘的界面如下显示:

【3】如果想要恢复系统的方法:操作如下

把光盘挂载到设备中,在界面中选择急救模式;

此后输入重启命令(reboot 或者 init 6)即可;等待一会后就可以进入系统

(2)第二种:利用grub2进行文件恢复

【1】模拟 grub.cfg 文件被误删;不重启没事,重启后进入不了系统

[root@192 ~]# cd /boot/              #进入boot目录
[root@192 boot]# ls                  #查看文件
config-3.10.0-1160.71.1.el7.x86_64                       initramfs-3.10.0-1160.71.1.el7.x86_64kdump.img
efi                                                      symvers-3.10.0-1160.71.1.el7.x86_64.gz
grub                                                     System.map-3.10.0-1160.71.1.el7.x86_64
grub2                                                    vmlinuz-0-rescue-206e0447c56247938052c02b1cdfaa71
initramfs-0-rescue-206e0447c56247938052c02b1cdfaa71.img  vmlinuz-3.10.0-1160.71.1.el7.x86_64
initramfs-3.10.0-1160.71.1.el7.x86_64.img
[root@192 boot]# cd grub2/
[root@192 grub2]# ls
device.map  fonts  grub.cfg  grubenv  i386-pc  locale
[root@192 grub2]# rm -rf /boot/grub2/grub.cfg        #删除指定文件grub.cfg
[root@192 grub2]# ls
device.map  fonts  grubenv  i386-pc  locale

【2】有两种方法可以恢复系统

第一种:手动敲入配置文件里面的配置信息(一般不建议使用,进入后只能手打,无法TAB快速补充)

基本配置如下所示:

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.el7.x86_64.img			#镜像系统文件
grub> boot							#引导boot

第二种:进入急救模式,恢复GRUB引导程序

也有两种方法进入急救模式

第1种:关机选择进入固件

之后就可以进入到急救模式界面

第2种:重启之后快速按 esc 键

进入急救模式后准备修复grub配置文件

之后即可登录账户

5.遗忘 root 用户的密码,修改密码

第一种:

进入急救模式

重启后,正常进入系统,按修改后的密码进入账户

第二种:

在重启之后,进入以下这个界面

CTRL + X 之后进入这个界面,修改root密码即可

如果SELinux没有关闭,则还需要输入这两条命令

touch /.autorelabel
exec /sbin/init

这样子就可以修改root密码了

三.系统服务控制

systemctl 控制类型 服务名称

1.控制类型

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

要确保在 /usr/lib/systemd/system/ 目录中有相关服务的 XXX.service 文件才能查看器服务状态

 (1)systemctl start 服务

[root@192 ~]# systemctl start firewalld          #开启防火墙
[root@192 ~]# systemctl status firewalld         #查看防火墙服务情况 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 三 2024-04-17 23:03:48 CST; 2s ago
     Docs: man:firewalld(1)
 Main PID: 3608 (firewalld)
    Tasks: 2
   CGroup: /system.slice/firewalld.service
           └─3608 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

4月 17 23:03:48 192.168.80.90 firewalld[3608]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
4月 17 23:03:48 192.168.80.90 firewalld[3608]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
4月 17 23:03:48 192.168.80.90 firewalld[3608]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
4月 17 23:03:48 192.168.80.90 firewalld[3608]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...ame.
4月 17 23:03:48 192.168.80.90 firewalld[3608]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...ame.
4月 17 23:03:48 192.168.80.90 firewalld[3608]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
4月 17 23:03:48 192.168.80.90 firewalld[3608]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
4月 17 23:03:48 192.168.80.90 firewalld[3608]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
4月 17 23:03:48 192.168.80.90 firewalld[3608]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
4月 17 23:03:48 192.168.80.90 firewalld[3608]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
Hint: Some lines were ellipsized, use -l to show in full.

 (2)systemctl stop 服务

[root@192 ~]# systemctl stop firewalld           #停止防火墙
[root@192 ~]# systemctl status firewalld         #查看防火墙服务情况
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 三 2024-04-17 23:03:11 CST; 18s ago
     Docs: man:firewalld(1)
  Process: 807 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 807 (code=exited, status=0/SUCCESS)

4月 17 20:42:13 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
4月 17 20:42:13 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
4月 17 20:42:13 localhost.localdomain firewalld[807]: WARNING: AllowZoneDrifting is enabled. This is cons...ow.
4月 17 23:03:11 192.168.80.90 systemd[1]: Stopping firewalld - dynamic firewall daemon...
4月 17 23:03:11 192.168.80.90 systemd[1]: Stopped firewalld - dynamic firewall daemon.
Hint: Some lines were ellipsized, use -l to show in full.

 (3)systemctl restart 服务

[root@192 ~]# systemctl restart firewalld               #重启防火墙(无论开还是关着)
[root@192 ~]# systemctl status firewalld                #查看防火墙服务状态
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 三 2024-04-17 23:04:20 CST; 3s ago
     Docs: man:firewalld(1)
 Main PID: 3805 (firewalld)
    Tasks: 2
   CGroup: /system.slice/firewalld.service
           └─3805 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

4月 17 23:04:20 192.168.80.90 firewalld[3805]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
4月 17 23:04:20 192.168.80.90 firewalld[3805]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
4月 17 23:04:20 192.168.80.90 firewalld[3805]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
4月 17 23:04:20 192.168.80.90 firewalld[3805]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...ame.
4月 17 23:04:20 192.168.80.90 firewalld[3805]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...ame.
4月 17 23:04:20 192.168.80.90 firewalld[3805]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
4月 17 23:04:20 192.168.80.90 firewalld[3805]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
4月 17 23:04:20 192.168.80.90 firewalld[3805]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
4月 17 23:04:20 192.168.80.90 firewalld[3805]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
4月 17 23:04:20 192.168.80.90 firewalld[3805]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -w --ta...n?).
Hint: Some lines were ellipsized, use -l to show in full.

(4)systemctl reload 服务(大部分服务都可以适用,少部分不支持)

(5)systemctl is -active 服务也可以查看服务的开启状态,不过便只能看见开启和关闭状态

[root@192 ~]# systemctl is-active firewalld.service 
active
[root@192 ~]# systemctl stop firewalld
[root@192 ~]# systemctl is-active firewalld.service 
inactive

拓展:

在CentOS-6 及以前的版本使用 servie 命令来查看服务开启和关闭状态

要确保在 /etc/init.d/ 目录中有相关服务的管理脚本文件才能管理服务

2.Linux的运行级别

(1)查看运行级别

runlevel命令   只能查看切换运行级别与当前运行级别
systemctl工具  只能查看默认的运行级别
[root@192 ~]# runlevel
N 5
[root@192 ~]# systemctl get-default 
graphical.target

(2)设置运行级别

init 命令 命令参数是运行级别对应的数字
例如格式
init 3
init 5
systemctl 工具  命令参数是具体的target
[root@192 ~]# systemctl isolate multi-user.target
[root@192 ~]# systemctl set-default graphical.target   #永久设置运行级别
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/graphical.target.
[root@192 ~]# systemctl get-default                #查看运行级别
graphical.target

[root@192 ~]# 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@192 ~]# systemctl get-default 
multi-user.target

和
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
功能是一样的

3.系统服务的启动和控制

(1)ntsysv 系统服务管理工具:

ntsysv          #图形化管理开机自启

ntsysv --level  级别列表

(2)服务开机自启管理

systemctl is-enabled 服务

systemctl  disabled 服务

--now选项可实现立即开启|关闭服务

systemctl is-enabled 服务名[.service]   #查看是否启动
[root@192 ~]# systemctl is-enabled firewalld.service 
enabled

[root@192 ~]# systemctl disable firewalld.service 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[root@192 ~]# systemctl is-enabled firewalld.service 
disabled

(3)chkconfig 工具

chkconfig --add 服务名                                       #服务名就是 /etc/init.d/ 目录下的脚本文件名
chkconfig --level 运行级别列表  服务名  on|off   #开启|关闭服务在哪些运行级别下开机自启
chkconfig --list 服务名                                         #查看自启状态

服务名要和 /etc/init.d 下的脚本名保持一致

(4)扩展知识

永久修改主机名
hostnamectl set-hostname newname
查看主机名的状态
hostnamectl status 

设置系统语言为中文
localectl set-locale LANG=zh_CN.utf8
查看当前系统使用的语言
localectl [status]

字符集编码
ASCII  127个字符   
GBK    中国字符集编码   
UTF-8  万国字符集编码

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值