Linux的系统启动流程
Posted jks212454
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux的系统启动流程相关的知识,希望对你有一定的参考价值。
Linux的系统启动流程
一、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=1
if [ -f ${config_directory}/grubenv ]; then
load_env -f ${config_directory}/grubenv
elif [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="${saved_entry}"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set 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的系统启动流程的主要内容,如果未能解决你的问题,请参考以下文章
LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程(代码片段