第19篇:Linux系统启动与引导原理及OpenEuler 24.03实践

Linux系统启动与引导原理及OpenEuler 24.03实践

文章目录

  • Linux系统启动与引导原理及OpenEuler 24.03实践
    • 一、OpenEuler 24.03系统启动全流程解析
      • 1. BIOS/UEFI自检与引导加载
      • 2. GRUB2引导程序详解
      • 3. 内核加载与初始化
      • 4. systemd初始化进程
      • 5. 系统环境初始化
      • 6. 用户登录与环境加载
    • 二、系统启动信息查看与分析
      • 1. dmesg命令详解(OpenEuler 24.03)
      • 2. journalctl命令:现代日志管理
    • 三、主引导扇区与磁盘启动机制
      • 1. MBR主引导扇区结构
      • 2. 操作MBR的实用命令
      • 3. GPT分区表与UEFI引导
    • 四、OpenEuler 24.03的systemd初始化系统
      • 1. systemd与传统init系统的对比
      • 2. systemd单元配置文件详解
      • 3. systemd目标(Target)管理
    • 五、系统与用户环境配置文件
      • 1. 系统级环境配置文件
      • 2. 用户级环境配置文件
      • 3. 环境变量生效与调试
    • 六、OpenEuler 24.03启动优化实践
      • 1. 启动时间分析
      • 2. 优化启动服务
      • 3. 内核参数优化
    • 总结
  • 禁用打印服务(如无打印机)
    • 总结

一、OpenEuler 24.03系统启动全流程解析

1. BIOS/UEFI自检与引导加载

OpenEuler 24.03作为基于Linux内核的企业级操作系统,其启动流程从硬件初始化开始。当计算机通电后,固件(BIOS或UEFI)首先执行加电自检(POST),检测CPU、内存、存储设备等硬件组件的状态。POST过程中,固件会初始化硬件并加载启动管理器。

在传统BIOS模式下,系统从主引导记录(MBR)加载引导程序;而在UEFI模式下,会从EFI系统分区(ESP)读取引导加载程序。OpenEuler 24.03同时支持两种引导模式,推荐使用UEFI以获得更好的安全性和性能。

关键概念解析:

  • MBR(主引导记录):位于磁盘首个扇区(512字节),包含引导程序、分区表和结束标志。在BIOS引导模式下,MBR中的GRUB引导程序负责加载操作系统。
  • UEFI(统一可扩展固件接口):取代传统BIOS的新型固件接口,支持更大容量磁盘、安全启动(Secure Boot)和更快的启动速度。OpenEuler 24.03的UEFI引导程序存储在/boot/efi目录。

2. GRUB2引导程序详解

OpenEuler 24.03默认使用GRUB2(GNU GRand Unified Bootloader 2)作为引导程序,相比传统GRUB具有更强大的功能和扩展性。GRUB2的配置文件位于/etc/grub2.cfg,该文件由grub2-mkconfig命令自动生成,整合了/etc/grub.d/目录下的各个配置片段。

GRUB2启动流程:

  1. 阶段1:从MBR或UEFI加载GRUB2的核心引导程序。
  2. 阶段1.5:加载磁盘文件系统驱动,以便读取内核和配置文件。
  3. 阶段2:加载/boot/grub2/grub.cfg配置文件,显示启动菜单。

GRUB2常用操作(OpenEuler 24.03):

# 查看GRUB2配置文件
cat /etc/grub2.cfg

# 重新生成GRUB2配置(修改内核参数后需执行)
grub2-mkconfig -o /etc/grub2.cfg

# 查看可用的启动项
grub2-editenv list

# UEFI模式下更新引导加载程序
grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=openEuler

3. 内核加载与初始化

GRUB2加载内核映像(/boot/vmlinuz-)和初始内存磁盘(/boot/initramfs-.img)到内存。内核映像包含压缩的内核代码,而initramfs包含早期启动所需的驱动和工具。

内核启动参数解析:
OpenEuler 24.03的内核启动参数可通过/proc/cmdline查看,常见参数包括:

  • root=/dev/mapper/:指定根文件系统位置
  • ro:以只读方式挂载根文件系统
  • crashkernel=auto:预留内核崩溃转储空间
  • rd.lvm.lv=:指定LVM逻辑卷
  • quiet:静默启动,仅显示关键信息

