• Linux - 开机启动流程


    目录

    一、掌握开机启动流程的意义:

    1.1  为什么需要了解开机启动流程?

    1.2  在日常的运维过程中,是否会遇到机器出现问题启动不了?

    1.3  开机启动流程的意义

    二、开机启动流程

    2.1  开机启动流程图

    2.2  开机启动流程

    2.2.1  pwoer on 开机

    2.2.2  POST开机自检

    2.2.3  BIOS程序对硬件进行检测

    2.2.4  boot启动顺序检查,启动第一启动顺序

    2.2.5  硬盘中的MBR程序

    2.2.8  启动对应的运行级别里面的服务。

    2.2.9  运行 /etc/systemd/system/multi-user.target.wants/ 下的服务

    2.2.10 运行 /etc/rc.local 以及 /etc/fstab文件

    2.2.12  加载四个配置文件


    一、掌握开机启动流程的意义:

    开机启动流程

    1.1  为什么需要了解开机启动流程?

    1.2  在日常的运维过程中,是否会遇到机器出现问题启动不了?

    1.自己的机房 --》自建机房 --》大量的物理机器 --》真实的服务器 --》成本高

    2.大量的云服务器 --》阿里云,腾讯云,aws,华为云等,成本低,性价比高

    1.3  开机启动流程的意义

    1.掌握让某个软件或服务开机自动运行的方法

    2.开机不能正常启动,是什么原因,或者那个环节出现了问题

    3.防止黑客植入木马,去查询黑客会把木马放到哪些地方?

     ##############################################

    二、开机启动流程

    2.1  开机启动流程图

     ############################################## 

    2.2  开机启动流程

    2.2.1  pwoer on 开机

    2.2.2  POST开机自检

    开机自检 :上电自检(POST, Power  On Self  Test)

            谁去检查?

                    由主板上面的BIOS程序去完成,BIOS(Basic Input Output System)程序,基本输入输出系统。

            自检什么东西?

                    对CPU、系统主板、基本内存、扩展内存、系统ROM BIOS等器件的测试。如发现错误,给操作者提示或警告。简化或加快该过程,可使系统能够快速启动。

            电脑里有哪些基本的硬件?
                    主板(motherboard)、cpu、内存,磁盘,网卡,显卡,声卡,电源,鼠标,键盘、显示器等

    ##############################################

    2.2.3  BIOS程序对硬件进行检测

    BIOS程序:
    BIOS是个人电脑启动时加载的第一个软件。
    它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS还向作业系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。现代作业系统会忽略BIOS提供的抽象层并直接控制硬件组件。

    ROM存储器 : read only memory  --》只读的存储器  断电信息丢失

    RAM存储器: random access memory  随机存取存储器  --》可读可写  断电信息不丢失

    既然BIOS程序是固化到只读存储器上面的那么BIOS的一些基本配置保存到哪里?

    BIOS的配置固化到了主板上面的CMOS芯片上面, BIOS是一个程序会读取CMOS芯片里的参数,了解cpu的配置,时间的配置,启动顺序的配置等

    CMOS芯片:CMOS芯片是一种低耗电存储器,其主要作用是用来存放BIOS程序中的设置信息以及系统时间日期。如果CMOS中数据损坏,计算机将无法正常工作

    ##############################################

    2.2.4  boot启动顺序检查,启动第一启动顺序

    boot  : 引导、启动的意思

    关于boot启动顺序:

     第一引导顺序:Removable Devices  可移动设备 (U盘、移动硬盘等)

    第二引导顺序:Hard Drive  硬盘

    第三引导顺序:CD-ROM Drive 光驱  (安装系统)

    第四引导顺序:Network boot from Intel  网络中安装服务器启动

    ##############################################

    2.2.5  硬盘中的MBR程序

    计算机在按下power键后,开始执行主板BIOS程序,进行完一系列检测和配置以后,

    开始按BIOS设定的引导顺序引导系统,会从硬盘中引导系统,BIOS执行完自己的程序以后

    如何将执行权交给硬盘?

    MBR程序:master boot record 主引导记录,位于硬盘的0磁道,0柱面,1扇区,可以看成是硬盘的第一个扇区,MBR里面有一个grub2引导程序,负责启动linux系统

    磁盘上面有很多磁道,每个磁道又会划分成63个扇区,每个扇区可以存储512个字节

    MBR主引导记录的组成:

    分区表 + grub2主引导程序 + 类型    总共512个字节

    grub是linux系统的启动程序
    grub2是grub的第2个版本

     ##############################################

    2.2.6  加载/boot里面的光驱

    /boot目录下面的内容:

     grub2程序会舒适化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好一切准备。

    initramfs-4.18.0-147.el8.x86_64.img 文件:

    给内核程序提供一个初始化的内存文件系统的镜像文件 --》临时的根文件系统的镜像文件-->提供程序和配置文件 

            init 初始化

            ram 内存里的存储

            fs 文件系统

    vmlinuz-4.18.0-147.el8.x86_64 文件

            内核程序文件。

     ##############################################

    2.2.7  启动systemd进程

            由于版本的不同,centos6里面启动的第一个进程是init,centos7里面是systemd进程

    1. [root@wangsh boot]# pstree -p
    2. systemd(1)─┬─NetworkManager(749)─┬─{NetworkManager}(757)
    3. │ └─{NetworkManager}(762)
    4. ├─VGAuthService(671)
    5. ├─auditd(646)───{auditd}(647)
    6. ├─chronyd(679)
    7. ├─crond(700)
    8. ├─dbus-daemon(676)───{dbus-daemon}(691)
    9. ├─login(714)───bash(1325)
    10. ├─lvmetad(505)
    11. ├─master(1227)─┬─pickup(4840)
    12. │ └─qmgr(1237)
    13. ├─nginx(2248)───nginx(2249)
    14. ├─polkitd(673)─┬─{polkitd}(692)
    15. │ ├─{polkitd}(695)
    16. │ ├─{polkitd}(696)
    17. │ ├─{polkitd}(698)
    18. │ ├─{polkitd}(699)
    19. │ └─{polkitd}(709)
    20. ├─rsyslogd(1063)─┬─{rsyslogd}(1066)
    21. │ └─{rsyslogd}(1067)
    22. ├─sshd(1059)───sshd(4254)───bash(4258)───pstree(4930)
    23. ├─systemd-journal(488)
    24. ├─systemd-logind(694)
    25. ├─systemd-udevd(521)
    26. ├─tuned(1060)─┬─{tuned}(1307)
    27. │ ├─{tuned}(1308)
    28. │ ├─{tuned}(1310)
    29. │ └─{tuned}(1312)
    30. └─vmtoolsd(672)─┬─{vmtoolsd}(710)
    31. └─{vmtoolsd}(717)

     ##############################################

    2.2.8  启动对应的运行级别里面的服务。

    运行级别:runlevel(是centos6的叫法,)

    0 关机

    1 单用户模式

    2 多用户模式,不能使用nfs

    3 完全多用户模式 --》字符界面模式 --》非常正常的模式, 默认最小化安装的模式

    4 保留,没使用

    5 图形界面

    6 重启

    init 0 关机

    init 3 进入字符界面

    init 6 重启

    init 5 进入图形界面,但是需要安装了图形界面

    查看当前运行级别

    1. [root@wangsh boot]# runlevel
    2. N 3
    3. [root@wangsh boot]#

    N代表之前最开始进入的模式,如果是N表示没有的模式,没有进行模式切换

    3 5 代表开机是先进入运行级别3,后来切换到运行级别5

    查看/etc/inittab文件

    1. [root@wangsh boot]# vim /etc/inittab
    2. # inittab is no longer used when using systemd.
    3. #
    4. # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
    5. #
    6. # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
    7. #
    8. # systemd uses 'targets' instead of runlevels. By default, there are two main targets:
    9. #
    10. # multi-user.target: analogous to runlevel 3
    11. # graphical.target: analogous to runlevel 5
    12. #
    13. # To view current default target, run:
    14. # systemctl get-default
    15. #
    16. # To set a default target, run:
    17. # systemctl set-default TARGET.target

     可以看到这个文件里面说:

    1.  multi-user.target: analogous to runlevel 3
    2.  graphical.target: analogous to runlevel 5


     multi-user.target类似于第3运行级别

     graphical.target类似于第5运行级别

    1. # To view current default target, run:
    2. # systemctl get-default
    3. #
    4. # To set a default target, run:
    5. # systemctl set-default TARGET.target
    6. #

    显示当前的默认运行级别使用这条命令

            systemctl get-default  查看默认的运行级别

    设置开机进入图形界面

            set-default graphical.target

    1. [root@wangsh boot]# systemctl get-default
    2. multi-user.target
    3. [root@wangsh boot]# systemctl set-default graphical.target

     ##############################################

    2.2.9  运行 /etc/systemd/system/multi-user.target.wants/ 下的服务

    1. [root@wangsh multi-user.target.wants]# pwd
    2. /etc/systemd/system/multi-user.target.wants
    3. [root@wangsh multi-user.target.wants]# ls
    4. auditd.service irqbalance.service remote-fs.target tuned.service
    5. chronyd.service kdump.service rhel-configure.service vmtoolsd.service
    6. crond.service NetworkManager.service rsyslog.service
    7. firewalld.service postfix.service sshd.service
    8. [root@wangsh multi-user.target.wants]# ll
    9. 总用量 0
    10. lrwxrwxrwx. 1 root root 38 11月 12 2021 auditd.service -> /usr/lib/systemd/system/auditd.service
    11. lrwxrwxrwx. 1 root root 39 11月 12 2021 chronyd.service -> /usr/lib/systemd/system/chronyd.service
    12. lrwxrwxrwx. 1 root root 37 11月 12 2021 crond.service -> /usr/lib/systemd/system/crond.service
    13. lrwxrwxrwx. 1 root root 41 7月 26 15:03 firewalld.service -> /usr/lib/systemd/system/firewalld.service
    14. lrwxrwxrwx. 1 root root 42 11月 12 2021 irqbalance.service -> /usr/lib/systemd/system/irqbalance.service
    15. lrwxrwxrwx. 1 root root 37 11月 12 2021 kdump.service -> /usr/lib/systemd/system/kdump.service
    16. lrwxrwxrwx. 1 root root 46 11月 12 2021 NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
    17. lrwxrwxrwx. 1 root root 39 11月 12 2021 postfix.service -> /usr/lib/systemd/system/postfix.service
    18. lrwxrwxrwx. 1 root root 40 11月 12 2021 remote-fs.target -> /usr/lib/systemd/system/remote-fs.target
    19. lrwxrwxrwx. 1 root root 46 11月 12 2021 rhel-configure.service -> /usr/lib/systemd/system/rhel-configure.service
    20. lrwxrwxrwx. 1 root root 39 11月 12 2021 rsyslog.service -> /usr/lib/systemd/system/rsyslog.service
    21. lrwxrwxrwx. 1 root root 36 11月 12 2021 sshd.service -> /usr/lib/systemd/system/sshd.service
    22. lrwxrwxrwx. 1 root root 37 11月 12 2021 tuned.service -> /usr/lib/systemd/system/tuned.service
    23. lrwxrwxrwx. 1 root root 40 11月 12 2021 vmtoolsd.service -> /usr/lib/systemd/system/vmtoolsd.service

    可以看到,这些文件其实都是链接文件,指向Linux中的要开机自启的服务。

    我们使用systemctl disable firewalld这条命令其实就是将这个目录下面的链接文件去除

            使用systemctl enable firewalld这条命令就是在这个目录添加firewalld服务的链接

    1. [root@wangsh multi-user.target.wants]# systemctl disable firewalld
    2. Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
    3. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
    4. [root@wangsh multi-user.target.wants]# systemctl enable firewalld
    5. Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
    6. Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.

      ##############################################

    2.2.10 运行 /etc/rc.local 以及 /etc/fstab文件

    rc.local文件:

    如果想执行这个文件必须给他赋予可执行权限。

    1. [root@wangsh multi-user.target.wants]# cat /etc/rc.local
    2. #!/bin/bash
    3. # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
    4. #
    5. # It is highly advisable to create own systemd services or udev rules
    6. # to run scripts during boot instead of using this file.
    7. #
    8. # In contrast to previous versions due to parallel execution during boot
    9. # this script will NOT be run after all other services.
    10. #
    11. # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
    12. # that this script will be executed during boot.
    13. touch /var/lock/subsys/local
    14. [root@wangsh multi-user.target.wants]# ll -d /etc/rc.local
    15. lrwxrwxrwx. 1 root root 13 11月 12 2021 /etc/rc.local -> rc.d/rc.local

    /etc/fstab

    告诉linux正常启动过程中挂载哪个磁盘分区

    1. [root@wangsh multi-user.target.wants]# cat /etc/fstab
    2. #
    3. # /etc/fstab
    4. # Created by anaconda on Fri Nov 12 20:24:42 2021
    5. #
    6. # Accessible filesystems, by reference, are maintained under '/dev/disk'
    7. # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    8. #
    9. /dev/mapper/centos-root / xfs defaults 0 0
    10. UUID=5f971381-8a7b-4d83-8113-628cfee0a009 /boot xfs defaults 0 0
    11. /dev/mapper/centos-swap swap swap defaults 0 0

     

     ##############################################

    2.2.11  login登录

    login登录查询启动,用户输入用户名和密码以后

    Linux系统会自动进入/etc/passwd文件查找文件名

    再根据用户名到/etc/shadow文件查找密码

     ##############################################

    2.2.12  加载四个配置文件

    登录成功后会加载四个配置文件

    /etc/profile  全局配置,对所有用户有效

    /etc/bashrc  全局配置,对所有用户有效

    ~/.bash_profile   局部配置,只对登录的用户生效

    ~/.bashrc  局部配置,只对登录的用户生效

    来看看.bash_profile的内容:

    如果,~/.bashrc文件存在就执行这个文件

     ~/.bashrc文件有这样一行内容

     如果/etc/bashrc文件存在就执行这个文件

     ##############################################

    三、思考题:

    1.如果你编写了一个程序,需要开机自启的话有哪些方法?

    将程序做成一个服务,放到/etc/systemd/system/multi-user.target.wants目录下面。

    这个目录下面放的都是开机自启的服务

    在/etc/rc.local文件里面添加一条运行程序的命令,就会开机自启

    在四个配置文件里面添加运行程序的命令,就会开机自启

    还可以添加计划任务,让程序自动运行

    2.如何确定一个服务有没有开机自启?

    在/etc/systemd/system/multi-user.target.wants目录下面查找有没有这个服务

    1. [root@wangsh multi-user.target.wants]# ls | grep firewalld
    2. firewalld.service
    3. [root@wangsh multi-user.target.wants]#

     

     

  • 相关阅读:
    【多线程】多线程实际操作测试题
    互联网Java工程师面试题·Spring篇·第三弹
    8、Java——一维数组案例代码详解
    解密Prompt系列17. LLM对齐方案再升级 WizardLM & BackTranslation & SELF-ALIGN
    redis常见问题
    移植带桌面ubuntu18.04到RK3568开发板
    前端开发学习 (一) 搭建Vue基础环境
    Linux(centos7)安装MySQL5.7
    Springboot 打印接口耗时
    linux设备模型:kset及设备驱动抽象类(class)分析
  • 原文地址:https://blog.csdn.net/qq_48391148/article/details/126001896