启动过程

目标

  了解系统启动过程

名词解释

  • 系统启动过程

  • 1.计算机接通电源,系统固件(现代UEFI或更旧的BIOS)运行开机自检(POST),并开始初始化部分硬件。
  • 2.使用系统BIOS或UEFI配置屏幕(通常在启动过程早期通过按特定的组合键(例如F2)即可进入)进行配置。
  • 3.系统固件会搜索可启动设备,可能是在UEFI启动固件中配置的,也可能按照BIOS中配置的顺序搜索所有磁盘上的主启动记录(MBR)。
  • 4.使用BIOS或UEFI配置屏幕(通常在启动过程早期通过按特定的组合键(例如F2)即可进入)进行配置。
  • 5.系统固件会从磁盘读取启动加载器,然后将系统控制权交给启动加载器。在centos8中,启动加载器为GRand Unified Boot loader version 2(GRUB2)
  • grub2-install

  使用grub2-install命令进行配置,将安装grub2作为磁盘上的启动加载器。

  1. GRUB2将从/boot/grub2/grub.cfg文件加载配置并显示一个菜单,从中可以选择要启动的内核。
  2. 使用/etc/grub.d/目录、/etc/default/grub文件和grub2-mkconfig进行配置,生成/boot/grub2/grub.cfg文件。
  3. 选择内核或超时到期时,启动加载器会从磁盘中加载内核和initramfs,并将他们放入内存中。initramfs是一个存档,其中包含启动时所有必要硬件的内核模块,初始化脚本等。在红帽linux8中,initramfs包含自身可用的整个系统。
  4. 使用/etc/dracut.conf.d/目录、dracut命令和lsinitrd命令进行配置,以检查initramfs文件。
  5. 启动加载器将控制券交给内核,从而传递启动加载器的内核命令行中指定的任何选项,以及initramfs在内存中的位置。
  6. 使用/etc/grub.d/目录、/etc/default/grub文件和grub2-mkconfig命令进行配置,以生成/boot/grub2/grub.cfg文件。
##查看/boot目录下的启动加载器启动时的界面
[root@sinfotek boot]# ls
config-4.18.0-193.el8.x86_64                             loader
efi                                                      lost+found
grub2                                                    System.map-4.18.0-193.el8.x86_64
initramfs-0-rescue-17a805a112014863b227d27954f371a4.img  vmlinuz-0-rescue-17a805a112014863b227d27954f371a4
initramfs-4.18.0-193.el8.x86_64.img                      vmlinuz-4.18.0-193.el8.x86_64
initramfs-4.18.0-193.el8.x86_64kdump.img
[root@sinfotek boot]# cd loader/
[root@sinfotek loader]# ls
entries
[root@sinfotek loader]# cd entries/
[root@sinfotek entries]# ls
17a805a112014863b227d27954f371a4-0-rescue.conf  17a805a112014863b227d27954f371a4-4.18.0-193.el8.x86_64.conf
[root@sinfotek entries]# cat 17a805a112014863b227d27954f371a4-4.18.0-193.el8.x86_64.conf 
title CentOS Linux (4.18.0-193.el8.x86_64) 8 (Core)
version 4.18.0-193.el8.x86_64
linux /vmlinuz-4.18.0-193.el8.x86_64
initrd /initramfs-4.18.0-193.el8.x86_64.img $tuned_initrd
options $kernelopts $tuned_params
id centos-20200508110711-4.18.0-193.el8.x86_64
grub_users $grub_users
grub_arg --unrestricted
grub_class kernel
  • 默认配置文件
[root@sinfotek ~]# vim /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/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
  • 重建grub.conf