案例:查看内核启动参数

cat /proc/cmdline
# 输出示例:ro root=/dev/mapper/openeuler-root rd.lvm.lv=openeuler/root rd.lvm.lv=openeuler/swap rhgb quiet

4. systemd初始化进程

与原文档中的Upstart不同,OpenEuler 24.03采用systemd作为初始化系统(init system),它是一个系统和服务管理器,负责启动用户空间服务,是所有进程的父进程(PID 1)。

systemd核心概念:

  • 单元(Unit):systemd管理的基本单位,包括服务(.service)、套接字(.socket)、设备(.device)等。
  • 目标(Target):一组单元的集合,对应传统的运行级别。例如:
    • multi-user.target:多用户文本界面(对应运行级别3)
    • graphical.target:图形界面(对应运行级别5)
    • rescue.target:救援模式
  • 依赖关系:systemd支持并行启动,通过定义单元间的依赖关系优化启动时间。

systemd常用命令(OpenEuler 24.03):

# 查看systemd版本
systemctl --version

# 查看所有单元状态(过滤活跃服务)
systemctl list-units --type=service --state=active

# 查看系统启动时间
systemd-analyze

# 启动/停止/重启服务
systemctl start network.service
systemctl stop firewalld.service
systemctl restart sshd.service

# 设置服务开机自启
systemctl enable httpd.service
systemctl disable nfs.service

# 查看服务日志
journalctl -u httpd.service

# 切换运行目标
systemctl isolate multi-user.target  # 切换到多用户模式
systemctl isolate graphical.target   # 切换到图形模式

5. 系统环境初始化

systemd根据目标(Target)启动相应的服务单元,初始化过程涉及以下关键步骤:

1. 挂载文件系统

  • 读取/etc/fstab文件,挂载本地和网络文件系统
  • 处理带有noauto选项的文件系统
  • 激活LVM逻辑卷和交换分区

2. 启动基础服务

  • 网络服务(network.service)
  • 日志服务(systemd-journald.service)
  • 硬件设备驱动加载
  • 安全服务(firewalld.service或iptables)

3. 执行本地初始化脚本
OpenEuler 24.03在/etc/rc.d/rc.local中保留了传统初始化脚本的兼容性,该脚本会在系统启动最后阶段执行。用户可在此添加自定义启动命令。

案例:查看文件系统挂载情况

mount
# 输出示例:
# /dev/mapper/openeuler-root on / type xfs (rw,relatime,attr2,inode64,noquota)
# devtmpfs on /dev type devtmpfs (rw,nosuid,size=1629036k,nr_inodes=407259,mode=755)
# tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)

6. 用户登录与环境加载

系统初始化完成后,会启动登录服务(如getty),等待用户输入凭据。OpenEuler 24.03支持多种登录方式:

