RHCE(服务管理和系统启动流程)

一:系统的简介

1:基础

系统启动的时候会运行什么样的程序,什么样的进程什么样的服务,以及得到什么样的桌面,系统开机运行的第一个程序,pid为1,系统的守护进程目的是初始化系统

在rhel7之前,使用init初始化系统

在rhle7之后,使用systemd初始化系统

系统中,如果是d结尾的,那么就表明这是守护进程,在后台一直运行的进程

2:init和systemd区别

1)init属于串行启动,systemd属于并行启动

  a:init从上到下一次启动,如果中间出现了问题,则系统无法启动

  b:systemd按需启动服务,可以一次性同步启动多个服务

2)systemd自动解决服务依赖问题

  a:如果要启动nfs服务,需要先启动rpc-bind mountd,这样就解决了依赖的问题

二:系统的管理(systemctl和systemd)

1:系统单元的管理

在系统中,systemd通过单元来管理不同类型的对象

1)查看系统的服务单元:

也可查看到服务的运行状态,

[root@node1 ~]# systemctl list-units --type service | head -n 5
  UNIT                               LOAD   ACTIVE SUB     DESCRIPTION
  accounts-daemon.service            loaded active running Accounts Service
  atd.service                        loaded active running Deferred execution scheduler
  auditd.service                     loaded active running Security Auditing Service
  avahi-daemon.service               loaded active running Avahi mDNS/DNS-SD Stack 

参数的介绍:
UNIT:服务名

LOAD:是否正确的载入配置文件

ACTIVE:服务的高级状态,一系列进程的状态,服务的最终状态就是他

sub:服务的低级状态,服务进程的状态,exited表示进程已经经历了一次正确的配置载入,等待下一次的运行后,就会变成running

description:服务的描述信息

2)查看系统开机自启的服务

查看服务是否是开机自启的,还有就是服务的默认状态

[root@node1 ~]# systemctl list-unit-files --type 
automount  mount      scope      slice      swap       timer      
device     path       service    socket     target     
[root@node1 ~]# systemctl list-unit-files --type service | head -n 4
UNIT FILE                                  STATE           VENDOR PRESET
accounts-daemon.service                    enabled         enabled
alsa-restore.service                       static          -
alsa-state.service                         static          -

  服务的状态:

    enabled:表示开机自启

    disabled:表示开机不会自启

    static:服务不能自己启动,只能被其他的服务激活启动,nfs服务

    mask:锁定服务,服务不能自己启动,其他服务也不能对其激活启动,mask是为了防止服务之间发生冲突,使用mask对一个服务进行锁定

 

3)管理服务

rhel7之前管理服务与rhel7之后,命令非常不一样

systemctl 动作 服务名称

动作:start,stop,restart,status,reload,enabled,disabled,reload-or-restart(2者之一任选一个),mask(锁定服务),unmask(解锁服务),is-active(服务是否启动的),is-enabled(服务是否开机自启),list-dependencied(查看服务的依赖)

案例:

#查看服务的依赖性
[root@node1 ~]# systemctl list-dependencies httpd | head -n 10
httpd.service
● ├─-.mount
○ ├─httpd-init.service
● ├─system.slice
● └─sysinit.target
●   ├─dev-hugepages.mount
●   ├─dev-mqueue.mount
●   ├─dracut-shutdown.service
○   ├─iscsi-onboot.service


#查看服务是否启动的
[root@node1 ~]# systemctl is-active httpd
active

#查看服务是否开机自启
[root@node1 ~]# systemctl is-enabled httpd
enabled  

2:系统启动目标管理

1:系统启动目标

 系统启动目标就是,系统启动的时候获取什么样的操作界面,也是一种状态,一共0到6个级别,0关机,6重启,5图形化,3是带网络字符页面

系统目标的划分:

graphical.target 图形化的页面

multi-user.target

字符页面

rescue.target 

修复系统页面

 

emergency.targe

 

 修复系统故障的页面

 

2:查看系统启动目标

1)第一种方式,使用runlevel来查看

runlevel可以看到上一次的启动目标和当前的启动目标

[root@node1 ~]# runlevel 
N 5  

 2)第二种方式使用systemctl get-default查看

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

  

3:修改系统的启动目标

1)永久修改

systemctl set-default 启动目标

systemctl set-default multi-user.target
reboot

即可,这个就是永久的修改  

2)临时修改

  init 5 切换到图形页面

  systemctl isolate multi-user.target

  在菜单页面选择第一个按e,在linux这一行,ctlrl+e到末尾,然后输入systemd.uni=图形化类型,ctrl+x就进入里面了

下次重启后,还是会会回复到原来的地方

三:系统启动的流程和查看内核

管理工具:grubby是管理内核的工具

1:系统启动的流程

