深入探索systemd:Linux启动管理与目标状态控制
立即解锁
发布时间: 2025-08-13 00:28:06 阅读量: 8 订阅数: 15 

### 深入探索 systemd:Linux 启动管理与目标状态控制
#### 1. systemd 概述
systemd 是一个功能强大且复杂的系统管理工具,它并非单一的大型二进制可执行文件,而是由众多小的组件和子命令构成,每个组件和子命令都用于执行特定的任务。
#### 2. 探索 Linux 启动序列
在这部分,我们将探索用于管理 Linux 启动序列的文件和工具,包括系统启动顺序、更改默认启动目标以及手动切换目标而无需重启系统。同时,我们会熟悉两个重要的 systemd 工具:
- **systemctl 命令**:与 systemd 交互并发送命令的主要方式。
- **journalctl 命令**:用于访问 systemd 日志,其中包含大量系统历史数据,如内核和服务消息(包括信息和错误)。
#### 3. GRUB 配置
在观察启动序列之前,我们需要对 GRUB(Grand Unified Boot Loader)进行配置,以显示启动和关机过程中的详细消息。通常,大多数发行版会使用启动动画或启动画面来隐藏这些消息,我们可以通过修改 GRUB 配置来改变这种情况。
- **主要配置文件**:/boot/grub2/grub.cfg,但不要直接修改该文件,因为内核更新时它可能会被覆盖。
- **本地配置文件**:/etc/default/grub,我们可以修改该文件的内容来调整 grub.cfg 的默认设置。
##### 3.1 查看 /etc/default/grub 文件
以下是查看当前未修改的 /etc/default/grub 文件的命令:
```bash
[root@studentvm1 ~]# cd /etc/default ; cat 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="resume=/dev/mapper/fedora_studentvm1-swap rd.lvm.lv=fedora_studentvm1/root rd.lvm.lv=fedora_studentvm1/swap rd.lvm.lv=fedora_studentvm1/usr rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
[root@studentvm1 default]#
```
其中,`GRUB_TIMEOUT` 是 GRUB 菜单倒计时的秒数,默认是 5 秒,可将其改为 10 秒,以便有更多时间响应 GRUB 菜单。`GRUB_CMDLINE_LINUX` 行列出了启动时传递给内核的命令行参数,通常可以删除 `rhgb` 和 `quiet` 参数,`rhgb` 会在启动时显示图形动画而不是启动消息,`quiet` 会阻止显示启动消息和错误信息。
##### 3.2 修改 GRUB 配置
使用文本编辑器删除 `rhgb` 和 `quiet` 参数,修改后的文件如下:
```bash
[root@studentvm1 default]# cat 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=/dev/mapper/fedora_studentvm1-swap rd.lvm.lv=fedora_studentvm1/root rd.lvm.lv=fedora_studentvm1/swap rd.lvm.lv=fedora_studentvm1/usr"
GRUB_DISABLE_RECOVERY="false"
[root@studentvm1 default]#
```
然后使用 `grub2-mkconfig` 程序生成新的 grub.cfg 配置文件:
```bash
[root@studentvm1 grub2]# grub2-mkconfig > /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.18.9-200.fc28.x86_64
Found initrd image: /boot/initramfs-4.18.9-200.fc28.x86_64.img
Found linux image: /boot/vmlinuz-4.17.14-202.fc28.x86_64
Found initrd image: /boot/initramfs-4.17.14-202.fc28.x86_64.img
Found linux image: /boot/vmlinuz-4.16.3-301.fc28.x86_64
Found initrd image: /boot/initramfs-4.16.3-301.fc28.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-7f12524278bd40e9b10a085bc82dc504
Found initrd image: /boot/initramfs-0-rescue-7f12524278bd40e9b10a085bc82dc504.img
done
[root@studentvm1 grub2]#
```
最后重启虚拟机以查看原本隐藏在 Plymouth 启动动画后的启动消息。
##### 3.3 查看启动消息的其他方法
如果未禁用 Plymouth 启动动画或消息滚动太快无法阅读,可以通过以下方法查看启动消息:
- 使用 `less` 命令查看 /var/log/messages 文件的内容,该文件包含启动和运行过程中的消息。
- 使用 `journalctl` 命令查看 systemd 日志:
```bash
[root@studentvm1 grub2]# journalctl
-- Logs begin at Sat 2020-01-11 21:48:08 EST, end at Fri 2020-04-03 08:54:30 EDT. --
Jan 11 21:48:08 f31vm.both.org kernel: Linux version 5.3.7-301.fc31.x86_64 ([email protected]) (gcc version 9.2.1 20190827 (Red Hat 9.2.1-1) (GCC)) #1 SMP Mon Oct >
Jan 11 21:48:08 f31vm.both.org kernel: Command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.3.7-301.fc31.x86_64 root=/dev/mapper/VG01-root ro resume=/dev/mapper/VG01-swap rd.lvm.lv=VG01/root rd>
...
```
#### 4. 内核加载与 systemd 接管
GRUB 将内核加载到内存后,内核需要先从压缩文件中解压出来才能执行有用的工作。内核解压并开始运行后,会加载 systemd 并将控制权交给它,此时启动过程结束,但系统还无法为用户执行任何有
0
0
复制全文
相关推荐









