启动流程介绍
现代计算机系统启动是硬件与软件复杂组合。从定义的端点开始,到拥有登录提示符的运行中
系统,需要大量的硬件和软件配合工作。以下列表从较高层面概述了启动系统时所涉及的任务。
x86_64虚拟机列表大致相同。
rehdat 5、6、7启动时区别
启动流程一览
1、计算机接通电源。系统固件(现代UEFI或更旧的BIOS)运行开机自检(POST),并开始
初始化部分硬件。
使用系统BIOS或UEFI配置屏幕(早起按F2可进入设置)
2、系统固件会搜索可启动设备,可能是在UEFI启动固件中配置的,也可能按照BIOS中配置的顺序搜索所有磁盘上的主引导记录(MBR)
使用系统BIOS或UEFI配置屏幕(早起按F2可进入设置)
3、系统固件会从磁盘读取启动加载器,然后将系统控制权交给启动加载器。红帽企业版Linux8中,启动加载器为GRand Unified Bootloader version2(GRUB2)
使用grub2-install命令进行配置,它将安装GRUB2作为磁盘上的启动加载器。
4、GRUB2将从/boot/grub2/grub.cfg文件加载配置并显示一个菜单,从中可以选择要启动的内核。
使用/etc/grub.d/目录、/etc/default/grub文件和grub2-mkconfig命令进行配置,以生成/boot/grub2/grub.cfg文件。
5、选择内核超时到期后,启动加载器从磁盘中加载内核和initramfs,并将他们放入内存中。initramfs是一个存档,其中包含启动时所有必要硬件的内核模块、初始化脚本等等。在redhat8中,initramfs包含自身可用的整个系统。
使用/etc/dracut.conf.d/目录、dracut命令和lsinitrd命令进行配置,以检查initramfs文件。
6、启动加载器将控制权交给内核,从而传递启动加载器的内核命令行中指定的任何选项,以及initramfs在内存中的位置
7、对于内核可在initramfs中找到驱动程序的所有硬件,内核会初始化这些硬件,然后作为PID1从initramfs执行/sbin/init。在redhat8中/sbin/init是一个指向systemd的链接。
8、initramfs中的systemd进程会执行initrd.target目标的所有单元。这包括将磁盘上的root文件系统挂载于/sysroot目录。
使用/etc/fstab进行配置
9、内核将root文件系统从initramfs切换回/sysroot中的root文件系统。随后,systemd会使磁盘中安装的systemd副本来重新执行。
10、systemd会查找从内核命令行传递或系统中配置的默认目标,然后启动或停止单元,以符合该目标的配置,从而自动解决单元之间依赖关系。本质上,systemd进程是一组系统应激活以达到所需状态的单元。这些进程通常启动一个基于文本的登录或图形登录屏幕
可使用/etc/systemd/system/default.target和/etc/systemd/system/进行配置。
重新启动和关闭
关机 重启
1 init 0 init 6
2 poweroff reboot
3 systemctl poweroff systemctl reboot
4 shutdown -h 20:00 shutdown -r 0
poweroff和reboot是systemctl poweroff和systemctl reboot的链接文件
选择systemd目标
systemd进程是系统启动时第一个个加载的进程,他可以帮助我们选择在开机时直接进入哪个界面
graphical.target 多用户图形界面
multi-user.target 多用户,文本界面
rescue.target 救援界面
emergency.target 紧急救援模式 (只读形式挂载于/上)
查看图形启动服务依赖
systemctl list-dependencies graphical.target | grep target
依赖中服务的状态
systemctl list-units --type=target --all
切换文本和图形界面
systemctl isolate multi-user.target
或
systemctl isolate graphical.target
[[email protected] ~]# systemctl cat graphical.target
/usr/lib/systemd/system/graphical.target
SPDX-License-Identifier: LGPL-2.1+
This file is part of systemd.
systemd is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate=yes #我们只能选择此处设置为yes的服务进行切换
选择启动时默认界面
[[email protected] ~]# systemctl get-default
graphical.target
[[email protected] ~]# systemctl set-default graphical.target 或multi-user.target
启动时选择登入界面
启动时在内核功能设置位置,找到linux按end后空格,systemd.unit=multi-user.target后,ctrl+x执行。
1、reboot
2、上下箭头光标停留在内核选择位置,
3、按e键编辑,找到linux开头那行按end键
4、进行编辑systemd.unit=multi-user.target
5、ctrl+x执行
重置root密码
1、reboot
2、e
3、rd.break console=tty0
4、mount -o remount,rw /sysroot
5、chroot /sysroot
6、echo mima | passwd --stdin root
7、touch /.autorelabel
exit
exit
检查日志
默认情况下系统日志保存在/run/log/journal目录中,重启后会被清除