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

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux系统启动流程大致可以分为以下几个步骤: 1. BIOS/UEFI:当计算机开机时,首先执行的是BIOS/UEFI固件程序。它会对硬件进行初始化,检测硬件是否正常,然后读取启动设备的MBR(Master Boot Record)或GPT(GUID Partition Table)分区表。 2. Bootloader:MBR/GPT分区表中存储了引导程序的位置信息。BIOS/UEFI会将控制权交给引导程序,例如GRUB2。引导程序会提供一个菜单,让用户选择要启动的操作系统。 3. Kernel:当用户选择要启动Linux系统时,引导程序会加载内核文件(vmlinuz)。内核负责初始化硬件设备,加载驱动程序,创建进程,管理内存和文件系统等。内核启动后,会挂载根文件系统,通常是ext4文件系统。 4. Initrd/initramfs:在内核启动之前,还需要加载一些必要的驱动程序和文件系统模块。这些驱动程序和模块可以被打包成一个initrd(initial ramdisk)或initramfs(initial RAM filesystem),并通过引导程序加载到内存中。initrd/initramfs中包含了一些必要的工具程序,例如udev,用于自动识别硬件设备。 5. Init:内核启动之后,会执行init程序,它是Linux系统中的第一个进程。init会读取/etc/inittab和/etc/init.d目录中的配置文件和脚本,然后按照配置文件中的要求启动相应的服务。通常情况下,Linux系统中有多个运行级别,每个级别对应不同的服务和进程。 6. 用户登录:当系统启动完成后,会进入登录界面。用户需要输入用户名和密码,然后系统会验证用户身份,如果验证通过,就会进入图形界面或命令行界面。 这些步骤构成了Linux系统启动流程,不同的发行版可能有细微的差别,但基本流程是相似的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖有缘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值