Linux的系统启动流程

  • 一、systemd进程介绍
    • 1.systemd服务介绍
    • 2.systemd功能
    • 3.服务单元
    • 3.查看以激活状态的服务单元
    • 4.查看服务之间的依赖关系
  • 二、Linux的运行级别
    • 1.运行级别
    • 2.target类型
    • 3.查看当前系统默认启动的运行目标
    • 4.切换当前运行目标
  • 三、系统启动内核
    • 1.查看默认内核启动项信息
    • 2.修改内核的默认启动项
      • 1.根据开机启动菜单栏索引号
      • 2.根据绑定特定的内核版本
    • 3.修改内核启动参数
      • 1.采用VIM编辑方式
      • 2.采用命令修改方式
  • 四、Linux系统启动流程
    • 1.BIOS初始化过程
    • 2.grub阶段
  • 五、系统重要文件查看
    • 1./sbin/init
    • 2.系统启动的内核
    • 3.系统的内核源代码文件
    • 4.内核的信息文件
    • 5.grub2的信息文件

一、systemd进程介绍

1.systemd服务介绍

systemd守护进程管理Linux的启动,一般包括服务启动和服务管理,它可以在系统引导时以及运行中的系统激活系统的资源、服务器守护进程和其他进程。

2.systemd功能

①并行化功能,同时启动多个服务,可以提高系统的启动速度。
②按需启动激活进程
③自动服务依赖管理

3.服务单元

列出所有的服务单元

[root@tianyi ~]# systemctl list-units --type=service
UNIT                               LOAD   ACTIVE SUB     DESCRIPTION
atd.service                        loaded active running Job spooling tools
auditd.service                     loaded active running Security Auditing Service
cloud-config.service               loaded active exited  Apply the settings specified in cloud-config
cloud-final.service                loaded active exited  Execute cloud user/final scripts
cloud-init-local.service           loaded active exited  Initial cloud-init job (pre-networking)
cloud-init.service                 loaded active exited  Initial cloud-init job (metadata service crawler)
cloudResetPwdUpdateAgent.service   loaded active running cloudResetPwdUpdateAgent
crond.service                      loaded active running Command Scheduler
dbus.service                       loaded active running D-Bus System Message Bus
denyhosts.service                  loaded active running SYSV: Activates/Deactivates the
dracut-shutdown.service            loaded active exited  Restore /run/initramfs on shutdown
firewalld.service                  loaded active running firewalld - dynamic firewall daemon
getty@tty1.service                 loaded active running Getty on tty1
httpd.service                      loaded active running The Apache HTTP Server
import-state.service               loaded active exited  Import network configuration from initramfs
iscsi-shutdown.service             loaded active exited  Logout off all iSCSI sessions on shutdown
kdump.service                      loaded active exited  Crash recovery kernel arming
kmod-static-nodes.service          loaded active exited  Create list of required static device nodes for the current kernel
libstoragemgmt.service             loaded active running libstoragemgmt plug-in server daemon
lvm2-monitor.service               loaded active exited  Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress polling
mcelog.service                     loaded active running Machine Check Exception Logging Daemon
multi-queue-hw.service             loaded active exited  LSB: NIC multiple queues init
mysqld.service                     loaded active running MySQL 8.0 database server
NetworkManager-wait-online.service loaded active exited  Network Manager Wait Online
NetworkManager.service             loaded active running Network Manager
nis-domainname.service             loaded active exited  Read and set NIS domainname from /etc/sysconfig/network
php-fpm.service                    loaded active running The PHP FastCGI Process Manager
polkit.service                     loaded active running Authorization Manager
qemu-guest-agent.service           loaded active running QEMU Guest Agent
rngd.service                       loaded active running Hardware RNG Entropy Gatherer Daemon
rsyslog.service                    loaded active running System Logging Service
smartd.service                     loaded active running Self Monitoring and Reporting Technology (SMART) Daemon

UNIT :服务单元的名称
LOAD :systemd是否正确解析了单元的配置,并将该单元加载到内存中
ACTIVE:单元的高级别激活状态,此信息表明单元是否正常启动。
SUB:单元的低级别激活状态,信息视单元类型、状态以及单元执行方式而异。

3.查看以激活状态的服务单元