BIOS:最小化输入输出系统

流程:

1:上电开机

2:BIOS开始自检并且加载硬件

3:BIOS根据启动的顺序选择对应的启动设备

  a:硬盘的,cdrom,网络

4:从硬盘去加载引导代码(引导程序)

  a:引导代码---->>>引导程序--->>>grub2

  b:存放在硬盘的前446个字节(mbr分区的最前面)

5:引导程序加载启动引导分区中配置文件(引导配置文件)

/boot/grub2/grub.cfg

6:grub2会加载内核和initramfs--->>>要挂载根文件系统,然后执行systemd来初始化(启动服务,根据启动目标获取操作页面)

  a:内核不能挂载文件系统,想要挂载文件系统,需要对应的文件系统驱动,需要xfs系列,ext系列

  b:initramfs目的就是为了帮助内核挂载根文件系统,提供文件系统的驱动以及硬件驱动

7:initramfs会执行自己的systemd并且将磁盘上的根文件系统挂载到/sysroot(真正根文件系统挂载到/sysroot)

8:内核就会将initramfs的假根切换为/sysroot(真正的根),然后执行systemd进行初始化系统

9:systemd通过启动目标来得到操作页面(字符页面,图形化页面等)

总结(理解的步骤):

1:MBR前面的446个字节是引导代码也叫做引导程序(grub2),他会去加载initramfs和内核

2:因为,内核(没有驱动程序等)无法真正的挂载文件系统,initramfs(就相当于是一个微型的操作系统),他会去挂载/(也就是假的根),加载一些驱动程序,然后卸掉自己,让内核挂载到真正的根文件系统上面(/sysroot)

3:内核一旦挂上去了,就会使用systemd来初始化系统,加载一些操作系统的界面(图形化,命令行界面等)

 

2:内核参数

1:查看系统的内核

grubby --info=ALL

[root@node1 entries]# grubby --info=ALL
index=0
kernel="/boot/vmlinuz-5.14.0-70.22.1.el9_0.x86_64"
args="ro resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet"
root="/dev/mapper/rhel-root"
initrd="/boot/initramfs-5.14.0-70.22.1.el9_0.x86_64.img"
title="Red Hat Enterprise Linux (5.14.0-70.22.1.el9_0.x86_64) 9.0 (Plow)"
id="ec4c8aea8e734d88b03b86d6af1d1fe5-5.14.0-70.22.1.el9_0.x86_64"
index=1
kernel="/boot/vmlinuz-0-rescue-ec4c8aea8e734d88b03b86d6af1d1fe5"
args="ro resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet"
root="/dev/mapper/rhel-root"
initrd="/boot/initramfs-0-rescue-ec4c8aea8e734d88b03b86d6af1d1fe5.img"
title="Red Hat Enterprise Linux (0-rescue-ec4c8aea8e734d88b03b86d6af1d1fe5) 9.0 (Plow)"
id="ec4c8aea8e734d88b03b86d6af1d1fe5-0-rescue"

 index=0代表着为第一个内核,=1代表着第二个内核参数

查看的就是/boot/loader/entries下面的内核文件

2:查看系统默认内核

grubby --default-kernel

[root@node1 entries]# grubby --default-kernel
/boot/vmlinuz-5.14.0-70.22.1.el9_0.x86_64

 

3:修改默认的内核

第一种:

grubby --set-default 内核路径  也就是/boot下面的内核文件

第二种:

grubby --set-default-index  x(这个x就是grubby --info=ALL显示的index等于几)

内核修改了,对应的标题也就会被修改

4:查看内核标题以及修改

1:查看内核标题

grubby --default-title

查看就是/boot/loader/entries这个文件中的标题内容

2:修改内核的标题

一种方法就是:因为查看的就是/boot下面的文件,所以修改下面的文件即可,

修改后,然后重启即可

5:修改内核启动的参数

第一种方法:对配置文件进行修改(永久的修改)

修改/etc/default/grub里面的timeout这个参数,就是设置超时的时间

修改完成后,输入grub2-mkconfig -o /boot/grub2/grub.cfg,重新生成gruub.cfg配置文件

但是把下面有出现了一个新的文件(一致都有的文件)

 

第二种方法:通过grub添加内核的参数(永久修改的)

grubby --args= " systemd.unit=系统的启动目标" --update-kernel /boot/内核文件

也就是写入到了这个内核文件里面去了(/boot/loder/entries下面了)

但是没有写到/etc/default/grub里面去

 

第三种方法:系统启动的时候修改内核参数(临时修改,用的较为多)

1)在启动的界面是按e键,然后在linux末尾添加内核参数,比如systemd.unit=multi-user.target

2)然后按ctrl+x继续启动

常见的内核参数

  1:systemd.unit=multi-user.target

  2:init=/bin/bash

  3:rd.break

 

