更改默认目标单位
使用以下命令更改默认目标单位(例如,将默认更改为 multi-user.target 单位):
# systemctl set-default multi-user.target Removed symlink /etc/systemd/system/default.target. Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
请注意, default.target 符号链接已更改,现在指向 multi-user.target 单元:
# ls -lrt /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 41 Sep 24 11:58 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target
下表总结了特定阶段的配置位置以及出现问题时我们可以采取的故障排除措施。
启动阶段 | 配置 |
---|---|
POST | 硬件配置(F2、ESC、F10 或者其他键) |
Select bootable Device | BIOS/UEFI 配置或者硬件启动菜单 |
Loading the boot loader | grub2-install 并编辑到 /etc/defaults/grub |
Loading the kernel | 编辑 GRUB 配置和 /etc/dracut.conf |
starting /sbin/init | 编译成initramfs |
Processing initrd.target | 编译成initramfs |
Switch to the root filesystem | /etc/fstab |
Running the default target | /etc/systemd/system/default.target |
5.启动systemd
内核以进程 ID 1 (PID 1) 启动 systemd 进程。
root 1 0 0 02:10 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
systemd 是系统启动后第一个启动的进程,也是系统关闭时运行的最后一个进程。
它控制引导的最后阶段并准备系统以供使用。
它还通过同时加载服务来加速启动。
systemd 读取/etc/systemd/system/default.target 链接的文件(例如,/usr/lib/systemd/system/multi-user.target)来确定默认的系统目标(相当于运行级别)。
系统目标文件定义了 systemd 启动的服务。
systemd 允许我们管理系统上的各种类型的单元,包括服务 (name.service) 和目标 (name.target)、设备 (name.device)、文件系统挂载点 (name.mount) 和套接字 (name.target)。
插座)。
SysV 运行级别和目标单元的比较
Run Level | 目标单元 | 描述 |
---|---|---|
0 | runlevel0.target, poweroff.target | 关机并关闭电源 |
1 | runlevel1.target, rescue.target | 设置救援shell |
2,3,4 | runlevel[234].target, multi-user.target | 设置非图形多用户 shell |
5 | runlevel5.target,graphical.target | 设置图形化多用户 shell |
6 | runlevel6.target,reboot.target | 关闭并重新启动系统 |
systemd 使系统进入系统目标定义的状态,执行系统初始化任务,例如:
- 设置主机名
- 初始化网络
- 根据配置初始化SELinux
- 打印欢迎横幅
- 基于内核引导参数初始化系统硬件
- 挂载文件系统,包括/proc文件系统等虚拟文件系统
- 清理/var中的目录
- 开始交换
4. 加载内核
内核以进程 ID 1 (PID 1) 启动 systemd 进程。
它还从 initrd 镜像加载必要的驱动程序模块。
引导加载程序 (GRUB2) 可以向用户显示引导菜单,或者可以配置为自动启动默认操作系统。
要加载 Linux,内核与 initramfs 一起加载。
initramfs 包含启动所需的所有硬件的内核模块,以及进入下一启动阶段所需的初始脚本。
在 RHEL 7 上,initramfs 包含一个完整的操作系统(可用于故障排除目的)。
2. 选择启动设备(With MBR)
主引导记录 (MBR) 是由 BIOS 读入内存的引导驱动器的前 512 个字节。
接下来的 64 个字节包含磁盘的分区表。
最后两个字节是用于错误检测的“幻数”。
MBR 发现可引导设备并将 GRUB2 引导加载程序加载到内存中,并将控制权转移给它。
了解 Linux 启动过程对解决启动问题很重要。
这些是引导过程中的高级步骤。
我们需要了解引导过程中涉及的文件,因为这些文件中的错误会导致引导问题。
如果在启动过程中出现问题,我们需要确定问题出现在启动过程的哪个阶段,以便我们可以采取适当的措施来解决问题。
查看默认/当前目标单位
使用以下命令查看默认使用的目标单位:
# systemctl get-default graphical.target
graphics.target 目标单元指示系统在图形化、多用户状态下运行。
这类似于 SysV 初始化系统中的运行级别 5.
我们可以使用旧命令 runlevel 验证这一点:
# runlevel N 5
默认目标单元由 /etc/systemd/system/default.target 文件表示。
此文件是指向当前默认目标单元的符号链接。
例如 :
# ls -lrt /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 36 Sep 23 20:01 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target
1. POST(开机自检)
从系统固件,可以是现代通用扩展固件接口 (UEFI) 或者经典的基本输入输出系统 (BIOS),执行开机自检 (POST),以及启动所需的硬件系统被初始化。
3. 加载引导加载程序(GRUB2)
RHEL 7 上使用的默认引导加载程序是 GRUB 2.
GRUB 代表 GRand Unified Bootloader。
GRUB 2 替换了旧的 GRUB 引导加载程序,也称为传统 GRUB。
GRUB 2 配置文件位于 /boot/grub2/grub.cfg(不要直接编辑此文件)。
生成 grub.cfg 时,GRUB 2 菜单配置设置取自 /etc/default/grub。
示例 /etc/default/grub 文件:
# cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/swap crashkernel=auto rd.lvm.lv=rhel/root rhgb quiet net.ifnames=0" GRUB_DISABLE_RECOVERY="true"
如果对这些参数中的任何一个进行了更改,则需要运行 grub2-mkconfig 以重新生成 /boot/grub2/grub.cfg 文件。
# grub2-mkconfig –o /boot/grub2/grub.cfg
GRUB2 在 /boot 目录中搜索压缩的内核镜像文件,也称为 vmlinuz。
GRUB2 将 vmlinuz 内核镜像文件加载到内存中,并将 initramfs 镜像文件的内容提取到一个基于内存的临时文件系统 (tmpfs) 中。
初始 内存 盘 (initrd) 是一个初始根文件系统,它安装在真正的根文件系统之前。
initramfs
初始 内存 文件系统的工作是预加载块设备模块,例如 IDE、SCSI 或者 RAID,以便随后可以访问和安装这些模块通常所在的根文件系统。
initramfs 绑定到内核,内核安装此 initramfs 作为两阶段引导过程的一部分。
dracut 实用程序会在安装新内核时创建 initramfs。
使用lsinitrd命令查看dracut创建的镜像内容:
# lsinitrd | less
systemd 介绍
systemd 是 CentOS/RHEL 7 中的新系统和服务管理器。
它向后兼容以前版本的 RedHat Linux 使用的 SysV 初始化脚本,包括 RHEL 6.
它取代了 Upstart 作为默认初始化系统。
以下步骤总结了引导过程在 RHEL/CentOS 7 中是如何发生的。
- 计算机的 BIOS 执行 POST。
- BIOS 读取引导加载程序的 MBR。
- GRUB 2 引导加载程序加载 vmlinuz 内核镜像。
- GRUB 2 提取 initramfs 镜像的内容。
- 内核从 initramfs 加载驱动程序模块。
- 内核启动系统的第一个进程 systemd。
- systemd 进程接管。它:
- 从 /etc/systemd 目录读取配置文件
- 读取由 /etc/systemd/system/default.target 链接的文件
- 使系统进入系统目标定义的状态
- 执行 /etc/rc.local