[root@tianyi ~]# systemctl list-unit-files --type=service
UNIT FILE                                   STATE
arp-ethers.service                          disabled
atd.service                                 enabled
auditd.service                              enabled
autovt@.service                             enabled
blk-availability.service                    disabled
bolt.service                                static
chrony-dnssrv@.service                      static
chrony-wait.service                         disabled
chronyd.service                             disabled
clean-mount-point@.service                  static
cloud-config.service                        enabled
cloud-final.service                         enabled
cloud-init-local.service                    enabled
cloud-init.service                          enabled
cloudResetPwdAgent.service                  enabled
cloudResetPwdUpdateAgent.service            enabled
cockpit-motd.service                        static
cockpit.service                             static
console-getty.service                       disabled
container-getty@.service                    static
cpupower.service                            disabled
crond.service                               enabled
dbus-org.fedoraproject.FirewallD1.service   enabled
dbus-org.freedesktop.hostname1.service      static
dbus-org.freedesktop.locale1.service        static
dbus-org.freedesktop.login1.service         static
dbus-org.freedesktop.NetworkManager.service enabled
dbus-org.freedesktop.nm-dispatcher.service  enabled
dbus-org.freedesktop.portable1.service      static
dbus-org.freedesktop.timedate1.service      enabled

4.查看服务之间的依赖关系

[root@tianyi ~]# systemctl list-dependencies httpd
httpd.service
● ├─-.mount
● ├─httpd-init.service
● ├─php-fpm.service
● ├─system.slice
● └─sysinit.target
●   ├─dev-hugepages.mount
●   ├─dev-mqueue.mount
●   ├─dracut-shutdown.service
●   ├─import-state.service
●   ├─iscsi.service
●   ├─kmod-static-nodes.service
●   ├─ldconfig.service
●   ├─loadmodules.service
●   ├─lvm2-lvmpolld.socket
●   ├─lvm2-monitor.service
●   ├─multipathd.service
●   ├─nis-domainname.service
●   ├─plymouth-read-write.service
●   ├─plymouth-start.service
●   ├─proc-sys-fs-binfmt_misc.automount
●   ├─rngd.service
●   ├─selinux-autorelabel-mark.service
●   ├─sys-fs-fuse-connections.mount
●   ├─sys-kernel-config.mount
●   ├─sys-kernel-debug.mount
●   ├─systemd-ask-password-console.path
●   ├─systemd-binfmt.service
●   ├─systemd-firstboot.service
●   ├─systemd-hwdb-update.service
●   ├─systemd-journal-catalog-update.service
●   ├─systemd-journal-flush.service
●   ├─systemd-journald.service
●   ├─systemd-machine-id-commit.service
●   ├─systemd-modules-load.service
●   ├─systemd-random-seed.service
●   ├─systemd-sysctl.service
●   ├─systemd-sysusers.service
●   ├─systemd-tmpfiles-setup-dev.service
●   ├─systemd-tmpfiles-setup.service
●   ├─systemd-udev-trigger.service
●   ├─systemd-udevd.service
●   ├─systemd-update-done.service

二、Linux的运行级别

1.运行级别

REL6.0及之前版本的定义————
0:关机,停机模式
1:单用户模式
2:多用户模式
3:完整的多用户文本模式
4:系统未使用,保留一般不用
5:图形化模式
6:重启模式
运行级就是操作系统当前正在运行的功能级别。这个级别从0到6,具有不同的功能。

2.target类型

RHEL8.0新版本————
graphical.target:系统支持多用户、图形和基于文本登录。
multi-user.target:系统支持多用户和基于文本登录。
rescue.target:系统初始化以完成,需要root登录。
emergency.target:只读挂载根文件系统,需要root权限。

3.查看当前系统默认启动的运行目标

[root@tianyi ~]# systemctl get-default
multi-user.target

4.切换当前运行目标

[root@tianyi ~]# systemctl set-default multi-user.target
[root@tianyi ~]# systemctl get-default
multi-user.target

三、系统启动内核

1.查看默认内核启动项信息

[root@control ~]# grubby --default-kernel
/boot/vmlinuz-4.18.0-80.el8.x86_64
[root@control ~]# 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 resume=UUID=2f261207-03e5-47d7-ac83-9a4424fb6f74 rhgb quiet $tuned_params"
root="UUID=11568b58-6451-40da-a59f-7da0c2536cd3"
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="043c7535dbf0487cbd536e7ea6413864-4.18.0-80.el8.x86_64"

2.修改内核的默认启动项

1.根据开机启动菜单栏索引号

[root@control ~]# grubby --default-index
0
[root@control ~]# grub2-set-default 0
[root@control ~]# grubby --default-index
0

2.根据绑定特定的内核版本