1. 命令行登录

  • getty服务在tty1-tty6终端启动
  • 登录时验证用户凭据(/etc/passwd/etc/shadow
  • 加载用户环境配置文件(.bash_profile.bashrc等)

2. 图形界面登录

  • GDM(GNOME Display Manager)服务启动图形登录界面
  • 支持密码、指纹等多种认证方式

3. 远程登录

  • SSH服务(sshd.service)支持远程安全登录
  • 支持密钥认证和双因素认证

环境变量加载顺序:

  1. 系统级配置:/etc/profile/etc/bashrc
  2. 用户级配置:~/.bash_profile~/.bashrc
  3. 会话级配置:登录时执行的脚本

案例:查看当前用户环境变量

env | sort
# 输出示例:
# HOME=/root
# LANG=en_US.UTF-8
# PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# PWD=/root
# SHELL=/bin/bash
# USER=root

二、系统启动信息查看与分析

1. dmesg命令详解(OpenEuler 24.03)

dmesg命令用于显示内核环形缓冲区(ring buffer)中的启动信息,这些信息由内核在启动过程中输出,包括硬件检测、驱动加载等关键日志。OpenEuler 24.03中,dmesg的输出与传统Linux系统类似,但支持更丰富的过滤和格式化选项。

dmesg常用选项:

  • -c:显示信息后清除环形缓冲区
  • -k:仅显示内核日志
  • -t:显示时戳
  • -T:使用人类可读的时间格式
  • -p :过滤指定日志级别(0-7,0为紧急,7为调试)
  • --color:使用颜色标记不同日志级别

案例1:查看完整启动日志

dmesg
# 输出片段:
# [    0.000000] Linux version 5.10.0-190.32.1.openeuler24.03.x86_64 ([email protected]) (gcc (GCC) 10.3.0, GNU ld (GNU Binutils) 2.35.2) #1 SMP Fri Jun 9 15:30:21 UTC 2023
# [    0.000000] Command line: ro root=/dev/mapper/openeuler-root rd.lvm.lv=openeuler/root rd.lvm.lv=openeuler/swap rhgb quiet
# [    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
# [    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
# [    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'

案例2:查看带时间戳的日志

dmesg -T
# 输出示例:
# [Sun Jun 16 08:30:21 2024] Linux version 5.10.0-190.32.1.openeuler24.03.x86_64...
# [Sun Jun 16 08:30:22 2024] systemd[1]: Starting System Logging Service...

案例3:过滤网络相关日志

dmesg | grep -i network
# 输出示例:
# [    2.345678] e1000: eth0: Intel(R) PRO/1000 Network Connection
# [    2.567890] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

2. journalctl命令:现代日志管理

OpenEuler 24.03使用systemd-journald作为系统日志服务,通过journalctl命令可查看包括启动日志在内的所有系统日志,相比dmesg具有更强大的过滤和查询功能。

journalctl常用选项:

  • -b:查看当前启动的日志
  • -b -1:查看前一次启动的日志
  • -u :查看指定单元的日志
  • --since "2024-06-01 00:00:00":查看指定时间之后的日志
  • --until "2024-06-01 12:00:00":查看指定时间之前的日志
  • -p :过滤日志级别(0-7,同dmesg)
  • -f:实时跟踪日志输出

案例1:查看当前启动的所有日志

journalctl -b

案例2:查看systemd启动过程

journalctl -u systemd --no-pager
# 输出示例:
# Jun 16 08:30:21 localhost.localdomain systemd[1]: Starting System and Service Manager...
# Jun 16 08:30:21 localhost.localdomain systemd[1]: Initializing machine ID from random generator.
# Jun 16 08:30:21 localhost.localdomain systemd[1]: Set hostname to .

案例3:实时跟踪网络服务日志

journalctl -u network.service -f

三、主引导扇区与磁盘启动机制

1. MBR主引导扇区结构

在传统BIOS引导模式下,OpenEuler 24.03的磁盘主引导扇区(MBR)结构与标准Linux系统一致,包含以下四个部分:

  1. 主引导程序(446字节):位于扇区0-445字节,负责加载GRUB2或其他引导程序。
  2. 分区表(64字节):包含4个主分区项,每个分区项16字节,记录分区类型、起始位置等信息。
  3. 结束标志(2字节):值为0x55AA,用于标识有效MBR。

MBR结构表:

偏移地址 长度(字节) 内容描述
0x0000 446 主引导程序
0x01BE 64 分区表(4个分区项)
0x01FE 2 结束标志(0x55AA)

2. 操作MBR的实用命令

案例1:备份MBR到文件

# 备份整个MBR(512字节)
dd if=/dev/sda of=/root/mbr.backup bs=512 count=1
# 解释:
# if=/dev/sda:输入设备为第一个磁盘
# of=/root/mbr.backup:输出文件路径
# bs=512:块大小512字节
# count=1:仅读取1块

# 恢复MBR(危险操作,谨慎使用)
dd if=/root/mbr.backup of=/dev/sda bs=512 count=1

案例2:查看MBR十六进制内容

# 使用hexdump命令查看MBR前64字节
hexdump -C /dev/sda | head -n 16
# 输出示例:
# 00000000  eb 3c 90 4d 53 44 4f 53  35 2e 30 00 02 01 01 00  |.<.MSDOS5.0......|
# 00000010  02 e0 00 40 0b f0 09 00  12 00 02 00 00 00 00 00  |...@............|
# 00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
# ...(省略中间内容)
# 000001be  80 01 01 00 02 e0 00 40  0b f0 09 00 12 00 02 00  |.........@......|
# 000001ce  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
# 000001de  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
# 000001ee  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|

3. GPT分区表与UEFI引导

OpenEuler 24.03在UEFI模式下使用GPT(GUID分区表),相比MBR具有以下优势:

  • 支持大于2TB的磁盘
  • 支持128个主分区
  • 包含冗余分区表,提高可靠性

GPT磁盘的引导信息存储在EFI系统分区(ESP),通常为FAT32格式,位于/boot/efi目录。UEFI引导程序(如grubx64.efi)存储在ESP中,由UEFI固件直接加载。

查看GPT分区表:

# 使用gdisk工具查看GPT分区
gdisk -l /dev/sda
# 输出示例:
# GPT fdisk (gdisk) version 1.0.5
# 
# Partition table scan:
#   MBR: protective
#   BSD: not present
#   APM: not present
#   GPT: present
# 
# Found valid GPT with protective MBR; using GPT.
# Disk /dev/sda: 209715200 sectors, 100.0 GiB
# Sector size (logical/physical): 512/512 bytes
# Disk identifier (GUID): XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
# Partition table holds up to 128 entries
# Main partition table begins at sector 2 and ends at sector 33
# First usable sector is 34, last usable sector is 209715166
# Partitions will be aligned on 2048-sector boundaries
# Total free space is 2048 sectors (1.0 MiB)
# 
# Number  Start (sector)    End (sector)  Size       Code  Name
#    1            2048         4194303   2.0 GiB     EF00  EFI System
#    2         4194304        4398591   100.0 MiB   8200  Linux swap
#    3         4398592      209713151   98.0 GiB    8300  Linux filesystem

四、OpenEuler 24.03的systemd初始化系统

1. systemd与传统init系统的对比

OpenEuler 24.03采用systemd作为初始化系统,替代了传统的sysvinit和Upstart,主要优势包括:

特性 systemd sysvinit Upstart
启动模式 并行启动,依赖关系管理 串行启动 事件驱动,部分并行
单元类型 服务、套接字、设备等多种类型 仅服务 作业(Job)
启动速度 极快(毫秒级启动) 较快
依赖管理 显式定义依赖关系 无依赖管理 事件触发
日志系统 统一日志(journald) 分散日志 分散日志

2. systemd单元配置文件详解

systemd单元配置文件位于/usr/lib/systemd/system//etc/systemd/system/目录,后者优先级高于前者。用户可通过修改或创建配置文件来自定义服务行为。

单元文件结构:

[Unit]
Description=HTTP Server
After=network.target remote-fs.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/sbin/httpd -DFOREGROUND
ExecReload=/usr/sbin/httpd -k graceful
ExecStop=/usr/sbin/httpd -k stop
Restart=on-failure
User=apache
Group=apache
EnvironmentFile=/etc/sysconfig/httpd

[Install]
WantedBy=multi-user.target

关键段说明:

  • [Unit]:定义单元描述和依赖关系
  • [Service]:定义服务启动、停止、重启命令和运行参数
  • [Install]:定义单元安装目标(如WantedBy指定加入哪个目标)

3. systemd目标(Target)管理

systemd使用目标(Target)替代传统运行级别,常见目标如下:

目标名称 等价运行级别 说明
default.target 5 默认目标,通常为图形界面
multi-user.target 3 多用户文本界面
graphical.target 5 图形界面
rescue.target 1 救援模式
emergency.target 0 紧急模式(单用户)
shutdown.target 6 关机
reboot.target 6 重启

案例:查看当前目标

systemctl get-default
# 输出示例:graphical.target

案例:切换到多用户模式

systemctl isolate multi-user.target
# 或
systemctl set-default multi-user.target

五、系统与用户环境配置文件

1. 系统级环境配置文件

OpenEuler 24.03的系统级环境配置文件位于/etc/目录,对所有用户生效,加载顺序如下:

  1. /etc/profile:用户登录时执行,设置全局环境变量,调用/etc/profile.d/下的脚本。
  2. /etc/bashrc:bash shell启动时执行,设置shell函数和别名。

/etc/profile关键内容解析:

# 定义PATH环境变量
PATH=$PATH:$HOME/bin
export PATH

# 加载语言环境
if [ -f /etc/locale.conf ]; then
    . /etc/locale.conf
elif [ -z "$LANG" -a -f /etc/default/locale ]; then
    . /etc/default/locale
    if [ -z "$LANG" ]; then
        LANG=en_US.UTF-8
    fi
fi
export LANG

# 调用profile.d目录下的脚本
for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
        . $i
    fi
done
unset i

2. 用户级环境配置文件

每个用户的家目录下包含以下环境配置文件,仅对当前用户生效:

  1. ~/.bash_profile:交互式登录时执行,设置用户专属环境变量,调用~/.bashrc
  2. ~/.bashrc:交互式非登录shell启动时执行,设置shell函数和别名。
  3. ~/.bash_logout:用户登出时执行,清理环境。

~/.bash_profile示例:

# 加载bashrc
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# 设置个人PATH
PATH=$PATH:$HOME/bin
export PATH

# 设置Java环境变量
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH

3. 环境变量生效与调试

使环境变量立即生效:

# 重新加载系统profile
source /etc/profile

# 重新加载用户profile
source ~/.bash_profile

调试环境变量加载:

# 启动bash时显示所有执行的脚本
bash -x

# 查看环境变量加载顺序
env | sort

六、OpenEuler 24.03启动优化实践

1. 启动时间分析

systemd提供了强大的启动时间分析工具,可帮助定位启动瓶颈:

案例1:查看总体启动时间

systemd-analyze
# 输出示例:
# Startup finished in 1.234s (kernel) + 3.456s (userspace) = 4.690s
# graphical.target reached after 3.210s in userspace

案例2:查看各单元启动耗时

systemd-analyze blame
# 输出示例:
#         1.234s network.service
#         0.876s sshd.service
#         0.543s firewalld.service
#         0.321s chronyd.service

案例3:生成启动时间可视化图表

systemd-analyze plot > boot-time.svg
# 在浏览器中打开boot-time.svg查看可视化图表

2. 优化启动服务

通过禁用不必要的服务可显著加快启动速度:

案例:禁用不常用服务

# 查看所有开机自启服务
systemctl list-unit-files --state=enabled | grep .service

# 禁用DNS缓存服务(如无需本地DNS)
systemctl disable systemd-resolved.service

# 禁用蓝牙服务(如无蓝牙设备)
systemctl disable bluetooth.service

# 禁用打印服务(如无打印机)
systemctl disable cups.service

3. 内核参数优化

修改/etc/default/grub中的内核参数可优化启动过程:

案例:优化grub配置

# 编辑grub配置
vi /etc/default/grub

# 优化参数示例(添加到GRUB_CMDLINE_LINUX行)
GRUB_CMDLINE_LINUX="rhgb quiet elevator=deadline numa=off"

# 重新生成grub配置
grub2-mkconfig -o /etc/grub2.cfg

总结

OpenEuler 24.03的启动与引导流程融合了现代Linux系统的最佳实践,从BIOS/UEFI自检到systemd初始化,每个环节都经过精心设计以确保稳定性和性能。通过深入理解启动流程和掌握systemd管理工具,系统管理员可更好地维护和优化OpenEuler系统,实现快速启动和稳定运行。

(如无蓝牙设备)
systemctl disable bluetooth.service

禁用打印服务(如无打印机)

systemctl disable cups.service


### 3. 内核参数优化

修改`/etc/default/grub`中的内核参数可优化启动过程:

**案例:优化grub配置**
```bash
# 编辑grub配置
vi /etc/default/grub

# 优化参数示例(添加到GRUB_CMDLINE_LINUX行)
GRUB_CMDLINE_LINUX="rhgb quiet elevator=deadline numa=off"

# 重新生成grub配置
grub2-mkconfig -o /etc/grub2.cfg

总结

OpenEuler 24.03的启动与引导流程融合了现代Linux系统的最佳实践,从BIOS/UEFI自检到systemd初始化,每个环节都经过精心设计以确保稳定性和性能。通过深入理解启动流程和掌握systemd管理工具,系统管理员可更好地维护和优化OpenEuler系统,实现快速启动和稳定运行。

在日常管理中,熟练使用systemctljournalctl等工具进行服务管理和日志分析,结合环境配置文件的合理设置,能够有效提升系统管理效率,为企业应用提供坚实的底层平台支持。

你可能感兴趣的:(OpenEuler,24.03系统管理大全,linux,服务器,java,centos,运维,系统架构)