四:系统故障的管理

 1:忘记root密码

就是在真正的时候,如果忘记了密码,就要选择救援内核,8之前的话选择正常的内核即可(也就是第一项)

1)重启操作系统,选择救援内核,按e键

2)在linux这一行,按ctrl+e到末尾,然后的话,在ro后面输入rd.break,可以删除也可以不删除后面的参数,然后按下ctrl+x进入到initramfs这个微型的操作系统中去

3)把/sysroot重新以读写的方式进行挂载,然后切换到真正的根文件系统

  mount -o remount,rw /sysroot

  chroot /sysroot

4)修改root密码

  passwd root

5)打上标签

  创建autorelabel文件告诉selinux放行此次操作,否则操作被阻挡

  touch /.autorelabel

6)退出

  2次exit退出去,然后输入密码进行登录

 

 2:grub.cfg引导配置文件丢失

每次会去问客户这个是什么类型的硬盘(scis或者nvme0n1等)

 现象:就是进入系统后,直接就是grub这个界面,就可能是grub.cfg这个配置文件丢失

图片:

 

思路:要进入这个操作系统中,才能使用生成grub.cfg的配置文件才行 

解决方法:

1)指定系统上的boot分区,如果有多个硬盘的话,系统磁盘的第一个分区永远是boot分区

  a:set root='hd0,msdos1',选择第一个分区

2)指定内核文件以及真正的根文件系统,根据硬盘的类型来判断真正的根文件系统是什么

  a:列如:系统盘是nvme的,/dev/nvme0n1p2 可能是根文件系统

  b:如果是scsi的,/dev/sd2可能是根文件系统

  c:系统盘是逻辑卷,/dev/mapper/rhel-root是根文件系统,centos的就是centos-root

linux /内核版本 root(真正的根文件系统)=/dev/nvme0n1p2 ro 以只读的方式挂载

3)指定内核配对的initramfs

  a:initrd /initramfs(跟内核版本保持一致)

4)boot引导启动进入系统(上面的操作都完成了即可,在根文件系统下,指定了内核和initramfs后,就能进行到这个操作系统中了)

5)执行grub2-mkconfig -o /boot/grub2/grub.cfg 生成引导配置文件

3:fstab文件系统类型故障

使用mount -a能排查很多的错误点出来

1)挂载点写错了(红帽8之前的话,挂载点写错了会导致系统起不来,8之后,会自动的创建不存在的挂载点)

编写/ets/fstab这个永久挂载的配置文件时,写错了挂载点,会自动创建

2)文件系统的类型写错了(会导致系统起不来,出现故障)

造成的现象:就是系统会进入内核模式中,要求输入root密码才行才能进行入到下一步的操作,执行mount -a就知道什么问题了

xfs,ext系列,iso9660然后写错了

/dev/cdrom  /mnt/  iso960 defaults 0 0 

进入紧急救援模式,输入mount -a 就能察觉到哪里写错了,最后进行排查,reboot即可

3)挂载的设备名称写错了

跟文件系统类型写错了一样的方法

4:引导程序故障

模拟:dd if=/dev/zero of=/dev/nvme0n1 bs=446 count=1 reboot

现象: 看不到菜单页面,

思路:就是安装引导程序(就是这个系统盘)

解决步骤:

1)通过光盘进行启动,进入救援模式

2)扫描硬盘的文件系统,并且挂载到/mnt/sysroot

3)切换到真正的根下,执行grub2-install /dev/系统盘nvme0n1 安装引导程序

4)exit

5)exit

 注意的就是:救援模式的光盘最好和系统保持一致,一个系统版本的,这样就不会出现安装一些包的问题了

5:内核文件丢失,innitramfs文件丢书,引导分区文件丢失

模拟:删除/boot分区后面的所有文件,

现象:导致了进入不了系统,出现了grub rescue,没有菜单页面,说明了引导程序还在,但是/boot分区下面的文件可能丢失了

图片:

 

思路:因为文件没有了,所以的话,就是安装软件包达到释放的文件的目的,然后安装系统盘,释放grub2目录

解决步骤

先要重启,按esc键选择光盘

1)通过光盘进行启动,系统中有三种方式启动的(硬盘,光盘,网络),进入救援模式里面

2)进入的是光盘的微型操作系统,切换到真正的根文件系统里面,chroot /mnt/sysroot

3)配置yum仓库,安装所有的内核软件包,dnf -y install kernel*

4)ll /boot 发现没有grub2这个目录,所以的话,安装释放grub2目录,grub2-install 系统盘

执行grub2-mkconfig -o /boot/grub2/grub.cfg来安装grub.cfg这个配置文件

5)exit

6)exit

完成即可

五:系统中难以理解的文件和操作