[root@control boot]# ll
total 107080
-rw-r--r--. 1 root root   180942 Mar 13  2019 config-4.18.0-80.el8.x86_64
drwxr-xr-x. 3 root root       17 Dec  8  2020 efi
drwx------. 4 root root       83 Mar  2 09:19 grub2
-rw-------. 1 root root 65698603 Dec  8  2020 initramfs-0-rescue-043c7535dbf0487cbd536e7ea6413864.img
-rw-------. 1 root root 24257032 Dec  8  2020 initramfs-4.18.0-80.el8.x86_64.img
drwxr-xr-x. 3 root root       21 Dec  8  2020 loader
-rw-------. 1 root root  3751920 Mar 13  2019 System.map-4.18.0-80.el8.x86_64
-rwxr-xr-x. 1 root root  7872864 Dec  8  2020 vmlinuz-0-rescue-043c7535dbf0487cbd536e7ea6413864
-rwxr-xr-x. 1 root root  7872864 Mar 13  2019 vmlinuz-4.18.0-80.el8.x86_64
[root@control boot]# grubby --set-default /boot/vmlinuz-0-rescue-043c7535dbf0487cbd536e7ea6413864
The default is /boot/loader/entries/043c7535dbf0487cbd536e7ea6413864-0-rescue.conf with index 1 and kernel /boot/vmlinuz-0-rescue-043c7535dbf0487cbd536e7ea6413864
[root@control boot]# grubby --default-kernel
/boot/vmlinuz-0-rescue-043c7535dbf0487cbd536e7ea6413864

3.修改内核启动参数

1.采用VIM编辑方式

[root@control boot]# cat /etc/default/grub
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="resume=UUID=2f261207-03e5-47d7-ac83-9a4424fb6f74 rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

VIM编辑修改需更新grub2配置文件grub2-mkconfig -o /boot/grub2/grub.cfg

2.采用命令修改方式

[root@control boot]# grubby --remove-args="rhgb quiet" --args=console=ttyS0,115200 --update-kernel /boot/vmlinuz-4.18.0-80.el8.x86_64

四、Linux系统启动流程

1.BIOS初始化过程

电脑通电开机,完成硬件初始化。BIOS加电自检,BIOS进行初始化。

2.grub阶段

1.把MBR加载到内存, MBR=512字节=引导程序(446字节)+64字节(分区表)+2字节
2.BIOS加载grub引导程序,系统控制交给引导程序。
3.引导程序加载配置文件/boot/grub2/grub.cfg,告诉/boot目录所在分区和内核文件在哪,并加载内核和initramfs,并放入内存中。initramfs包含启动时硬件必要的内核模块和初始化脚本。
4.Kernel自身初始化,且内核在initramfs中找到所有硬件的驱动程序,初始化这些硬件。
5.initramfs中的/sbin/init以pid为1的进程启动,并链接到systemd。
6.内核将根从initramfs切换到真正的根。
7.启动第一个程序systemd

五、系统重要文件查看

1./sbin/init

[root@control ~]# ll -ld /sbin/init
lrwxrwxrwx. 1 root root 22 Feb 26  2019 /sbin/init -> ../lib/systemd/systemd

2.系统启动的内核

[root@control boot]# pwd
/boot
[root@control boot]# ll
total 107080
-rw-r--r--. 1 root root   180942 Mar 13  2019 config-4.18.0-80.el8.x86_64
drwxr-xr-x. 3 root root       17 Dec  8  2020 efi
drwx------. 4 root root       83 Mar  2 09:19 grub2
-rw-------. 1 root root 65698603 Dec  8  2020 initramfs-0-rescue-043c7535dbf0487cbd536e7ea6413864.img
-rw-------. 1 root root 24257032 Dec  8  2020 initramfs-4.18.0-80.el8.x86_64.img
drwxr-xr-x. 3 root root       21 Dec  8  2020 loader
-rw-------. 1 root root  3751920 Mar 13  2019 System.map-4.18.0-80.el8.x86_64
-rwxr-xr-x. 1 root root  7872864 Dec  8  2020 vmlinuz-0-rescue-043c7535dbf0487cbd536e7ea6413864
-rwxr-xr-x. 1 root root  7872864 Mar 13  2019 vmlinuz-4.18.0-80.el8.x86_64
[root@control boot]# 

3.系统的内核源代码文件

[root@control kernels]# pwd
/usr/src/kernels
[root@control kernels]# ll
total 8
drwxr-xr-x. 23 root root 4096 Feb  1 14:35 4.18.0-80.el8.x86_64
drwxr-xr-x. 23 root root 4096 Feb  1 14:35 4.18.0-80.el8.x86_64+debug

4.内核的信息文件

cat /boot/grub2/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#### BEGIN /etc/grub.d/00_header ###
set pager=1if [ -f ${config_directory}/grubenv ]; thenload_env -f ${config_directory}/grubenv
elif [ -s $prefix/grubenv ]; thenload_env
fi
if [ "${next_entry}" ] ; thenset default="${next_entry}"set next_entry=save_env next_entryset boot_once=true
elseset default="${saved_entry}"
fiif [ x"${feature_menuentry_id}" = xy ]; thenmenuentry_id_option="--id"
elsemenuentry_id_option=""
fiexport menuentry_id_optionif [ "${prev_saved_entry}" ]; thenset saved_entry="${prev_saved_entry}"save_env saved_entryset prev_saved_entry=save_env prev_saved_entryset boot_once=true
fi

