启动过程
目标
了解系统启动过程
名词解释
- 系统启动过程
- 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作为磁盘上的启动加载器。
- GRUB2将从/boot/grub2/grub.cfg文件加载配置并显示一个菜单,从中可以选择要启动的内核。
- 使用/etc/grub.d/目录、/etc/default/grub文件和grub2-mkconfig进行配置,生成/boot/grub2/grub.cfg文件。
- 选择内核或超时到期时,启动加载器会从磁盘中加载内核和initramfs,并将他们放入内存中。initramfs是一个存档,其中包含启动时所有必要硬件的内核模块,初始化脚本等。在红帽linux8中,initramfs包含自身可用的整个系统。
- 使用/etc/dracut.conf.d/目录、dracut命令和lsinitrd命令进行配置,以检查initramfs文件。
- 启动加载器将控制券交给内核,从而传递启动加载器的内核命令行中指定的任何选项,以及initramfs在内存中的位置。
- 使用/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
- 系统启动的第一个进程
- 对于内核可在initramfs中找到驱动程序的所有硬件,内核会初始化这些硬件,然后作为PID 1从initramfs执行/sbin/init。在红帽企业linux8中,/sbin/init是一个指向systemd的链接。
- 使用内核init=命令行参数进行配置。
- initramfs中的systemd实力会执行initrd.target目标的所有单元。这包括将磁盘上的root文件系统挂载于/sysroot目录。
- 使用/etc/fstab进行配置
- 内核将root文件系统从initramfs切换为/sysroot中的root文件系统。随后,systemd会使用磁盘中安装的systemd副本来自行重新执行。
- systemd会查找从内核命令行传递系统中配置的默认目标,然后启动(或停止)单元,以符合该目标的配置,从而自动解决单元间的依赖关系。本质上,systemd目标是一组系统应激活以达到所需状态的单元。这些目标通常启动一个基于文本的登陆或图形登陆屏幕。
- 使用/etc/systemd/system/default.target和/etc/systemd/system/进行配置
##查看第一个启动的进程systemd
[root@sinfotek ~]# ps -ef| grep systemd
root 1 0 0 11月12 ? 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