##使用grub2-mkconfig命令进行重建grub.conf
[root@sinfotek ~]# grub2-mkconfig -help
Unrecognized option `-help'
Usage: grub2-mkconfig [OPTION]
Generate a grub config file

  -o, --output=文件       output generated config to FILE [default=stdout]
  --no-grubenv-update     do not update variables in the grubenv file
  -h, --help              print this message and exit
  -v, --version           print the version information and exit

Report bugs to <bug-grub@gnu.org>.
[root@sinfotek ~]# grub2-mkconfig > /boot/grub2/
device.map  fonts/      grub.cfg    grubenv     i386-pc/    
[root@sinfotek ~]# grub2-mkconfig > /boot/grub2/grub.cfg
  • 查看内核中的内容
[root@sinfotek ~]# file /boot/initramfs-4.18.0-193.el8.x86_64.img 
/boot/initramfs-4.18.0-193.el8.x86_64.img: ASCII cpio archive (SVR4 with no CRC)
[root@sinfotek ~]# lsinitrd /boot/initramfs-4.18.0-193.el8.x86_64.img 
Image: /boot/initramfs-4.18.0-193.el8.x86_64.img: 52M
========================================================================
Early CPIO image
========================================================================
drwxr-xr-x   3 root     root            0 Apr 24  2020 .
-rw-r--r--   1 root     root            2 Apr 24  2020 early_cpio
drwxr-xr-x   3 root     root            0 Apr 24  2020 kernel
drwxr-xr-x   3 root     root            0 Apr 24  2020 kernel/x86
drwxr-xr-x   2 root     root            0 Apr 24  2020 kernel/x86/microcode
-rw-r--r--   1 root     root       101376 Apr 24  2020 kernel/x86/microcode/GenuineIntel.bin
========================================================================
Version: dracut-049-70.git20200228.el8

Arguments: -H --persistent-policy 'by-uuid' -f

dracut modules:
bash
systemd
systemd-initrd
nss-softokn
rngd
i18n
network-legacy
network
ifcfg
  • 系统启动的第一个进程
  1. 对于内核可在initramfs中找到驱动程序的所有硬件,内核会初始化这些硬件,然后作为PID 1从initramfs执行/sbin/init。在红帽企业linux8中,/sbin/init是一个指向systemd的链接。
  2. 使用内核init=命令行参数进行配置。
  3. initramfs中的systemd实力会执行initrd.target目标的所有单元。这包括将磁盘上的root文件系统挂载于/sysroot目录。
  4. 使用/etc/fstab进行配置
  5. 内核将root文件系统从initramfs切换为/sysroot中的root文件系统。随后,systemd会使用磁盘中安装的systemd副本来自行重新执行。
  6. systemd会查找从内核命令行传递系统中配置的默认目标,然后启动(或停止)单元,以符合该目标的配置,从而自动解决单元间的依赖关系。本质上,systemd目标是一组系统应激活以达到所需状态的单元。这些目标通常启动一个基于文本的登陆或图形登陆屏幕。
  7. 使用/etc/systemd/system/default.target和/etc/systemd/system/进行配置
##查看第一个启动的进程systemd
[root@sinfotek ~]# ps -ef| grep systemd
root           1       0  0 1112 ?      00:00:04 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
  • 查看并设置系统启动的默认系统
[root@sinfotek ~]# systemctl get-default 
multi-user.target
[root@sinfotek ~]# systemctl set-default multi-user.target 
  • 系统模式
目标 用途
graphical.target 系统支持多用户、图形和基于文本的登陆。
multi-user.target 系统仅支持多用户、基于文本的登陆。
rescue.target sulogin提示,表示基本系统初始化已完成
emergency.target sulogin提示,表示initramfs回转完成,且系统root以制度形式挂载于/上。
  • 查看系统模式启动的依赖项
##查看多用户字符界面的依赖xiang
[root@sinfotek ~]# systemctl list-dependencies multi-user.target | grep target
multi-user.target
● ├─basic.target
● │ ├─paths.target
● │ ├─slices.target
● │ ├─sockets.target
● │ ├─sysinit.target
● │ │ ├─cryptsetup.target
● │ │ ├─local-fs.target
● │ │ └─swap.target
● │ └─timers.target
● ├─getty.target
● ├─nfs-client.target
● │ └─remote-fs-pre.target
● └─remote-fs.target
●   └─nfs-client.target
●     └─remote-fs-pre.target

##查询所有的依赖项
[root@sinfotek ~]# systemctl -t target --all
  UNIT                      LOAD      ACTIVE   SUB    DESCRIPTION                  
  basic.target              loaded    active   active Basic System                 
  cryptsetup.target         loaded    active   active Local Encrypted Volumes      
  emergency.target          loaded    inactive dead   Emergency Mode               
  getty-pre.target          loaded    inactive dead   Login Prompts (Pre)          
  getty.target              loaded    active   active Login Prompts                
  graphical.target          loaded    inactive dead   Graphical Interface          
  initrd-fs.target          loaded    inactive dead   Initrd File Systems          
  initrd-root-device.target loaded    inactive dead   Initrd Root Device           
  initrd-root-fs.target     loaded    inactive dead   Initrd Root File System      
  initrd-switch-root.target loaded    inactive dead   Switch Root                  
  initrd.target             loaded    inactive dead   Initrd Default Target        
  local-fs-pre.target       loaded    active   active Local File Systems (Pre)     
  local-fs.target           loaded    inactive dead   Local File Systems           
  multi-user.target         loaded    active   active Multi-User System            
  network-online.target     loaded    active   active Network is Online            
  network-pre.target        loaded    inactive dead   Network (Pre)                
  network.target            loaded    active   active Network                      
  nfs-client.target         loaded    active   active NFS client services          
  nss-lookup.target         loaded    active   active Host and Network Name Lookups
  nss-user-lookup.target    loaded    active   active User and Group Name Lookups  
  paths.target              loaded    active   active Paths                        
  remote-fs-pre.target      loaded    active   active Remote File Systems (Pre)    
  remote-fs.target          loaded    active   active Remote File Systems          
  rescue.target             loaded    inactive dead   Rescue Mode                  
  rpc_pipefs.target         loaded    active   active rpc_pipefs.target            
  rpcbind.target            loaded    active   active RPC Port Mapper              
  shutdown.target           loaded    inactive dead   Shutdown                     
  slices.target             loaded    active   active Slices                       
  sockets.target            loaded    active   active Sockets                      
  sound.target              loaded    active   active Sound Card                   
  sshd-keygen.target        loaded    active   active sshd-keygen.target           
  swap.target               loaded    active   active Swap                         
  sysinit.target            loaded    active   active System Initialization        
● syslog.target             not-found inactive dead   syslog.target                
  time-sync.target          loaded    inactive dead   System Time Synchronized     
  timers.target             loaded    active   active Timers                       
  umount.target             loaded    inactive dead   Unmount All Filesystems
文档更新时间: 2022-11-17 16:22   作者:xiubao yan