5.grub2的信息文件

[root@control system]# cat /etc/default/grub
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="resume=UUID=2f261207-03e5-47d7-ac83-9a4424fb6f74 rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

Linux的系统启动流程相关推荐

  1. linux操作系统启动流程与kickstart文件制作

    文章目录 一.Linux操作系统启动流程 1.1.简单回顾linux系统组成以及内核作用 1.2.简单了解一下磁盘构成以及相关基础知识 二.CentOS 启动流程(只适用于MBR类型的PC架构主机) ...

  2. linux文件系统启动流程 ---笔记整理

    下面是一张linux启动流程图: 在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为: 1. /sbin/init 2. /etc/inittab 3. /etc/rc. ...

  3. Linux操作系统启动流程简单介绍

    Linux 系统的启动,从计算机开机通电自检开始,一直到登陆系统,需要经历多个过程.了解 Linux操作系统的启动过程,对Linux操作系统更深入认识和日常的运维工作非常有帮助,感兴趣的朋友可以了解一 ...

  4. linux文件系统启动流程,linux 内核启动过程以及挂载android 根文件系统的过程

    转载 作者:汕头大学-黄珠唐 时间:2009 年10 月29 日 主要介绍linux 内核启动过程以及挂载android 根文件系统的过程,以及介绍android 源代码中文件系统部分的浅析. 主要源 ...

  5. Linux 操作系统启动流程以及trouble shooting

    2019独角兽企业重金招聘Python工程师标准>>> 最近在某个版块看到有人讨论GRUB的问题,这里是我个人的一些理解. 我想大部分还是正确的,但肯定也有理解错误的地方,在这里抛砖 ...

  6. linux 笔记--系统启动流程

    POST(开机自检)-->BIOS(boot seqvence)-->MBR(boot loader)-->kernel-->initrd-->sbin/init 内核设 ...

  7. linux系统启动流程详解

    系统启动流程(CentOS6) Post加电自检: 开机检查cpu.内存.磁盘等是否存在 Boot Sequence: BIOS:Basic Input and Output System 按照BIO ...

  8. Linux 操作系统原理 — 系统启动流程

    目录 文章目录 目录 系统启动流程 编辑 gurb.cfg RHEL7 的启动级别 RHEL7 破密码步骤 grup2 加密,防止破密码 initramfs 文件 系统启动流程 RHEL7 使用了 G ...

  9. Linux 系统启动流程及其介绍

    熟悉Linux系统启动流程可以更好的排除Linux系统在启动的过程中所遇到的错误,下面介绍Linux系统在启动过程. 开机,BIOS自检:检测外置设备,目的是为了把外围设备的信息提供给操作系统使用 寻 ...

最新文章

  1. python docx 复制_99%的人都不知道的Python整理文件方法,效率提升100倍
  2. 「Python」pandas入门教程
  3. some understanding of《Improved Use of Continuous Attributes in C4.5》
  4. 【干货】神策标签生产引擎架构
  5. FLEX 2.01 全套下载!
  6. 接口返回buffer的16进制数据如何转换
  7. json对象获取json数组
  8. echarts地图实现部分地区高亮
  9. ccy影响因子版270ms
  10. python 面积计算器
  11. 我为大家带来了二十张登录界面!!!
  12. 隔壁老王|亲述,我的运维心路历程
  13. java 创建用户界面_建立图形用户界面 JAVA实验
  14. Python爬虫实践:优志愿 院校列表
  15. 16行 python代码获取音效素材
  16. 瑞利散射 拉曼散射 米散射_使用Cartopy的时移散射图可视化
  17. php读取目录中文文件名乱码解决方法
  18. 队列Q(Wannafly挑战赛19)
  19. 【C语言中清空文件的方法】
  20. 3.基本的DOS命令

热门文章

  1. 【bzoj3309】DZY Loves Math 莫比乌斯反演+线性筛
  2. 关于IO模拟时序(SPI)的注意事项
  3. Oracle(21)—— Linux环境部署Oracle11g数据库
  4. 亲测:阿里云的高效云盘真没有声称那么好
  5. Socket网络编程--简单Web服务器(2)
  6. sql server 2008语言基础: 集合
  7. OpenCV计算机视觉编程攻略之提取图片轮廓-使用Canny函数
  8. matlab作图如何改变坐标刻度
  9. mongodb java 学习_MongoDB学习(四):通过Java使用MongoDB
  10. 026_Pagination分页