🏆服务管理系统和内核调优与磁盘

systemd 守护进程管理linux启动。它可在系统引导时以及运行中单独系统激活系统资源,服务器守护经常和其他进程
守护经常时在执行各种任务的后台等待或运行的进程。一般情况下在系统应道时自动启动并持续运行,至关机或手动停止,大多数守护进程都是以d结尾
在红帽中第一个启动的进程PID 为 1,也就是systemd

描述服务单元
    systemd使用单元来管理不同类型的对象
    使用systemctl -t [type] && systemctl list-units --type=[type] 显示可用的单元类型服务
        type:
            serivce 定系统服务
            target  模拟运行界别
            device  定义内核识别的设备
            mount   定义文件系统挂载点
            socket  用于标识进程间通讯
            swap    用于管理swap设备
            automount  用于实现文件系统自动挂载
            path    定义文件系统的文件和目录
            [root@abc ~]# systemctl -t service
              UNIT                               LOAD   ACTIVE SUB     DESCRIPTION  
          
              LOAD    systemd是否正确接卸了单元的配置,并将该单元加载到内存中
              ACTIVE  单元的高级别激活状态,此信息表明单元是否已经成功
              SUB    单元的低级别激活状态,信息视单元类型、状态以及单元的执行方式而异
  
  systemctl list-unit-files 查看所有已安装单元文件下次开机的状态
        stat类型:
            enabled 系统引导时启动
            disabled 未设置未系统应道时启动
            static 无法启动,但是可用由其他启动等待单元引导启动
            masked  无法启动,也无法被其他单元引导启动

屏蔽服务设置访问开机时启动或不启动
    mask 和disable 区别在于disable 只是在开启时不会自动启动,但是还是可手动启动,但是mask不能手动启动也无法开机启动
    systemctl mask [service]    为了防止系统服务之间冲突,可用屏蔽某个服务,防止管理意外启动与其他服务冲突
    systemctl unmask [service] 取消屏蔽服务
  
列出服务的依赖性
    systemctl list-dependencies [service]
        [root@abc ~]# systemctl list-dependencies sshd
        sshd.service
        ● ├─system.slice
        ● ├─sshd-keygen.target
        ● │ ├─sshd-keygen@ecdsa.service
        ● │ ├─sshd-keygen@ed25519.service
        ● │ └─sshd-keygen@rsa.service
        ● └─sysinit.target
        ●   ├─dev-hugepages.mount
        ●   ├─dev-mqueue.mount

target-systemd目标
    target用来模拟运行级别,
    以前运行级别 :
        0     关机 
        1     单用户【找回丢失密码】 
        2     多用户状态没有网络服务
        3     多用户状态有网络服务 
        4     系统未使用保留给用户 
        5     图形界面 
        6     系统重启


    graphical.target    系统支持多用户、图形和基于文本的登录
    multi-user.target   系统支持多用户、基于文本的登录
    rescue.target       系统初始化已经完成,需要root账户登录
    emergency.target    只读挂载根文件系统,需要root账户登录
    poweroff.target     关机
    reboot.target       重启
    切换运行级别 systemctl isolate  [target]
    runlevel 查看当前运行级别
设置下次开机的启动级别
    systemctl set-default [target]
    systemctl get-default 下课下次开机的级别

系统启动

系统启动流程
一、BIOS开机自检POST,初始化部分硬件
1.硬件检测
2.选择合适的引导设备

二、引导部分 GRUB2
1.读取引导设备的启动扇区
    MBR模式 + BIOS 
    GPT模式 (大于硬盘2TB就使用GPT模式) + UEFI
    1扇区=512Byte字节
    446字节引导程序+16*4分区表+2个字节的结束位 = 512Byte
2. Grub2读取引导程序的配置文件boot loader,将系统权限交给boot loader, Grub2,引导程序是系统的固定的代码
/boot/grub2/grub.cfg
    grub2-install 在磁盘中安装grub2作为boot loader
    grub.cfg配置文件由/etc/grub.d/、/etc/default/grub和grub-mkconfig命令配置
3. 根据配置文件,加载内核,加载ramdisk文件或者initramfs文件,并放入内存中
4. boot loader将控制权交给内核,内核在initramfs/ramdisk 中找到所有硬件驱动程序,并初始化这些硬件,/sbin/init 以PID 1 来启动,/sbin/init是指向systemd的链接
5. initramfs 中的systemd会执行initrd.target目标所有单元,将文件系统挂载至/sysroot
6. 内核将文件系统切换至/sysroot中的根文件系统,随后systemd会使用磁盘中安装完成的systemd来重新执行
7. systemd会查找默认启动目标,还会启动一个基于文件登录或者图像登录的jie'mian
  
initramfs :

Initramfs 原理和实践 - wipan - 博客园 (cnblogs.com)

Grub2

查看默认启动内核
[root@abc ~]# grubby --default-kernel
/boot/vmlinuz-4.18.0-80.el8.x86_64

[root@abc ~]# grubby --info=/boot/vmlinuz-4.18.0-80.el8.x86_64 
index=0
kernel="/boot/vmlinuz-4.18.0-80.el8.x86_64"
args="ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet $tuned_params"
root="/dev/mapper/rhel-root"
initrd="/boot/initramfs-4.18.0-80.el8.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (4.18.0-80.el8.x86_64) 8.0 (Ootpa)"
id="ca9f6f36b2e34d40819f1773bbb639c3-4.18.0-80.el8.x86_64"