1:内核配置文件详解

/etc/default/grub和/boot/loader/entries/下面文件是/boot/grub/grub.cfg的2个变量文件,修改这2个变量文件,就是在修改这个grub.cfg,唯一的区别就是,/etc/default/grub写死了,改变里面的变量后,要执行命令重新生成/boot/grub/grub.cfg这个配置文件;/boot/loader/entries/下面的内核是实时更新的,也就是在里面修改了内容后,会同步上去,所以不需要重新生成配置文件;另外这些都是内核的组成之一

还有就是/boot下面的文件是内核文件,而/boot/grub2/grub.cfg只是包含了内核的路径,以及加载内核文件相关的事情,也就是如何选择内核,只是一个引导配置文件

 

2:修改启动目标

使用grubby修改启动目标,实际上就是将内容添加到配置文件里面去,虽然使用systemctl get-default查看还是没有修改之前的,但是以内核里面的参数为主,所以的话使用systemctl set-default修改启动目标没有用,因为优先级的问题,想要回复原样的话,就要修改配置文件

3:/sysroot文件

这个目录下面是根文件系统的内容

系统在启动的时候,会先让initramfs(假根)的根文件系统挂载到/sysroot目录下面,有了驱动之后,就会让真正的根文件系统挂在到/sysroot,systemd初始化系统,开机 

 

六:系统调优和内核模块

1)虚拟文件系统/proc

显示信息:

进程信息:/proc/PID

cpu信息:/proc/cpuinfo

内存资源:/proc/meminfo

磁盘信息:/proc/partition

2)sysctl配置内核参数

当前生效的内核参数在/proc/sys下

内核参数配置文件/etc/sysctl.conf和/etc/sysctl.d/*conf系统启动时读取

命令使用:

sysctl -a 列出当前生效的内核参数

临时修改内核参数:sysctl -w 内核参数=1

列如:

[root@cleint yum.repos.d]# sysctl -a | grep swap
vm.swappiness = 60
[root@cleint yum.repos.d]# sysctl -w vm.swappiness=20
vm.swappiness = 20
[root@cleint yum.repos.d]# sysctl -p
[root@cleint yum.repos.d]# sysctl -a | grep swap
vm.swappiness = 20

这个数字越大,证明这个参数占的权重越大,反之,则小  

使配置文件生效:sysctl -p

3)性能调优的思路

从架构上--->>>硬件升级---->>>>代码优化---->>>>配置优化

图解

4)调整调优的配置文件

[root@cleint yum.repos.d]# tuned-adm list
Available profiles:
- accelerator-performance     - Throughput performance based tuning with disabled higher latency STOP states
- balanced                    - General non-specialized tuned profile
- desktop                     - Optimize for the desktop use-case
- hpc-compute                 - Optimize for HPC compute workloads
- intel-sst                   - Configure for Intel Speed Select Base Frequency
- latency-performance         - Optimize for deterministic performance at the cost of increased power consumption
- network-latency             - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
- network-throughput          - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks
- optimize-serial-console     - Optimize for serial console use.
- powersave                   - Optimize for low power consumption
- throughput-performance      - Broadly applicable tuning that provides excellent performance across a variety of common server workloads
- virtual-guest               - Optimize for running inside a virtual guest
- virtual-host                - Optimize for running KVM guests
Current active profile: virtual-guest

上面的都是调优的参数,就是将系统最适合的,下次开机的时候,就能实现自动调优

配置目录:/usr/lib/tuned

查看系统推荐的调优配置级;

tuned-adm recommend

设置调优的优先级

tuned-adm profile 参数

这个目录下都是调优的文件/usr/lib/tuned

5)系统的设备文件

/dev/下面设备,并不是真正的设备,都是访问这些设备的接口

lsblk 下面的 maj:主版本号,确定设备类型

min:次版本号,就是一个编号

创建出一个设备文件

第一种方法:

dd 这个命令生成一个有大小的文件

losesetup /dev/设备文件 /dd生成文件的路径,其实就是做了一个映射

设备文件不存在的话,会自动的创建的

第二种方法:

mknod 设备 类型 主版本号 次版本号

6)内核模块

内核模块:实现一个特定的功能

内核模块的路径

/lib/modules/下面

内核模块相关的命令:

1、查看系统以加载的内核模块

lsmod

条目:

[root@cleint /]# lsmod | head -n 10
Module                  Size  Used by
loop                   32768  1
binfmt_misc            28672  1
uinput                 20480  1  

module:模块名

size:大小

used:被使用了几次

by:依赖模块

2、加载内核模块

modprobe 模块名

3、卸载内核模块

modprobe -r 模块名

 

posted @ 2024-03-04 15:50  q_7  阅读(6)  评论(0编辑  收藏  举报