内核参数定义在/etc/default/grub中
    [root@abc ~]# cat /etc/default/grub 
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet"
    GRUB_DISABLE_RECOVERY="true"
    GRUB_ENABLE_BLSCFG=true
    修改后,需要更新grub2的配置文件
        grub2-mkconfig -o /boot/grub2/grub.cfg
也可以使用命令修改
    grubby
        --args= 添加参数
        --remove= 删除参数
    

内核

修改内核文档可用下载kernel-doc

多个内核版本可用共存
/boot/vmlinuz-version 启动时用到的内核
/boot/initramfs-version.img 启动时提供必要的内核
/lib/modules/version 内核模块

proc 目录
    Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。 
    基于/proc文件系统如上所述的特殊性,其内的文件也常被称作虚拟文件,并具有一些独特的特点。例如,其中有些文件虽然使用查看命令查看时会返回大量信息,但文件本身的大小却会显示为0字节。此外,这些特殊文件中大多数文件的时间及日期属性通常为当前系统时间和日期,这跟它们随时会被刷新(存储于RAM中)有关。 
    为了查看及使用上的方便,这些文件通常会按照相关性进行分类存储于不同的目录甚至子目录中,如/proc/scsi目录中存储的就是当前系统上所有SCSI设备的相关信息,/proc/N中存储的则是系统当前正在运行的进程的相关信息,其中N为正在运行的进程(可以想象得到,在某进程结束后其相关目录则会消失)。 
    大多数虚拟文件可以使用文件查看命令如cat、more或者less进行查看,有些文件信息表述的内容可以一目了然,但也有文件的信息却不怎么具有可读性。不过,这些可读性较差的文件在使用一些命令如apm、free、lspci或top查看时却可以有着不错的表现。
    /porc/[PID号]    进程信息
    /proc/cpuinfo  cpu信息
    /proc/meninfo    内存信息
    /proc/partition 磁盘信息

    如果需要修改内核参数由以下几种办法:
        sysctl修改
            -w [参数] 临时修改
            1.当前生效的内核参数文件在/proc/sys下,也就是说你想临时生效可用使用echo > 重定向来修改,不嫩使用vim直接修改
                [root@abc sys]# pwd
                /proc/sys
                [root@abc sys]# ls
                abi  crypto  debug  dev  fs  kernel  net  user  vm                            
            2.sysctl -a 命令可用查看所有可配置的内核参数
            3.如果想要长期生效,休要配置/etc/sysctl.conf和/etc/sysctl.d/内的配置文件,其中后者是可以自己配置定义配置的
                [root@abc ~]# cat /etc/sysctl.conf
                修改完成使用sysctl -p /etc/sysctl.conf 或者 /etc/sysctl.d/*.conf
      
tunned
    tuned也可以做性能你调优他的文件唯有/usr/lib/tunned下
    tuned-adm recommend 查看推挤的调优配置文件
    tunned-adm profile [参数] 修改调优配置文件                       

磁盘

linux系统中提供一个可访问这些设备的目录/dev,下面有访问各个设备的接口,里面并不是存放设备的驱动和真正的磁盘

使用ll /dev/ 查看dev目录下的设备
    crw-------. 1 root root    243,   0 Sep 14 02:13 nvme0
    一般文件 所属用户和组后面接的是文件的大小如果是设备后面显示的就是
        major 主版本号 标识设备类型
            243
            245
            8
            4
        minor 次版本号 文件编号
            分区编号,假如你电脑有3块硬盘,那么第一块硬盘为0、第二块为16、第三块为31,也就是说一块硬盘支持15给个分区


实验1:
    把/dev/下的磁盘文件删除了,不可以分区了,怎么恢复?
    [root@abc ~]# rm -rf /dev/nvme0n2
    [root@abc ~]# lsblk
    NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sr0            11:0    1 1024M  0 rom  
    nvme0n1       259:0    0  100G  0 disk 
    ├─nvme0n1p1   259:1    0  300M  0 part /boot
    └─nvme0n1p2   259:2    0 99.7G  0 part 
      ├─rhel-root 253:0    0 75.8G  0 lvm  /
      ├─rhel-swap 253:1    0    4G  0 lvm  [SWAP]
      └─rhel-home 253:2    0   20G  0 lvm  /home
    nvme0n2       259:3    0    5G  0 disk 
    [root@abc ~]# mknod /dev/nvme0n2 b 259 3
    [root@abc ~]# mkfs.xfs -f  /dev/nvme0n2

破解密码

1. 开机菜单按e
2.再到linux哪一行,在末尾加上rd.break 安装ctrl+x
3.以读写方式重新挂载根
mount -o remount,rw /sysroot
4.切换到真正的根下面
chroot /sysroot
5.修改密码
passwd
6创建一个隐藏文件
touch /.autorelabel

 .autorelable文件  下次重启系统时,它会自动重新标记SElinux的文件系统.
这通常在首次为SELinux标记文件系统时,或者在不同类型的策略之间切换时发生,例如从目标策略更改为严格策略.
一般用在shell层,重新定义selinux为非启动状态,否则重置ROOT密码无法生效。
纯手打希望采纳。

修复 grub.cfg

grub.cfg文件损坏或者丢失,导致系统无法正常启动:
    重启系统进入grub视图
    set root = "hd0 msdosl"
    linux /[内核文件](一般未boot目录下 ro(只读)  root=目录所在磁盘
    initrd /boot/[ramdisk/initrd文件].img
    boot
    grub2-mkconfig -o /boot/grub2/grub.cfg